Commit e1ae4e44 authored by suhuiguang's avatar suhuiguang

reafact(jyjc): 报检规则4.0开发

1.报检申请表,代码集成到项目中,在审批完成后生成
parent b19eeb71
......@@ -178,7 +178,7 @@ public class JyjcInspectionApplicationController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "接收", notes = "接收")
@PostMapping(value = "/flow/{type}/receive")
public ResponseModel executeFlow(@PathVariable(value = "type") String type, @RequestBody Map<String, Object> params) {
public ResponseModel<?> executeFlow(@PathVariable(value = "type") String type, @RequestBody Map<String, Object> params) {
params.put("type", type);
jyjcInspectionApplicationServiceImpl.doReceive(params);
HashMap<String, String> result = new HashMap<>();
......@@ -361,6 +361,6 @@ public class JyjcInspectionApplicationController extends BaseController {
@PutMapping(value = "/file/test")
@ApiOperation(httpMethod = "PUT", value = "报检申请表测试", notes = "报检申请表测试")
public ResponseModel<Object> fileTest(String appSeq) {
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.fileTest(appSeq));
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.genDocPath(appSeq));
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.adapter;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplication;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationMapper;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.dto.DocGenerationRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class DefaultDocGenerateAdapter implements DocGenerateAdapter {
private final JyjcInspectionApplicationMapper repository;
/**
* 将DB实体转换为DTO
*/
@Override
public DocGenerationRequest prepareRequest(String appSeq) {
JyjcInspectionApplication entity = repository.selectById(appSeq);
return DocGenerationRequest.builder()
.equipList(entity.getEquipClassify())
.equCategory(entity.getEquCategory())
.equDefine(entity.getEquDefine())
.appSeq(appSeq)
.build();
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.adapter;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.dto.DocGenerationRequest;
public interface DocGenerateAdapter {
DocGenerationRequest prepareRequest(String appSeq);
}
package com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.dto.DocGenerationRequest;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.support.DocGenerator;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.support.SupportableDocGenerator;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.wrapper.DocGeneratorWrapper;
......@@ -18,14 +19,18 @@ public class DocGeneratorFactory {
private final List<SupportableDocGenerator> factories;
public DocGenerator getGenerator(String equList, String equCategory, String equDefine) {
return docGenerators.computeIfAbsent(equList, k ->
public DocGenerator getGenerator(DocGenerationRequest request) {
return docGenerators.computeIfAbsent(this.buildCacheKey(request), k ->
new DocGeneratorWrapper(
factories.stream()
.filter(s -> s.support(equList, equCategory, equDefine))
.filter(s -> s.support(request.getEquipList(), request.getEquCategory(), request.getEquDefine()))
.findFirst()
.orElseThrow(() -> new UnsupportedOperationException(String.format("No generator found for type: %s (list=%s, define=%s)",
equCategory, equList, equDefine))))
request.getEquipList(), request.getEquCategory(), request.getEquDefine()))))
);
}
private String buildCacheKey(DocGenerationRequest request) {
return String.join("|", request.getEquipList(), String.valueOf(request.getEquCategory()), String.valueOf(request.getEquDefine()));
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.dto;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class DocGenerationRequest {
/**
* 设备种类编码
*/
private String equipList;
/**
* 设备类别编码
*/
private String equCategory;
/**
* 设备品种编码
*/
private String equDefine;
/**
* 申请单号(主键)
*/
private String appSeq;
}
package com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.service;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.adapter.DocGenerateAdapter;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.DocGeneratorFactory;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.dto.DocGenerationRequest;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.support.DocGenerator;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StopWatch;
@Service
@RequiredArgsConstructor
@Slf4j
public class DocGenerateService {
private final DocGeneratorFactory docGeneratorFactory;
private final DocGenerateAdapter defaultDocGenerateAdapter;
public String generateDoc(String appSeq) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
DocGenerationRequest docGenerationRequest = defaultDocGenerateAdapter.prepareRequest(appSeq);
DocGenerator docGenerator = docGeneratorFactory.getGenerator(docGenerationRequest);
String path = docGenerator.generate(appSeq);
stopWatch.stop();
log.info("生成报检申请表耗时:{}秒", stopWatch.getTotalTimeMillis());
return path;
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.service;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplication;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
@Service
@RequiredArgsConstructor
public class DocUpdateService {
private final DocGenerateService docGenerateService;
private final JyjcInspectionApplicationMapper repository;
@Async
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void genDocAndUpdate(String appSeq) {
String filePath = docGenerateService.generateDoc(appSeq);
LambdaUpdateWrapper<JyjcInspectionApplication> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(JyjcInspectionApplication::getInspectAppUrl, filePath);
updateWrapper.eq(BaseEntity::getSequenceNbr, appSeq);
repository.update(null, updateWrapper);
}
}
......@@ -10,9 +10,11 @@ import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicat
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicationServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.util.WordTemplateUtils;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgUseInfoMapper;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import java.io.File;
......@@ -34,6 +36,8 @@ public class GenericDocGeneratorStrategy implements SupportableDocGenerator {
private final IdxBizJgUseInfoMapper idxBizJgUseInfoMapper;
private final AmosRequestContext amosRequestContext;
@Override
public boolean support(String equList, String equCategory, String equDefine) {
return !EquipmentClassifityEnum.YLGD.getCode().equals(equList);
......@@ -45,9 +49,16 @@ public class GenericDocGeneratorStrategy implements SupportableDocGenerator {
JyjcInspectionApplication inspectionApplication = jyjcInspectionApplicationService.getBaseMapper().selectById(appId);
params.put("numberOfEquip", inspectionApplication.getNumberOfEquip());
setEquipExcelData(inspectionApplication, params);
this.setRequestContext();
return this.generatePdfAndUpload(params);
}
private void setRequestContext() {
RequestContext.setProduct(amosRequestContext.getProduct());
RequestContext.setAppKey(amosRequestContext.getAppKey());
RequestContext.setToken(amosRequestContext.getToken());
}
private void setEquipExcelData(JyjcInspectionApplication inspectionApplication, Map<String, Object> params) {
List<Map<String, Object>> equips = this.buildEquipsBatch(inspectionApplication.getSequenceNbr());
params.put("equips", equips);
......
......@@ -9,9 +9,11 @@ import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicat
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionHistoryServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.util.WordTemplateUtils;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import java.io.File;
import java.nio.file.Files;
......@@ -29,6 +31,8 @@ public class PipelineDocGeneratorStrategy implements SupportableDocGenerator {
private final JyjcInspectionHistoryServiceImpl inspectionHistoryService;
private final AmosRequestContext amosRequestContext;
@Override
public boolean support(String equList, String equCategory, String equDefine) {
return EquipmentClassifityEnum.YLGD.getCode().equals(equList);
......@@ -39,9 +43,17 @@ public class PipelineDocGeneratorStrategy implements SupportableDocGenerator {
Map<String, Object> params = appDocCmService.getBaseInFo(appId);
JyjcInspectionApplication inspectionApplication = jyjcInspectionApplicationService.getBaseMapper().selectById(appId);
this.setPipelineInfo(params, inspectionApplication);
this.setRequestContext();
return this.generatePdfAndUpload(params);
}
private void setRequestContext() {
RequestContext.setProduct(amosRequestContext.getProduct());
RequestContext.setAppKey(amosRequestContext.getAppKey());
RequestContext.setToken(amosRequestContext.getToken());
}
private void setPipelineInfo(Map<String, Object> params, JyjcInspectionApplication inspectionApplication) {
if (inspectionApplication.getStatus().equals(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()))) {
JyjcInspectionHistory inspectionHistory = inspectionHistoryService.getBySSeq(inspectionApplication.getSequenceNbr());
......
......@@ -37,8 +37,11 @@ import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionApplicationPushEven
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.feign.JgFeignClient;
import com.yeejoin.amos.boot.module.jyjc.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.adapter.DocGenerateAdapter;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.DocGeneratorFactory;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.dto.DocGenerationRequest;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.factory.support.DocGenerator;
import com.yeejoin.amos.boot.module.jyjc.biz.file.inspectapp.service.DocUpdateService;
import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.typeHandler.EquipCategoryTypeHandler;
import com.yeejoin.amos.boot.module.jyjc.biz.util.CompareUtils;
......@@ -83,6 +86,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.web.bind.annotation.RequestBody;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
......@@ -199,6 +204,12 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Resource
private DocGeneratorFactory docGeneratorFactory;
@Autowired
private DocGenerateAdapter defaultDocGenerateAdapter;
@Autowired
private DocUpdateService docUpdateService;
@NotNull
public static List<DictionarieModel> getDictionarieModels(String bizTypes) {
......@@ -631,6 +642,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
map.put("equip", arrayList);
}
}
map.put("inspectAppUrl", model.getInspectAppUrl());
map.put("status", model.getStatus());
map.put("acceptDate", model.getAcceptDate());
map.put("applicationDate", model.getApplicationDate());
......@@ -643,8 +655,8 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
// 其他设备
List<Map<String, Object>> arrayList = getEquipInfoList(sequenceNbr, model);
map.put("equip", arrayList);
map.put(BizCommonConstant.TECH_PARAM1, Optional.ofNullable(inspectionHistory).map(JyjcInspectionHistory::getHistoryData).map(s->s.get(BizCommonConstant.TECH_PARAM1)).orElse(0));
map.put(BizCommonConstant.TECH_PARAM2, Optional.ofNullable(inspectionHistory).map(JyjcInspectionHistory::getHistoryData).map(s->s.get(BizCommonConstant.TECH_PARAM2)).orElse(0));
map.put(BizCommonConstant.TECH_PARAM1, Optional.ofNullable(inspectionHistory).map(JyjcInspectionHistory::getHistoryData).map(s -> s.get(BizCommonConstant.TECH_PARAM1)).orElse(0));
map.put(BizCommonConstant.TECH_PARAM2, Optional.ofNullable(inspectionHistory).map(JyjcInspectionHistory::getHistoryData).map(s -> s.get(BizCommonConstant.TECH_PARAM2)).orElse(0));
}
}
map.putAll(attMap);
......@@ -861,6 +873,13 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
this.saveBatchResume(jgResumeInfoDtoList);
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(model.getProcessInstanceId(), this.buildInstanceRuntimeData(jyjcInspectionApplication));
// 事务提交后,生成报检申请表
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
docUpdateService.genDocAndUpdate(model.getSequenceNbr() + "");
}
});
} catch (InterruptedException e) {
log.error(e.getMessage(), e);
} finally {
......@@ -1531,7 +1550,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
}
String inspectionType = map.getString("inspectionType");
// 非首次检验时,需要按照选择的地市区县过滤;首检的地市只作为报检规则的匹配条件
if(!JYJCBusinessTypeEnum.SCJY.getCode().equals(inspectionType)){
if (!JYJCBusinessTypeEnum.SCJY.getCode().equals(inspectionType)) {
// 地市
if (!ObjectUtils.isEmpty(map.getString("CITY"))) {
boolMust.must(QueryBuilders.wildcardQuery("USE_PLACE_CODE", "*" + map.getString("CITY") + "*"));
......@@ -1613,7 +1632,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
// 设备种类
String equListCode = map.getString("EQU_LIST_CODE");
// 机电类才按照属地+区县过滤,其他还是按照属地过滤(区县里没特殊的高新、经开、西咸)
if(JD_EQU_LIST_CODES.contains(equListCode)) {
if (JD_EQU_LIST_CODES.contains(equListCode)) {
// 雁塔时去掉高新数据
if (String.valueOf(BizCommonConstant.REGION_CODE_YT).equals(map.getString("COUNTY"))) {
// 区县筛选
......@@ -1904,7 +1923,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
regionModel.setRegionName("雁塔区(除高新)");
}
});
} else if(BizCommonConstant.REGION_CODE_XY.equals(parentId)){
} else if (BizCommonConstant.REGION_CODE_XY.equals(parentId)) {
// 咸阳时增加西咸新区下拉
RegionModel regionModel = new RegionModel();
regionModel.setRegionCode(SpeRegionInfoEnum.XX.getCode());
......@@ -1914,9 +1933,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
return regionModels;
}
public String fileTest(String appSeq) {
JyjcInspectionApplication application = this.getBaseMapper().selectById(appSeq);
DocGenerator docGenerator = docGeneratorFactory.getGenerator(application.getEquipClassify(), application.getEquCategory(), application.getEquDefine());
public String genDocPath(String appSeq) {
DocGenerationRequest docGenerationRequest = defaultDocGenerateAdapter.prepareRequest(appSeq);
DocGenerator docGenerator = docGeneratorFactory.getGenerator(docGenerationRequest);
return docGenerator.generate(appSeq);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment