parent
							
								
									f5c7f04bff
								
							
						
					
					
						commit
						00ef35b405
					
				@ -1,38 +1,38 @@ | 
				
			||||
package digital.laboratory.platform.entrustment.config; | 
				
			||||
 | 
				
			||||
import digital.laboratory.platform.entrustment.enums.EntrustEvent; | 
				
			||||
import digital.laboratory.platform.entrustment.enums.EntrustStatusConstants; | 
				
			||||
import org.springframework.beans.factory.annotation.Value; | 
				
			||||
import org.springframework.context.annotation.Configuration; | 
				
			||||
import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter; | 
				
			||||
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ChenJiangBao | 
				
			||||
 * @version 1.0 | 
				
			||||
 * @description: 委托状态机配置类 | 
				
			||||
 * @date 2025/3/14 11:47 | 
				
			||||
 */ | 
				
			||||
@Configuration | 
				
			||||
public class EntrustStateMachineConfig extends EnumStateMachineConfigurerAdapter<EntrustStatusConstants, EntrustEvent> { | 
				
			||||
 | 
				
			||||
    @Value("${dlp.entrustment.isApprovalRequired}") | 
				
			||||
    private boolean isApprovalRequired;  // 动态标志判断是否需要审批
 | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public void configure(StateMachineStateConfigurer<EntrustStatusConstants, EntrustEvent> states) throws Exception { | 
				
			||||
        states.withStates() | 
				
			||||
                .initial(EntrustStatusConstants.ENTRUST_STATUS_CREATED) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CHECK_CLAIM) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CHECK) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CONFIRM) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_DELIVER) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_ACCEPT) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_TEST_FINISH) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_COMPLETED) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_TERMINATED) | 
				
			||||
                .state(EntrustStatusConstants.ENTRUST_STATUS_ABORTED) | 
				
			||||
                .end(EntrustStatusConstants.ENTRUST_STATUS_COMPLETED); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
//package digital.laboratory.platform.entrustment.config;
 | 
				
			||||
//
 | 
				
			||||
//import digital.laboratory.platform.entrustment.enums.EntrustEvent;
 | 
				
			||||
//import digital.laboratory.platform.entrustment.enums.EntrustStatusConstants;
 | 
				
			||||
//import org.springframework.beans.factory.annotation.Value;
 | 
				
			||||
//import org.springframework.context.annotation.Configuration;
 | 
				
			||||
//import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter;
 | 
				
			||||
//import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
 | 
				
			||||
//
 | 
				
			||||
///**
 | 
				
			||||
// * @author ChenJiangBao
 | 
				
			||||
// * @version 1.0
 | 
				
			||||
// * @description: 委托状态机配置类
 | 
				
			||||
// * @date 2025/3/14 11:47
 | 
				
			||||
// */
 | 
				
			||||
//@Configuration
 | 
				
			||||
//public class EntrustStateMachineConfig extends EnumStateMachineConfigurerAdapter<EntrustStatusConstants, EntrustEvent> {
 | 
				
			||||
//
 | 
				
			||||
//    @Value("${dlp.entrustment.isApprovalRequired}")
 | 
				
			||||
//    private boolean isApprovalRequired;  // 动态标志判断是否需要审批
 | 
				
			||||
//
 | 
				
			||||
//    @Override
 | 
				
			||||
//    public void configure(StateMachineStateConfigurer<EntrustStatusConstants, EntrustEvent> states) throws Exception {
 | 
				
			||||
//        states.withStates()
 | 
				
			||||
//                .initial(EntrustStatusConstants.ENTRUST_STATUS_CREATED)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CHECK_CLAIM)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CHECK)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CONFIRM)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_DELIVER)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_ACCEPT)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_TEST_FINISH)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_COMPLETED)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_TERMINATED)
 | 
				
			||||
//                .state(EntrustStatusConstants.ENTRUST_STATUS_ABORTED)
 | 
				
			||||
//                .end(EntrustStatusConstants.ENTRUST_STATUS_COMPLETED);
 | 
				
			||||
//    }
 | 
				
			||||
//}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,28 @@ | 
				
			||||
package digital.laboratory.platform.entrustment.service; | 
				
			||||
 | 
				
			||||
import digital.laboratory.platform.entrustment.vo.EntrustmentVO; | 
				
			||||
 | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ChenJiangBao | 
				
			||||
 * @version 1.0 | 
				
			||||
 * @description: 推送数据到labscare平台接口 | 
				
			||||
 * @date 2025/3/27 16:32 | 
				
			||||
 */ | 
				
			||||
public interface PushDataToLabsCareService { | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 推送鉴定事项确认书数据 | 
				
			||||
     * | 
				
			||||
     * @param entrustVO 委托vo | 
				
			||||
     */ | 
				
			||||
    void pushItemConfirmLetterData(EntrustmentVO entrustVO); | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 推送委托函数据 | 
				
			||||
     * | 
				
			||||
     * @param entrustVO | 
				
			||||
     */ | 
				
			||||
    void pushEntrustLetterData(EntrustmentVO entrustVO) throws IllegalAccessException; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,308 @@ | 
				
			||||
package digital.laboratory.platform.entrustment.service.impl; | 
				
			||||
 | 
				
			||||
import cn.hutool.core.util.StrUtil; | 
				
			||||
import cn.hutool.json.JSONObject; | 
				
			||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 
				
			||||
import digital.laboratory.platform.entrustment.config.properties.ApiPathProperties; | 
				
			||||
import digital.laboratory.platform.entrustment.entity.Entrustment; | 
				
			||||
import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; | 
				
			||||
import digital.laboratory.platform.entrustment.enums.EntrustStatusConstants; | 
				
			||||
import digital.laboratory.platform.entrustment.mapper.EntrustmentMapper; | 
				
			||||
import digital.laboratory.platform.entrustment.service.CommonFeignService; | 
				
			||||
import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService; | 
				
			||||
import digital.laboratory.platform.entrustment.service.EntrustmentService; | 
				
			||||
import digital.laboratory.platform.entrustment.service.PushDataToLabsCareService; | 
				
			||||
import digital.laboratory.platform.entrustment.vo.EntrustmentVO; | 
				
			||||
import digital.laboratory.platform.entrustment.vo.MaterialListForBookVo; | 
				
			||||
import digital.laboratory.platform.othersys.utils.HttpsUtils; | 
				
			||||
import digital.laboratory.platform.sys.entity.SysUser; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.springframework.http.*; | 
				
			||||
import org.springframework.scheduling.annotation.Scheduled; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
import org.springframework.web.client.RestClientException; | 
				
			||||
 | 
				
			||||
import javax.annotation.Resource; | 
				
			||||
import java.time.format.DateTimeFormatter; | 
				
			||||
import java.util.ArrayList; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
import java.util.Optional; | 
				
			||||
import java.util.concurrent.atomic.AtomicInteger; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author ChenJiangBao | 
				
			||||
 * @version 1.0 | 
				
			||||
 * @description: 推送数据到labscare平台接口 | 
				
			||||
 * @date 2025/3/27 16:32 | 
				
			||||
 */ | 
				
			||||
@Slf4j | 
				
			||||
@Service | 
				
			||||
public class PushDataToLabsCareServiceImpl implements PushDataToLabsCareService { | 
				
			||||
 | 
				
			||||
    @Resource | 
				
			||||
    private EntrustmentService entrustmentService; | 
				
			||||
 | 
				
			||||
    @Resource | 
				
			||||
    private EntrustmentMapper entrustmentMapper; | 
				
			||||
 | 
				
			||||
    @Resource | 
				
			||||
    private ApiPathProperties apiPathProperties; | 
				
			||||
 | 
				
			||||
    @Resource | 
				
			||||
    private CommonFeignService commonFeignService; | 
				
			||||
 | 
				
			||||
    @Resource | 
				
			||||
    private EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; | 
				
			||||
 | 
				
			||||
    private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); | 
				
			||||
 | 
				
			||||
    // "#NULL#" 作为空数据的占位符, 对于系统中没有的信息以占位符代替
 | 
				
			||||
    public final static String NULL_PLACEHOLDER = "#NULL#"; | 
				
			||||
 | 
				
			||||
    // 委托书的推送标识
 | 
				
			||||
    public final static String ENTRUST_LETTER = "EntrustLetter"; | 
				
			||||
 | 
				
			||||
    // 事项确认书的推送标识
 | 
				
			||||
    public final static String ITEM_CONFIRM_LETTER = "ItemConfirmLetter"; | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 做一个定时推送,对于推送失败的委托进行重新推送, 每天凌晨1点推送 | 
				
			||||
     */ | 
				
			||||
//    @Scheduled(cron = "30 * * * * ?")
 | 
				
			||||
    @Scheduled(cron = "0 0 1 * * ?")  // 每天凌晨 1 点执行
 | 
				
			||||
    public void timingPushDataToLabsCare() throws IllegalAccessException { | 
				
			||||
        // 查询受理后推送失败的委托
 | 
				
			||||
        List<EntrustmentVO> entrustmentList = entrustmentMapper.getEntrustmentVOList( | 
				
			||||
                Wrappers.<Entrustment>query() | 
				
			||||
                        .in("e.status", | 
				
			||||
                                EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus(), | 
				
			||||
                                EntrustStatusConstants.ENTRUST_STATUS_TEST_FINISH.getStatus(), | 
				
			||||
                                EntrustStatusConstants.ENTRUST_STATUS_COMPLETED.getStatus()) | 
				
			||||
                        .and(wrapper -> wrapper | 
				
			||||
                                .eq("e.push_flag", "") | 
				
			||||
                                .or() | 
				
			||||
                                .isNull("e.push_flag") | 
				
			||||
                                .or() | 
				
			||||
                                .like("e.push_flag", "false") | 
				
			||||
                        ) | 
				
			||||
        ); | 
				
			||||
 | 
				
			||||
        for (EntrustmentVO entrustmentVO : entrustmentList) { | 
				
			||||
            String pushFlag = entrustmentVO.getPushFlag(); | 
				
			||||
            if (StrUtil.isBlank(pushFlag)) { | 
				
			||||
                pushEntrustLetterData(entrustmentVO); | 
				
			||||
                pushItemConfirmLetterData(entrustmentVO); | 
				
			||||
            } else { | 
				
			||||
                List<String> flagList = StrUtil.split(pushFlag, StrUtil.COMMA).stream().filter(str -> str.contains("false")).collect(Collectors.toList()); | 
				
			||||
                for (String flag : flagList) { | 
				
			||||
                    if (flag.contains(ENTRUST_LETTER)) { | 
				
			||||
                        pushEntrustLetterData(entrustmentVO); | 
				
			||||
                    } else { | 
				
			||||
                        pushItemConfirmLetterData(entrustmentVO); | 
				
			||||
                    } | 
				
			||||
                } | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 推送鉴定事项确认书数据 | 
				
			||||
     * | 
				
			||||
     * @param entrustVO 委托vo | 
				
			||||
     */ | 
				
			||||
    @Override | 
				
			||||
    public void pushItemConfirmLetterData(EntrustmentVO entrustVO) { | 
				
			||||
        JSONObject jsonObject = buildItemConfirmLetterJsonPayload(entrustVO); | 
				
			||||
        String successFlag = ITEM_CONFIRM_LETTER + ":true"; | 
				
			||||
        String failureFlag = ITEM_CONFIRM_LETTER + ":false"; | 
				
			||||
        try { | 
				
			||||
            ResponseEntity<String> response = exchangeRemoteApi(jsonObject, apiPathProperties.getConfirmLetter()); | 
				
			||||
 | 
				
			||||
            if (response.getStatusCode().is2xxSuccessful() && response.getBody().contains("\"status\":200")) { | 
				
			||||
                updatePushFlag(entrustVO, ITEM_CONFIRM_LETTER, successFlag); | 
				
			||||
                log.info("推送鉴定事项确认书数据成功, 受理编号: {}, 响应: {}", entrustVO.getAcceptNo(), response.getBody()); | 
				
			||||
            } else { | 
				
			||||
                updatePushFlag(entrustVO, ITEM_CONFIRM_LETTER, failureFlag); | 
				
			||||
                log.warn("推送鉴定事项确认书数据失败, 受理编号: {}, 状态码: {}, 响应: {}", | 
				
			||||
                        entrustVO.getAcceptNo(), response.getStatusCode(), response.getBody()); | 
				
			||||
            } | 
				
			||||
        } catch (RestClientException e) { | 
				
			||||
            log.error("推送鉴定事项确认书数据到 LabsCare 失败, 受理编号: {}", entrustVO.getAcceptNo(), e); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 推送委托函数据 | 
				
			||||
     * | 
				
			||||
     * @param entrustVO | 
				
			||||
     */ | 
				
			||||
    @Override | 
				
			||||
    public void pushEntrustLetterData(EntrustmentVO entrustVO) throws IllegalAccessException { | 
				
			||||
        Map<String, Object> dataMap = entrustmentService.buildEntrustLetterDataMap(entrustVO); | 
				
			||||
        JSONObject jsonObject = buildEntrustLetterJsonPayload(entrustVO, dataMap); | 
				
			||||
 | 
				
			||||
        String successFlag = ENTRUST_LETTER + ":true"; | 
				
			||||
        String failureFlag = ENTRUST_LETTER + ":false"; | 
				
			||||
        try { | 
				
			||||
            ResponseEntity<String> response = exchangeRemoteApi(jsonObject, apiPathProperties.getEntrustLetter()); | 
				
			||||
 | 
				
			||||
            if (response.getStatusCode().is2xxSuccessful() && response.getBody().contains("\"status\":200")) { | 
				
			||||
                updatePushFlag(entrustVO, ENTRUST_LETTER, successFlag); | 
				
			||||
                log.info("推送鉴定委托书数据成功, 委托编号: {}, 响应: {}", entrustVO.getEntrustmentNo(), response.getBody()); | 
				
			||||
            } else { | 
				
			||||
                updatePushFlag(entrustVO, ENTRUST_LETTER, failureFlag); | 
				
			||||
                log.warn("推送鉴定委托书数据失败, 委托编号: {}, 状态码: {}, 响应: {}", | 
				
			||||
                        entrustVO.getEntrustmentNo(), response.getStatusCode(), response.getBody()); | 
				
			||||
            } | 
				
			||||
        } catch (RestClientException e) { | 
				
			||||
            log.error("推送鉴定委托书数据到 LabsCare 失败, 委托编号: {}", entrustVO.getEntrustmentNo(), e); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 构建委托函的JSON负载 | 
				
			||||
     * | 
				
			||||
     * @param entrustVO 委托VO对象 | 
				
			||||
     * @param dataMap 数据映射 | 
				
			||||
     * @return 构建好的JSON对象 | 
				
			||||
     */ | 
				
			||||
    private JSONObject buildEntrustLetterJsonPayload(EntrustmentVO entrustVO, Map<String, Object> dataMap) { | 
				
			||||
        JSONObject jsonObject = new JSONObject(); | 
				
			||||
        jsonObject.set("afsj", entrustVO.getHappenTime()); // 案发时间
 | 
				
			||||
        jsonObject.set("ajmc", entrustVO.getCaseName()); // 案事件名称
 | 
				
			||||
        jsonObject.set("dwgz", entrustVO.getClientOrgName()); // 单位盖章
 | 
				
			||||
        jsonObject.set("jyaq", entrustVO.getCaseBrief()); // 简要案情
 | 
				
			||||
        jsonObject.set("sjdwfzr", entrustVO.getDeliverer1Name() + "、" + entrustVO.getDeliverer2Name()); // 	单位负责人签名
 | 
				
			||||
        jsonObject.set("sjr1", entrustVO.getDeliverer1Name()); // 送检人
 | 
				
			||||
        jsonObject.set("sjr2", entrustVO.getDeliverer2Name()); | 
				
			||||
        jsonObject.set("sjr1dh", entrustVO.getDeliverer1Phone()); | 
				
			||||
        jsonObject.set("sjr2dh", entrustVO.getDeliverer2Phone()); | 
				
			||||
        jsonObject.set("slrq", entrustVO.getAcceptTime().format(formatter)); | 
				
			||||
        jsonObject.set("wtdw", entrustVO.getClientOrgName()); | 
				
			||||
        jsonObject.set("wtsj", entrustVO.getEntrustmentTime().format(formatter)); | 
				
			||||
        jsonObject.set("yjdqk", entrustVO.getOldIdentificationResult()); | 
				
			||||
 | 
				
			||||
        // 组装材料信息
 | 
				
			||||
        List<EntrustmentIdentificationMaterial> materialList = (List<EntrustmentIdentificationMaterial>) dataMap.get("materialList"); | 
				
			||||
        AtomicInteger index = new AtomicInteger(1); | 
				
			||||
        List<JSONObject> table = materialList.stream().map(material -> { | 
				
			||||
            JSONObject materialJson = new JSONObject(); | 
				
			||||
            materialJson.set("bzsfwz", material.getPackComplete() ? "是" : "否"); | 
				
			||||
            materialJson.set("jyjdyq", material.getDrugsValue() + material.getAnalysisOptionValue()); | 
				
			||||
            materialJson.set("lcygs", material.getRtSampleQuantity()); | 
				
			||||
            materialJson.set("projectName", index.getAndIncrement()); | 
				
			||||
            materialJson.set("tqdd", material.getDrawPlace()); | 
				
			||||
            materialJson.set("tqsj", material.getDrawTime().format(formatter)); | 
				
			||||
            materialJson.set("xzms", material.getFormName()); | 
				
			||||
            materialJson.set("yswzl", material.getName()); | 
				
			||||
            materialJson.set("zltj", material.getQuantity() + material.getUnit()); | 
				
			||||
            return materialJson; | 
				
			||||
        }).collect(Collectors.toList()); | 
				
			||||
 | 
				
			||||
        jsonObject.set("table", table); | 
				
			||||
        return jsonObject; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 构建鉴定事项确认书的JSON负载 | 
				
			||||
     * | 
				
			||||
     * @param entrustVO 委托单VO对象,包含构建JSON负载所需的数据 | 
				
			||||
     * @return 包含鉴定事项确认书数据的JSONObject对象 | 
				
			||||
     */ | 
				
			||||
    private JSONObject buildItemConfirmLetterJsonPayload(EntrustmentVO entrustVO) { | 
				
			||||
        JSONObject jsonObject = new JSONObject(); | 
				
			||||
        SysUser sysUser = commonFeignService.remoteGetUserById(entrustVO.getAcceptUser()); | 
				
			||||
        jsonObject.set("ajmc", entrustVO.getCaseName()); //  案件名称
 | 
				
			||||
        jsonObject.set("dwfzr", StrUtil.join("、", entrustVO.getDeliverer1Name(), entrustVO.getDeliverer2Name())); // 送检人签名
 | 
				
			||||
        // 检材处理要求,这里的值是直接复制了确认书里的值
 | 
				
			||||
        jsonObject.set("jcclyq", "以上检材均按照《办理毒品犯罪案件毒品提取、扣押、称量、取样和送检程序若干问题的规定》、《贵阳市公安局关于进一步规范毒品取样、保管及送检程序的通知》要求的提取部位和提取方法进行取样。"); | 
				
			||||
        jsonObject.set("jdjbrqm", sysUser.getName()); /// 鉴定机构经办人签字 ,我们系统是单位自己打印出来,线下自己手签
 | 
				
			||||
        jsonObject.set("jdyq", entrustVO.getEntrustRequirement()); // 鉴定要求
 | 
				
			||||
        jsonObject.set("jyaq", entrustVO.getCaseBrief()); // 简要案情
 | 
				
			||||
        jsonObject.set("lqrqm", StrUtil.join("、", entrustVO.getDeliverer1Name(), entrustVO.getDeliverer2Name())); // 领取人签名
 | 
				
			||||
        jsonObject.set("sjr1", entrustVO.getDeliverer1Name()); // 送检人1姓名
 | 
				
			||||
        jsonObject.set("sjr2", entrustVO.getDeliverer2Name()); // 送检人2姓名
 | 
				
			||||
        jsonObject.set("sjr1dh", entrustVO.getDeliverer1Phone()); // 送检人电话
 | 
				
			||||
        jsonObject.set("sjr2dh", entrustVO.getDeliverer2Phone()); | 
				
			||||
        jsonObject.set("sjr1zjh", StrUtil.join(":", entrustVO.getDeliverer1Cert(), entrustVO.getDeliverer1Id())); // 送检人证件和号码
 | 
				
			||||
        jsonObject.set("sjr2zjh", StrUtil.join(":", entrustVO.getDeliverer2Cert(), entrustVO.getDeliverer2Id())); | 
				
			||||
        jsonObject.set("sjr1zw", entrustVO.getDeliverer1Position()); // 送检人职务
 | 
				
			||||
        jsonObject.set("sjr2zw", entrustVO.getDeliverer2Position()); | 
				
			||||
        jsonObject.set("slbh", entrustVO.getAcceptNo()); | 
				
			||||
        jsonObject.set("slrq", entrustVO.getAcceptTime().format(formatter)); | 
				
			||||
        jsonObject.set("slr", sysUser.getName()); | 
				
			||||
        jsonObject.set("slrqm", sysUser.getName()); // 鉴定机构受理人签字
 | 
				
			||||
        jsonObject.set("wtbh", entrustVO.getAcceptNo()); // 委托书编号
 | 
				
			||||
        jsonObject.set("wtdw", entrustVO.getClientOrgName()); | 
				
			||||
        jsonObject.set("wtsj", entrustVO.getEntrustmentTime().format(formatter)); | 
				
			||||
        List<EntrustmentIdentificationMaterial> materialList = entrustmentIdentificationMaterialService.list(Wrappers.<EntrustmentIdentificationMaterial>lambdaQuery() | 
				
			||||
                .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustVO.getId())); | 
				
			||||
        List<MaterialListForBookVo> materialBookVoList = entrustmentService.getMaterialBookVoList(materialList); | 
				
			||||
        List<JSONObject> table = materialBookVoList.stream().map(materialBookVo -> { | 
				
			||||
            JSONObject materialBookVoJson = new JSONObject(); | 
				
			||||
            materialBookVoJson.set("baozhuang", materialBookVo.isPackComplete() ? "是" : "否"); | 
				
			||||
            materialBookVoJson.set("bh", materialBookVo.getOrderNo()); | 
				
			||||
            materialBookVoJson.set("yswzl", materialBookVo.getMaterialName()); | 
				
			||||
            materialBookVoJson.set("bz", StrUtil.isBlank(materialBookVo.getRemark()) ? NULL_PLACEHOLDER : materialBookVo.getRemark()); | 
				
			||||
            materialBookVoJson.set("lcygs", materialBookVo.getRtSampleQuantity()); | 
				
			||||
            materialBookVoJson.set("sl", materialBookVo.getTotalSampleDes()); | 
				
			||||
            materialBookVoJson.set("xzms", materialBookVo.getFormName()); | 
				
			||||
            return materialBookVoJson; | 
				
			||||
        }).collect(Collectors.toList()); | 
				
			||||
        jsonObject.put("table", table); | 
				
			||||
        return jsonObject; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 通过POST请求与远程API进行交互 | 
				
			||||
     * | 
				
			||||
     * @param jsonObject 包含请求数据的JSONObject对象 | 
				
			||||
     * @param url        远程API的URL | 
				
			||||
     * @return ResponseEntity<String> 包含远程API响应数据的ResponseEntity对象 | 
				
			||||
     */ | 
				
			||||
    private ResponseEntity<String> exchangeRemoteApi(JSONObject jsonObject, String url) { | 
				
			||||
        HttpHeaders headers = new HttpHeaders(); | 
				
			||||
        headers.setContentType(MediaType.APPLICATION_JSON);  // 设置为 application/json
 | 
				
			||||
        HttpEntity<JSONObject> requestEntity = new HttpEntity<>(jsonObject, headers); | 
				
			||||
        ResponseEntity<String> response = HttpsUtils | 
				
			||||
                .genRestTemplate() | 
				
			||||
                .exchange( | 
				
			||||
                        url, | 
				
			||||
                        HttpMethod.POST, | 
				
			||||
                        requestEntity, | 
				
			||||
                        String.class | 
				
			||||
                ); | 
				
			||||
        return response; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 更新推送标志 | 
				
			||||
     * | 
				
			||||
     * @param entrustVO   委托VO对象 | 
				
			||||
     * @param pushType    推送类型 EntrustLetter 委托书 | ItemConfirmLetter 事项确认书 | 
				
			||||
     * @param newFlag     新的推送标志 | 
				
			||||
     */ | 
				
			||||
    private void updatePushFlag(EntrustmentVO entrustVO, String pushType, String newFlag) { | 
				
			||||
        List<String> flagList = Optional.ofNullable(StrUtil.split(entrustVO.getPushFlag(), StrUtil.COMMA)) | 
				
			||||
                .orElse(new ArrayList<>()); | 
				
			||||
 | 
				
			||||
        // 判断是否已有 指定的推送类型,如果有就替换,否则添加
 | 
				
			||||
        boolean exists = flagList.stream().anyMatch(flag -> flag.contains(pushType)); | 
				
			||||
        if (exists) { | 
				
			||||
            flagList.replaceAll(flag -> flag.contains(pushType) ? newFlag : flag); | 
				
			||||
        } else { | 
				
			||||
            flagList.add(newFlag); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        // 更新数据库
 | 
				
			||||
        entrustmentService.update(Wrappers.<Entrustment>lambdaUpdate() | 
				
			||||
                .eq(Entrustment::getId, entrustVO.getId()) | 
				
			||||
                .set(Entrustment::getPushFlag, String.join(",", flagList))); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -1,50 +1,93 @@ | 
				
			||||
package digital.laboratory.platform.entrustment.vo; | 
				
			||||
 | 
				
			||||
import digital.laboratory.platform.common.aop.annotation.DlpFeign; | 
				
			||||
import digital.laboratory.platform.entrustment.entity.Entrustment; | 
				
			||||
import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; | 
				
			||||
import io.swagger.annotations.ApiModel; | 
				
			||||
import io.swagger.annotations.ApiModelProperty; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
@ApiModel(description = "委托信息视图对象") | 
				
			||||
public class EntrustmentVO extends Entrustment { | 
				
			||||
    String caseName;            // 案件名称
 | 
				
			||||
    String caseNo;            // 案件编号
 | 
				
			||||
    String caseBrief;            // 案情简要
 | 
				
			||||
    List<String> clientOrgAncestors; // 委托单位的祖先 id,  json 字符串数组
 | 
				
			||||
 | 
				
			||||
    String submitterName;       // 委托提交人姓名
 | 
				
			||||
    String checkClaimUserName;       // 审核任务认领人姓名
 | 
				
			||||
    String checkUserName;       // 审核人姓名
 | 
				
			||||
    String approveClaimUserName;         // 审批任务认领人姓名
 | 
				
			||||
    String approveUserName;         // 审批人姓名
 | 
				
			||||
    String deliverConfirmUserName;  // 送检确认人姓名
 | 
				
			||||
    String deliverSubmitterName;    // 送检操作提交人姓名
 | 
				
			||||
    String acceptClaimUserName;         // 受理任务认领人姓名
 | 
				
			||||
    String acceptUserName;          // 受理人姓名
 | 
				
			||||
    String reportSenderUserName;      // 报告发放人姓名
 | 
				
			||||
    String sampleSenderUserName;      // 检材发放人姓名
 | 
				
			||||
    @ApiModelProperty("案件名称") | 
				
			||||
    private String caseName; | 
				
			||||
 | 
				
			||||
    String createUserName;          // 创建人姓名
 | 
				
			||||
    String updateUserName;          // 更新人姓名
 | 
				
			||||
    @ApiModelProperty("案件编号") | 
				
			||||
    private String caseNo; | 
				
			||||
 | 
				
			||||
    String statusDescription;          // 状态描述
 | 
				
			||||
    String previousStatusDescription;          // 上一个状态的描述
 | 
				
			||||
    @ApiModelProperty("案情简要") | 
				
			||||
    private String caseBrief; | 
				
			||||
 | 
				
			||||
    int identificationMaterialCount;    // 检材数量
 | 
				
			||||
    @ApiModelProperty("委托单位的祖先 ID(JSON 数组)") | 
				
			||||
    private List<String> clientOrgAncestors; | 
				
			||||
 | 
				
			||||
    String oldIdentificationBrief;      // 原鉴定情况(组合5个字段形成综述)
 | 
				
			||||
    @ApiModelProperty("委托提交人姓名") | 
				
			||||
    private String submitterName; | 
				
			||||
 | 
				
			||||
    String identificationNo; | 
				
			||||
    @ApiModelProperty("审核任务认领人姓名") | 
				
			||||
    private String checkClaimUserName; | 
				
			||||
 | 
				
			||||
    String happenTime;//案发时间
 | 
				
			||||
    @ApiModelProperty("审核人姓名") | 
				
			||||
    private String checkUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("审批任务认领人姓名") | 
				
			||||
    private String approveClaimUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("审批人姓名") | 
				
			||||
    private String approveUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("送检确认人姓名") | 
				
			||||
    private String deliverConfirmUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("送检操作提交人姓名") | 
				
			||||
    private String deliverSubmitterName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("受理任务认领人姓名") | 
				
			||||
    private String acceptClaimUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("受理人姓名") | 
				
			||||
    private String acceptUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("报告发放人姓名") | 
				
			||||
    private String reportSenderUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("检材发放人姓名") | 
				
			||||
    private String sampleSenderUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("创建人姓名") | 
				
			||||
    private String createUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("更新人姓名") | 
				
			||||
    private String updateUserName; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("状态描述") | 
				
			||||
    private String statusDescription; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("上一个状态的描述") | 
				
			||||
    private String previousStatusDescription; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("检材数量") | 
				
			||||
    private int identificationMaterialCount; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("原鉴定情况(组合 5 个字段形成综述)") | 
				
			||||
    private String oldIdentificationBrief; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("鉴定编号") | 
				
			||||
    private String identificationNo; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("案发时间") | 
				
			||||
    private String happenTime; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("委托关联的检出有多少检出的数量") | 
				
			||||
    private Integer checkoutResultCount; | 
				
			||||
 | 
				
			||||
    @ApiModelProperty("委托关联的检出有多少检出信息字符串") | 
				
			||||
    @ApiModelProperty("委托关联的检出信息字符串") | 
				
			||||
    private String checkoutResultStr; | 
				
			||||
 | 
				
			||||
    private List<EntrustmentIdentificationMaterial> materialList;//检材列表
 | 
				
			||||
    @ApiModelProperty("检材列表") | 
				
			||||
    private List<EntrustmentIdentificationMaterial> materialList; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue