Compare commits

...

43 Commits

Author SHA1 Message Date
yd
33543e5330 fix:物料管理业务逻辑修改。新增库存数据统计查询 2025-12-11 16:32:57 +08:00
yd
6a3d585802 feat:新增盘点表数据 2025-12-10 14:47:46 +08:00
禁止呵呵
9eec0bb05e feat:领用出库、同意出库 2025-12-09 21:19:31 +08:00
禁止呵呵
8fd750a82f Merge remote-tracking branch 'origin/test' into test 2025-12-09 16:10:46 +08:00
禁止呵呵
2790ed7ea1 feat:库存查询,库存记录查询、入库记录查询 2025-12-09 16:10:37 +08:00
FCL
9f4369bcb2 fix:报告纵表细节调整 2025-12-09 15:46:00 +08:00
FCL
920292cfac feat:报告数据算法逻辑调整;增加分页逻辑 2025-12-09 14:39:13 +08:00
禁止呵呵
1187038ba8 feat:库存管理 2025-12-09 09:39:07 +08:00
禁止呵呵
e2678fe7b4 Merge remote-tracking branch 'origin/test' into test 2025-12-09 09:29:22 +08:00
禁止呵呵
c1b975cca0 feat:入库、批量入库 2025-12-09 09:29:14 +08:00
FCL
b7f30012c8 feat:报告数据算法逻辑调整 2025-12-08 17:50:15 +08:00
FCL
000cfca842 feat:报告数据算法逻辑调整 2025-12-08 10:27:36 +08:00
wxr
6b006513af 分析班组添加是否送样标识 2025-12-05 18:32:54 +08:00
禁止呵呵
f2571944c1 fix:版本管理模块字段修改 2025-12-05 17:32:14 +08:00
禁止呵呵
8e3994b6a8 Merge remote-tracking branch 'origin/test' into test 2025-12-05 17:23:52 +08:00
禁止呵呵
c7f3bc0a46 fix:版本管理模块文件名修改,字段修改,版本查询条件修改 2025-12-05 17:23:41 +08:00
wxr
54bc4b8b37 检测方法及委检登记-已提交列表,数据状态问题修复 2025-12-05 17:13:59 +08:00
FCL
d0ee704939 doc:iWork集成说明 2025-12-05 14:50:57 +08:00
yd
9cf4af15c2 feat:物料管理出库相关 2025-12-05 13:47:41 +08:00
yd
ac308f30a2 feat:物料管理盘点相关 2025-12-05 11:48:40 +08:00
yd
60b2761b2c Merge remote-tracking branch 'origin/test' into test 2025-12-04 20:14:33 +08:00
yd
a17621b0dd feat:客户端版本管理 2025-12-04 20:14:24 +08:00
wxr
9ec70c1721 结果判定等处理 2025-12-04 18:17:57 +08:00
FCL
3a5f6994a7 Merge remote-tracking branch 'origin/test' into test 2025-12-04 15:11:27 +08:00
FCL
b355668284 fix:报告编制,增加委托过滤,按报表类型过滤可选委托 2025-12-04 15:11:12 +08:00
wxr
8d75bc0765 任务流程状态及委托登记统计 2025-12-04 14:29:32 +08:00
wxr
0b44562b58 交叉审核退回,分析查询不到数据 2025-12-04 11:39:16 +08:00
wxr
90a1dfbd37 Merge branch 'test' of https://git.will-way.cn/zgty/zt-qms into test 2025-12-04 11:02:56 +08:00
wxr
61d91d29b0 结果报送条件查询等 2025-12-04 11:02:50 +08:00
FCL
d84f1adf65 Merge remote-tracking branch 'origin/test' into test 2025-12-04 10:38:02 +08:00
FCL
4b9d27e8fc feat:更新tio,支持redis指定用户名 2025-12-04 10:37:59 +08:00
wxr
d41f69cc51 Merge branch 'test' of https://git.will-way.cn/zgty/zt-qms into test 2025-12-04 10:03:43 +08:00
wxr
15621a9a56 中心交接-扫码收样添加 收样并送样 2025-12-04 10:03:32 +08:00
FCL
06be110e5d Merge remote-tracking branch 'origin/test' into test 2025-12-04 08:58:25 +08:00
FCL
ae0f0d79c5 feat:供应商管理代码生成 2025-12-04 08:58:02 +08:00
wxr
93cf620376 简码编密跳过等 2025-12-03 20:39:40 +08:00
wxr
be89a965d8 排序等bug修复 2025-12-03 16:17:50 +08:00
yd
8fa69a0906 Merge remote-tracking branch 'origin/test' into test 2025-12-03 14:24:57 +08:00
yd
3bb70a94f2 feat:物料管理部分菜单 2025-12-03 14:24:40 +08:00
wxr
433ac9124b Merge branch 'test' of https://git.will-way.cn/zgty/zt-qms into test 2025-12-03 11:02:42 +08:00
wxr
3285e6050a 检验委托任务添加修改 2025-12-03 11:02:20 +08:00
yd
c68c7cfbf2 Merge branch 'lims_dev' of https://git.will-way.cn/zgty/zt-qms into test 2025-12-03 08:58:06 +08:00
wxr
04596350b6 添加委托来源与类型关系表 2025-12-03 08:41:01 +08:00
257 changed files with 13775 additions and 1498 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -119,5 +119,9 @@ zt:
version: ${zt.info.version}
tenant: # 多租户相关配置项
enable: true
ignore-urls:
- /admin-api/qms/system-version-management/get-by-platform/**
security:
permit-all-urls:
- /admin-api/qms/system-version-management/get-by-platform/**
debug: false

View File

@@ -54,6 +54,7 @@ public interface ErrorCodeConstants {
ErrorCode CONFIG_REPORT_TYPE_NOT_EXISTS = new ErrorCode(1_032_050_000, "报表类型配置不存在");
ErrorCode CONFIG_PROJECT_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测项目配置不存在");
ErrorCode CONFIG_ENTRUST_SOURCE_NOT_EXISTS = new ErrorCode(1_032_050_000, "检验委托来源配置不存在");
ErrorCode CONFIG_ENTRUST_SOURCE_SAMPLE_TYPE_NOT_EXISTS = new ErrorCode(1_032_050_000, "检验委托来源与样品类型配置不存在");
ErrorCode CONFIG_BASE_SAMPLE_NOT_EXISTS = new ErrorCode(1_032_050_000, "主样配置不存在");
ErrorCode CONFIG_ASSAY_METHOD_PROJECT_PARAMETER_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法分析项目参数配置不存在");
@@ -149,9 +150,27 @@ public interface ErrorCodeConstants {
ErrorCode MATERIAL_INFOMATION_NOT_EXISTS = new ErrorCode(1_032_150_000, "试剂耗材不存在");
ErrorCode MATERIAL_PRODUCT_NOT_EXISTS = new ErrorCode(1_032_150_000, "试剂耗材大类不存在");
ErrorCode MATERIAL_LIFECYCLE_DETAIL_NOT_EXISTS = new ErrorCode(1_032_150_000, "物料通用流程明细不存在");
ErrorCode MATERIAL_LIFECYCLE_NOT_EXISTS = new ErrorCode(1_032_150_000, "物料通用流程不存在");
ErrorCode MATERIAL_BATCH_NOT_EXISTS = new ErrorCode(1_032_150_000, "物料批次不存在");
ErrorCode MATERIAL_BATCH_ASSIGN_NOT_EXISTS = new ErrorCode(1_032_150_000, "物料批次分发不存在");
ErrorCode MATERIAL_INVENTORY_INBOUND_NOT_EXISTS = new ErrorCode(1_032_150_000, "入库,出库不存在");
ErrorCode MATERIAL_INVENTORY_INBOUND_DETAIL_NOT_EXISTS = new ErrorCode(1_032_150_000, "入库明细,出库明细等不存在");
ErrorCode SYSTEM_VERSION_MANAGEMENT_NOT_EXISTS = new ErrorCode(1_032_150_000, "客户端版本管理不存在");
ErrorCode MATERIAL_LOCATION_NOT_EXISTS = new ErrorCode(1_032_150_000, "存放位置不存在");
ErrorCode MATERIAL_INVENTORY_CHECK_NOT_EXISTS = new ErrorCode(1_032_150_000, "库存盘点不存在");
ErrorCode MATERIAL_INVENTORY_CHECK_BATCH_NOT_EXISTS = new ErrorCode(1_032_150_000, "库存盘点项不存在");
ErrorCode MATERIAL_INVENTORY_CHECK_DETAIL_NOT_EXISTS = new ErrorCode(1_032_150_000, "库存盘点明细不存在");
ErrorCode MATERIAL_INVENTORY_OUTBOUND_NOT_EXISTS = new ErrorCode(1_032_150_000, "出库不存在");
ErrorCode MATERIAL_INVENTORY_OUTBOUND_DETAIL_NOT_EXISTS = new ErrorCode(1_032_150_000, "出库明细,出库明细,含领用出库、退货出库、盘亏出库、销毁出库等不存在");
/*================================= tx 1_032_200_000 ~ 1_032_249_999 ==================================*/
@@ -159,6 +178,11 @@ public interface ErrorCodeConstants {
/*================================= office 办公 1_032_250_000 ~ 1_032_299_999 ==================================*/
ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1_032_250_000, "供应商不存在");
ErrorCode SUPPLIER_PROPERTIES_NOT_EXISTS = new ErrorCode(1_032_250_000, "供应商属性不存在");
ErrorCode SUPPLIER_EVALUATION_NOT_EXISTS = new ErrorCode(1_032_250_000, "供应商评价不存在");
ErrorCode SUPPLIER_EVALUATION_AT_NOT_EXISTS = new ErrorCode(1_032_250_000, "供应商评价关系不存在");
/*================================= dzj 大质检 1_032_300_000 ~ 1_032_349_999 ==================================*/

View File

@@ -107,6 +107,15 @@ public interface QmsCommonConstant {
/** 检验委托 **/
String ENTRUST_INSPECTION = "entrust_inspection";
/** 委托样品类型: 委检样 **/
String ENTRUST_COMMISSION_INSPECTION_SAMPLE = "commissionInspectionSample";
/** 委托样品类型: 商检分析样 **/
String ENTRUST_INSPECTION_ANALYSIS_SAMPLE = "inspectionAnalysisSample";
/** 委托样品类型: 商检综合 **/
String ENTRUST_COMPREHENSIVE_INSPECTION_SAMPLE = "comprehensiveInspectionSample";
/** 中心收样 **/
String FLOW_NODE_CENTER_RECEIVE = "flw_center_receive";
@@ -179,6 +188,10 @@ public interface QmsCommonConstant {
/** 检验完成状态-未完成 **/
String UNCHECKED = "unchecked";
/** 数据回报状态 未回报 **/
String UNRETURNED = "unreturned";
/** 自动 **/
String AUTOMATIC = "automatic";
@@ -194,4 +207,7 @@ public interface QmsCommonConstant {
/** 允许提交 **/
String ALLOW_SUBMIT = "allow_submit";
}

View File

@@ -17,7 +17,7 @@
QMS模块。
</description>
<properties>
<zzjc.tio.version>3.9.1.v20251013-RELEASE</zzjc.tio.version>
<zzjc.tio.version>3.9.1.v20251204-RELEASE</zzjc.tio.version>
</properties>
<dependencies>
<!-- Spring Cloud 基础 -->

View File

@@ -110,6 +110,9 @@ public class BusinessSampleEntrustRegistrationController implements BusinessCont
@GetMapping("/queryWaitingDataForReport")
@Operation(summary = "查询待编制数据")
public CommonResult<PageResult<BusinessSampleEntrustRegistrationExtendRespVO>> queryWaitingDataForReport(@Valid BusinessSampleEntrustRegistrationPageReqVO pageReqVO) {
Long configReportTypeId = pageReqVO.getConfigReportTypeId();
if(configReportTypeId == null)
return CommonResult.error(0, "缺少configReportTypeId参数请刷新后重试");
PageResult<BusinessSampleEntrustRegistrationExtendRespVO> result = businessSampleEntrustRegistrationService.queryWaitingDataForReport(pageReqVO);
return success(result);
}

View File

@@ -31,12 +31,6 @@ public class SampleAnalysisAuditController implements BusinessControllerMarker {
@Resource
private SampleAnalysisAuditService sampleAnalysisAuditService;
@GetMapping("/crossAuditByTaskId")
public CommonResult<?> crossAuditByTaskId(Long businessAssayTaskId) {
JSONObject result = sampleAnalysisAuditService.crossAuditByTaskId(businessAssayTaskId);
return success(result);
}
/**
* 交叉审核
* @return
@@ -48,8 +42,8 @@ public class SampleAnalysisAuditController implements BusinessControllerMarker {
}
@GetMapping("/getSampleResultAssessmentList")
public CommonResult<JSONObject> getSampleResultAssessmentList(Long configAssayMethodId, String asmtReportedStatus) {
JSONObject result = sampleAnalysisAuditService.getSampleResultAssessmentList(configAssayMethodId, asmtReportedStatus);
public CommonResult<JSONObject> getSampleResultAssessmentList(BusinessAssayTaskDataReqVO reqVO) {
JSONObject result = sampleAnalysisAuditService.getSampleResultAssessmentList(reqVO);
return success(result);
}

View File

@@ -60,14 +60,6 @@ public class SampleEntrustController implements BusinessControllerMarker {
return success(sampleEntrustRegistration);
}
@GetMapping("/reportDetail")
@Operation(summary = "委托单详情数据")
public CommonResult<?> reportDetail(@RequestParam("id") Long id) {
JSONObject jsonObject = sampleEntrustService.reportDetail(id);
return success(jsonObject);
}
@PostMapping("/update")
@Operation(summary = "修改委托登记")
public CommonResult<?> update(@Valid @RequestBody SampleEntrustParam sampleEntrustParam) {

View File

@@ -1,33 +1,24 @@
package com.zt.plat.module.qms.business.bus.controller.admin;
import java.util.ArrayList;
import java.util.List;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson2.JSON;
import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.flow.LiteflowResponse;
import com.zt.plat.framework.business.interceptor.BusinessControllerMarker;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.tenant.core.context.TenantContextHolder;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleFlowInfo;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleFlowParam;
import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleFlowContext;
import com.zt.plat.module.qms.business.bus.service.SampleFlowService;
import com.zt.plat.module.qms.core.sampleflow.SampleFlowDefinition;
import com.zt.plat.module.qms.core.sampleflow.SampleFlowNode;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import static com.zt.plat.framework.common.pojo.CommonResult.error;
@Tag(name = "管理后台 - 样品流转")
@RestController
@@ -47,136 +38,20 @@ public class SampleFlowController implements BusinessControllerMarker {
return success(response.getContextBean(SampleFlowContext.class));
}
@GetMapping("/test")
public CommonResult<?> test() {
SampleFlowDefinition sampleFlowDefinition = new SampleFlowDefinition();
sampleFlowDefinition.setFlowKey("flw_sub_sample_process");
sampleFlowDefinition.setFlowName("子样样品流转流程");
List<SampleFlowNode> flowNodeList = new ArrayList<>();
SampleFlowNode zxr = new SampleFlowNode();
zxr.setNodeName("中心收样");
zxr.setNodeKey("flw_center_receive");
zxr.setSort(3100);
SampleFlowNode zxs = new SampleFlowNode();
zxs.setNodeName("中心送样");
zxs.setNodeKey("flw_center_send");
zxs.setSort(3200);
SampleFlowNode bzr = new SampleFlowNode();
bzr.setNodeName("班组收样");
bzr.setNodeKey("flw_team_receive");
bzr.setSort(3300);
SampleFlowNode ypbm = new SampleFlowNode();
ypbm.setNodeName("样品编密");
ypbm.setNodeKey("flw_sample_encrypt");
ypbm.setSort(3400);
// SampleFlowNode fxr = new SampleFlowNode();
// fxr.setNodeName("分析收样");
// fxr.setNodeKey("flw_analysis_receive");
// fxr.setSort(3500);
//
SampleFlowNode fx = new SampleFlowNode();
fx.setNodeName("样品分析");
fx.setNodeKey("flw_analysis");
fx.setSort(3550);
//
// SampleFlowNode fxs = new SampleFlowNode();
// fxs.setNodeName("分析送样");
// fxs.setNodeKey("flw_analysis_send");
// fxs.setSort(3600);
SampleFlowNode bzs = new SampleFlowNode();
bzs.setNodeName("班组送样");
bzs.setNodeKey("flw_team_send");
bzs.setSort(3700);
SampleFlowNode ypgk = new SampleFlowNode();
ypgk.setNodeName("样品归库");
ypgk.setNodeKey("flw_sample_storage");
ypgk.setSort(3800);
ypgk.setNextFlowNodeList(null);
flowNodeList.add(ypgk);
zxr.setNextFlowNodeList(new ArrayList<SampleFlowNode>() {
{
add(BeanUtils.toBean(zxs,SampleFlowNode.class).setIsDefault(true));
}
});
flowNodeList.add(zxr);
zxs.setNextFlowNodeList(new ArrayList<>() {{
add(BeanUtils.toBean(bzr,SampleFlowNode.class).setIsDefault(true));
}});
flowNodeList.add(zxs);
bzr.setNextFlowNodeList(new ArrayList<>() {{
add(BeanUtils.toBean(ypbm,SampleFlowNode.class).setCondition("subSampleEncrypt"));//样品需要编密并且没编密过
add(BeanUtils.toBean(fx,SampleFlowNode.class).setCondition("subSampleNotEncrypt"));//样品无需编密或样品已编密过
}});
flowNodeList.add(bzr);
ypbm.setNextFlowNodeList(new ArrayList<>() {{
add(BeanUtils.toBean(fx,SampleFlowNode.class).setIsDefault(true));
}});
flowNodeList.add(ypbm);
// fxr.setNextFlowNodeList(new ArrayList<>() {{
// add(BeanUtils.toBean(fxs,SampleFlowNode.class).setIsDefault(true));
// }});
// flowNodeList.add(fxr);
//
//
// fxs.setNextFlowNodeList(new ArrayList<>() {{
// add(BeanUtils.toBean(bzs,SampleFlowNode.class).setIsDefault(true).setCondition("当前部门任务已全部分析完"));
// }});
// flowNodeList.add(fxs);
fx.setNextFlowNodeList(new ArrayList<>() {{
add(BeanUtils.toBean(bzs,SampleFlowNode.class).setIsDefault(true).setCondition("当前部门任务已全部分析完"));
}});
flowNodeList.add(fx);
bzs.setNextFlowNodeList(new ArrayList<>() {{
// add(BeanUtils.toBean(fx,SampleFlowNode.class).setCondition("样品当前分析班组结果超差,需要发起复检"));
add(BeanUtils.toBean(bzr,SampleFlowNode.class).setCondition("subSampleSelfReportedOthersPending"));//当前部门数据已全部判断上报
add(BeanUtils.toBean(ypgk,SampleFlowNode.class).setCondition("subSampleAlldeptAnalyzed"));//当前样品所有分析任务已全部上报完
}});
flowNodeList.add(bzs);
sampleFlowDefinition.setFlowNodeList(flowNodeList);
String jsonSampleFlowDefinition = JSON.toJSONString(sampleFlowDefinition);
System.out.println(jsonSampleFlowDefinition);
Long tenantId = TenantContextHolder.getRequiredTenantId();
List<SampleFlowInfo> sampleFlowInfoList = new ArrayList<>();
sampleFlowInfoList.add(new SampleFlowInfo().setId(1967550576457330690L).setIsWeighing(0));
SampleFlowParam sampleFlowParam = new SampleFlowParam();
sampleFlowParam.setSampleSourceType(2);
sampleFlowParam.setCurrentSampleFlowKey("P3000");
sampleFlowParam.setSampleFlowInfoList(sampleFlowInfoList);
LiteflowResponse response = flowExecutor.execute2Resp("sampleFlowChain" + tenantId, sampleFlowParam, SampleFlowContext.class);
if (response.isSuccess()) {
/**
* 中心收样并送样
* @param sampleFlowParam
* @return
*/
@PostMapping("/centerReceiveAndSend")
public CommonResult<?> centerReceiveAndSend(@Validated @RequestBody SampleFlowParam sampleFlowParam) {
//中心收样
sampleFlowParam.setCurrentSampleFlowKey(QmsCommonConstant.FLOW_NODE_CENTER_RECEIVE);
LiteflowResponse response = sampleFlowService.sampleFlow(sampleFlowParam);
//中心送样
sampleFlowParam.setCurrentSampleFlowKey(QmsCommonConstant.FLOW_NODE_CENTER_SEND);
sampleFlowParam.setSendSampleOper(null);
response = sampleFlowService.sampleFlow(sampleFlowParam);
return success(response.getContextBean(SampleFlowContext.class));
} else {
return error(1_032_100_000, response.getMessage());
}
//return success(FlowBus.getNodeMap());
}
}

View File

@@ -0,0 +1,45 @@
package com.zt.plat.module.qms.business.bus.controller.admin;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson2.JSONObject;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.qms.business.bus.service.SampleAnalysisAuditService;
import com.zt.plat.module.qms.business.bus.service.SampleEntrustService;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.annotation.Resource;
/**
* 报表数据查询接口不继承BusinessControllerMarker
*/
@RestController
@RequestMapping("/qms/bus/sample/reporting-data-query")
public class SampleReportDataQueryController {
@Resource
private SampleEntrustService sampleEntrustService;
@Resource
private SampleAnalysisAuditService sampleAnalysisAuditService;
@GetMapping("/entrust-report-detail")
@Operation(summary = "委托单详情数据")
public CommonResult<?> reportDetail(@RequestParam("id") Long id) {
JSONObject jsonObject = sampleEntrustService.reportDetail(id);
return success(jsonObject);
}
@Operation(summary = "委托单详情数据")
@GetMapping("/crossAuditByTaskId")
public CommonResult<?> crossAuditByTaskId(Long businessAssayTaskId) {
JSONObject result = sampleAnalysisAuditService.crossAuditByTaskId(businessAssayTaskId);
return success(result);
}
}

View File

@@ -43,8 +43,8 @@ public class SampleResultReportingController implements BusinessControllerMarker
//获取方法对应的样品
@GetMapping("/getSampleResultReportingList")
public CommonResult<?> getSampleResultReportingList(Long configAssayMethodId) {
JSONObject result = sampleResultReportingService.getSampleResultReportingList(configAssayMethodId);
public CommonResult<?> getSampleResultReportingList(BusinessSubParentSampleAssessmentGroupReqVO reqVO) {
JSONObject result = sampleResultReportingService.getSampleResultReportingList(reqVO);
return success(result);
}

View File

@@ -40,6 +40,13 @@ public class SampleTaskAssignController implements BusinessControllerMarker {
return success(list);
}
@Operation(description = "根据用户id获取用户信息")
@GetMapping("/getUserInfoById")
public CommonResult<?> getUserInfoById(Long userId) {
AdminUserRespDTO userRespDTO = sampleTaskAssignService.getUserInfoById(userId);
return success(userRespDTO);
}
@GetMapping("/getAssaySampleList")
public CommonResult<?> getAssaySampleList(BusinessAssayTaskDataReqVO reqVO) {
List<UnAssignTaskedSubSampleRespVO> list = sampleTaskAssignService.getAssaySampleList(reqVO);

View File

@@ -0,0 +1,155 @@
package com.zt.plat.module.qms.business.bus.controller.admin;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson2.JSON;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.qms.core.sampleflow.SampleFlowDefinition;
import com.zt.plat.module.qms.core.sampleflow.SampleFlowNode;
@RestController
@RequestMapping("/qms/bus/test")
public class TestController {
@GetMapping("/testSampleFlow")
public CommonResult<?> testSampleFlow() {
SampleFlowDefinition sampleFlowDefinition = new SampleFlowDefinition();
sampleFlowDefinition.setFlowKey("flw_sub_sample_process");
sampleFlowDefinition.setFlowName("子样样品流转流程");
List<SampleFlowNode> flowNodeList = new ArrayList<>();
SampleFlowNode zxr = new SampleFlowNode();
zxr.setNodeName("中心收样");
zxr.setNodeKey("flw_center_receive");
zxr.setSort(3100);
SampleFlowNode zxs = new SampleFlowNode();
zxs.setNodeName("中心送样");
zxs.setNodeKey("flw_center_send");
zxs.setSort(3200);
SampleFlowNode bzr = new SampleFlowNode();
bzr.setNodeName("班组收样");
bzr.setNodeKey("flw_team_receive");
bzr.setSort(3300);
SampleFlowNode ypbm = new SampleFlowNode();
ypbm.setNodeName("样品编密");
ypbm.setNodeKey("flw_sample_encrypt");
ypbm.setSort(3400);
// SampleFlowNode fxr = new SampleFlowNode();
// fxr.setNodeName("分析收样");
// fxr.setNodeKey("flw_analysis_receive");
// fxr.setSort(3500);
//
SampleFlowNode fx = new SampleFlowNode();
fx.setNodeName("样品分析");
fx.setNodeKey("flw_analysis");
fx.setSort(3550);
//
// SampleFlowNode fxs = new SampleFlowNode();
// fxs.setNodeName("分析送样");
// fxs.setNodeKey("flw_analysis_send");
// fxs.setSort(3600);
SampleFlowNode bzs = new SampleFlowNode();
bzs.setNodeName("班组送样");
bzs.setNodeKey("flw_team_send");
bzs.setSort(3700);
SampleFlowNode ypgk = new SampleFlowNode();
ypgk.setNodeName("样品归库");
ypgk.setNodeKey("flw_sample_storage");
ypgk.setSort(3800);
ypgk.setNextFlowNodeList(null);
flowNodeList.add(ypgk);
zxr.setNextFlowNodeList(new ArrayList<SampleFlowNode>() {
private static final long serialVersionUID = 6146393613606839512L;
{
add(BeanUtils.toBean(zxs,SampleFlowNode.class).setIsDefault(true));
}
});
flowNodeList.add(zxr);
zxs.setNextFlowNodeList(new ArrayList<>() {
private static final long serialVersionUID = 5357543125760924047L;
{
add(BeanUtils.toBean(bzr,SampleFlowNode.class).setIsDefault(true));
}});
flowNodeList.add(zxs);
bzr.setNextFlowNodeList(new ArrayList<>() {
private static final long serialVersionUID = 6376704859477839016L;
{
add(BeanUtils.toBean(ypbm,SampleFlowNode.class).setCondition("subSampleEncrypt"));//样品需要编密并且没编密过
add(BeanUtils.toBean(fx,SampleFlowNode.class).setCondition("subSampleNotEncrypt"));//样品无需编密或样品已编密过
}});
flowNodeList.add(bzr);
ypbm.setNextFlowNodeList(new ArrayList<>() {
private static final long serialVersionUID = 1014984817516902869L;
{
add(BeanUtils.toBean(fx,SampleFlowNode.class).setIsDefault(true));
}});
flowNodeList.add(ypbm);
// fxr.setNextFlowNodeList(new ArrayList<>() {{
// add(BeanUtils.toBean(fxs,SampleFlowNode.class).setIsDefault(true));
// }});
// flowNodeList.add(fxr);
//
//
// fxs.setNextFlowNodeList(new ArrayList<>() {{
// add(BeanUtils.toBean(bzs,SampleFlowNode.class).setIsDefault(true).setCondition("当前部门任务已全部分析完"));
// }});
// flowNodeList.add(fxs);
fx.setNextFlowNodeList(new ArrayList<>() {
private static final long serialVersionUID = -610440034210287957L;
{
add(BeanUtils.toBean(bzs,SampleFlowNode.class).setIsDefault(true).setCondition("当前部门任务已全部分析完"));
}});
flowNodeList.add(fx);
bzs.setNextFlowNodeList(new ArrayList<>() {
private static final long serialVersionUID = -5057434004685743838L;
{
// add(BeanUtils.toBean(fx,SampleFlowNode.class).setCondition("样品当前分析班组结果超差,需要发起复检"));
add(BeanUtils.toBean(bzr,SampleFlowNode.class).setCondition("subSampleSelfReportedOthersPending"));//当前部门数据已全部判断上报
add(BeanUtils.toBean(ypgk,SampleFlowNode.class).setCondition("subSampleAlldeptAnalyzed"));//当前样品所有分析任务已全部上报完
}});
flowNodeList.add(bzs);
sampleFlowDefinition.setFlowNodeList(flowNodeList);
String jsonSampleFlowDefinition = JSON.toJSONString(sampleFlowDefinition);
System.out.println(jsonSampleFlowDefinition);
return success(jsonSampleFlowDefinition);
}
}

View File

@@ -18,6 +18,9 @@ public class BusinessAssayTaskDataExtendRespVO extends BusinessAssayTaskDataResp
@Schema(description = "分析方法名称")
private String configAssayMethodName;
@Schema(description = "检测方法配置名称及类别")
private String configAssayMethodNameAndCategory;
@Schema(description = "子样配置id")
private Long configSubSampleId;

View File

@@ -5,10 +5,15 @@ import lombok.Data;
@Data
public class BusinessAssayTaskDataGroupRespVO {
/** 方法id **/
private Long configAssayMethodId;
/** 方法名称 **/
private String configAssayMethodName;
/** 方法名称及类别 **/
private String configAssayMethodNameAndCategory;
private String assayType;
private Integer sampleTaskCount;

View File

@@ -105,4 +105,22 @@ public class BusinessAssayTaskDataReqVO {
@Schema(description = "样品状态")
private String sampleStatus;
@Schema(description = "检测方法配置名称")
private String configAssayMethodName;
@Schema(description = "检测方法配置名称及类别")
private String configAssayMethodNameAndCategory;
@Schema(description = "收样时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleReceiveTime;
@Schema(description = "样品编号")
private String sampleCode;
@Schema(description = "分析编号")
private String sampleAssayCode;
@Schema(description = "归库编号")
private String sampleReturnCode;
}

View File

@@ -4,6 +4,7 @@ import java.util.List;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigQCSampleMethodExtendRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
@@ -24,6 +25,9 @@ public class BusinessAssayTaskExtendRespVO extends BusinessAssayTaskRespVO {
/** 分析方法名称 **/
private String configAssayMethodName;
@Schema(description = "检测方法配置名称及类别")
private String configAssayMethodNameAndCategory;
/** 分析方法对应的分析项目 **/
private String configAssayMethodProjectShowNames;

View File

@@ -100,10 +100,10 @@ public class BusinessAssayTaskPageReqVO extends PageParam {
@Schema(description = "签名信息")
private String documentSignature;
@Schema(description = "完成状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved", example = "2")
@Schema(description = "完成状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed", example = "2")
private String finishStatus;
@Schema(description = "流程状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved", example = "1")
@Schema(description = "流程状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed", example = "1")
private String flowStatus;
@Schema(description = "所属部门")

View File

@@ -99,10 +99,10 @@ public class BusinessAssayTaskReqVO {
@Schema(description = "签名信息")
private String documentSignature;
@Schema(description = "完成状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved", example = "2")
@Schema(description = "完成状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed", example = "2")
private String finishStatus;
@Schema(description = "流程状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved", example = "1")
@Schema(description = "流程状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed", example = "1")
private String flowStatus;
@Schema(description = "所属部门")

View File

@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import com.zt.plat.module.qms.core.aspect.annotation.Dict;
@Schema(description = "管理后台 - 检测任务分配业务 Response VO")
@Data
@@ -116,12 +117,13 @@ public class BusinessAssayTaskRespVO {
@ExcelProperty("签名信息")
private String documentSignature;
@Schema(description = "完成状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved", example = "2")
@ExcelProperty("完成状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved")
@Schema(description = "完成状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed", example = "2")
@ExcelProperty("完成状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed")
private String finishStatus;
@Schema(description = "流程状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved", example = "1")
@ExcelProperty("流程状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved")
@Dict(dicCode = "flow_status")
@Schema(description = "流程状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed", example = "1")
@ExcelProperty("流程状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed")
private String flowStatus;
@Schema(description = "所属部门")

View File

@@ -102,10 +102,10 @@ public class BusinessAssayTaskSaveReqVO {
@Schema(description = "签名信息")
private String documentSignature;
@Schema(description = "完成状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved", example = "2")
@Schema(description = "完成状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed", example = "2")
private String finishStatus;
@Schema(description = "流程状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved", example = "1")
@Schema(description = "流程状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed", example = "1")
private String flowStatus;
@Schema(description = "所属部门")

View File

@@ -64,5 +64,16 @@ public class BusinessHandoverRecordSubPageReqVO extends PageParam {
@Schema(description = "备注")
private String remark;
//==============扩展字段================
private Long deptId;
@Schema(description = "分析编号")
private String sampleAssayCode;
@Schema(description = "归库编号")
private String sampleReturnCode;
@Schema(description = "样品名称")
private String sampleName;
}

View File

@@ -17,6 +17,11 @@ import lombok.Data;
@Data
public class BusinessSampleEntrustDetailExtendRespVO extends BusinessSampleEntrustDetailRespVO {
/**
* 样品类型key
*/
private String sampleTypeDictionaryBusinessKey;
/** 样品大类名称 **/
private String baseSampleName;

View File

@@ -156,4 +156,7 @@ public class BusinessSampleEntrustRegistrationPageReqVO extends PageParam {
//====================扩展字段======================
@Schema(description = "委托来源名称")
private String configEntrustSourceName;
@Schema(description = "报表配置id")
private Long configReportTypeId;
}

View File

@@ -6,6 +6,7 @@ import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import com.zt.plat.module.qms.core.aspect.annotation.Dict;
@Schema(description = "管理后台 - 委检登记业务 Response VO")
@Data
@@ -144,10 +145,12 @@ public class BusinessSampleEntrustRegistrationRespVO {
@ExcelProperty("数据校验状态,success-数据校验成功、fail-数据校验失败")
private String dataCheckStatus;
@Dict(dicCode = "entrust_assay_status")
@Schema(description = "检验状态,unchecked-未检验checked-已检验", example = "2")
@ExcelProperty("检验状态,unchecked-未检验checked-已检验")
private String assayStatus;
@Dict(dicCode = "entrust_data_status")
@Schema(description = "数据回报状态,unreturned-未回报returned-已回报", example = "1")
@ExcelProperty("数据回报状态,unreturned-未回报returned-已回报")
private String dataStatus;

View File

@@ -1,5 +1,11 @@
package com.zt.plat.module.qms.business.bus.controller.vo;
import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -12,9 +18,16 @@ public class BusinessSubParentSampleAssessmentGroupReqVO {
@Schema(description = "分析方法名称")
private String configAssayMethodName;
@Schema(description = "检测方法配置名称及类别")
private String configAssayMethodNameAndCategory;
@Schema(description = "分析部门ID")
private Long assayDepartmentId;
@Schema(description = "分析部门名称")
private String assayDepartmentName;
@Schema(description = "收样时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleReceiveTime;
}

View File

@@ -12,6 +12,9 @@ public class BusinessSubParentSampleAssessmentGroupRespVO {
@Schema(description = "分析方法名称")
private String configAssayMethodName;
@Schema(description = "检测方法配置名称及类别")
private String configAssayMethodNameAndCategory;
@Schema(description = "分析部门ID")
private Long assayDepartmentId;

View File

@@ -31,6 +31,9 @@ public class BusinessSubSampleAnalysisGroupPageReqVO extends PageParam {
@Schema(description = "样品状态", example = "1")
private String sampleStatus;
@Schema(description = "是否送样")
private Integer isSend;
@Schema(description = "收样人")
private String sampleReceiver;

View File

@@ -40,6 +40,9 @@ public class BusinessSubSampleAnalysisGroupRespVO {
@ExcelProperty("样品状态")
private String sampleStatus;
@Schema(description = "是否送样")
private Integer isSend;
@Schema(description = "收样人")
@ExcelProperty("收样人")
private String sampleReceiver;

View File

@@ -37,6 +37,9 @@ public class BusinessSubSampleAnalysisGroupSaveReqVO {
@NotEmpty(message = "样品状态不能为空")
private String sampleStatus;
@Schema(description = "是否送样")
private Integer isSend;
@Schema(description = "收样人")
private String sampleReceiver;

View File

@@ -64,6 +64,9 @@ public class BusinessSubSampleExtendRespVO extends BusinessSubSampleRespVO {
@Schema(description = "分析部门名称")
private String assayDepartmentName;
@Schema(description = "是否已送样")
private Integer isSendSample;
@Schema(description = "是否打印")
private Integer isPrint;

View File

@@ -145,6 +145,9 @@ public class BusinessSubSamplePageReqVO extends PageParam {
@Schema(description = "分析部门状态")
private String assayDepartmentStatus;
@Schema(description = "是否已送样")
private Integer isSendSample;
@Schema(description = "样品流程节点KEY列表")
private List<String> sampleFlowNodeKeyList;

View File

@@ -1,5 +1,7 @@
package com.zt.plat.module.qms.business.bus.controller.vo;
import java.time.LocalDateTime;
import lombok.Data;
@Data
@@ -22,4 +24,7 @@ public class NoReportSubParentSampleAssessmentRespVO {
private String taskType;
private String assayType;
private LocalDateTime sampleReceiveTime;
}

View File

@@ -4,6 +4,7 @@ import java.util.List;
import com.zt.plat.module.qms.business.config.controller.vo.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@@ -21,6 +22,9 @@ public class RecheckSubSampleParentMethodRespVO {
private String configAssayMethodName;
@Schema(description = "检测方法配置名称及类别")
private String configAssayMethodNameAndCategory;
private Long baseSampleId;
private String baseSampleName;

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.business.bus.dal.dataobject;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
@@ -109,4 +110,20 @@ public class BusinessAssayReportDataDO extends BusinessBaseDO {
//样品创建时间
@TableField(exist = false)
private LocalDateTime baseSampleCreateTime;
//样品类型key
@TableField(exist = false)
private String sampleTypeKey;
//委托样品名称
@TableField(exist = false)
private String entrustSampleName;
//委托样品编号
@TableField(exist = false)
private String entrustSampleCode;
//委托明细排序
@TableField(exist = false)
private Integer entrustDetailSort;
}

View File

@@ -160,12 +160,12 @@ public class BusinessAssayTaskDO extends BusinessBaseDO {
@TableField("DOC_SIG")
private String documentSignature;
/**
* 完成状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved
* 完成状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed
*/
@TableField("FIN_STS")
private String finishStatus;
/**
* 流程状态,未开始-not_start、审核中-running、已退回-returned、已通过-approved
* 流程状态,未开始-not_start、审核中-in_progress、已退回-returned、已通过-completed
*/
@TableField("FLW_STS")
private String flowStatus;

View File

@@ -63,6 +63,11 @@ public class BusinessSubSampleAnalysisGroupDO extends BusinessBaseDO {
@TableField("SMP_STS")
private String sampleStatus;
/**
* 是否送样
*/
@TableField("IS_SND")
private Integer isSend;
/**
* 收样人
*/
@TableField("SMP_RCVR")

View File

@@ -2,7 +2,6 @@ package com.zt.plat.module.qms.business.bus.dal.mapper;
import java.util.*;
import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl.On;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.zt.plat.framework.common.pojo.PageResult;
@@ -16,7 +15,6 @@ import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDataRe
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleAnalysisGroupDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleAssessmentDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleAssessmentProjectDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
@@ -26,7 +24,6 @@ import cn.hutool.core.util.ObjectUtil;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -47,6 +44,7 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
.eq(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentId, BusinessAssayTaskDataDO::getAssayDepartmentId))
.selectAll(BusinessAssayTaskDataDO.class)
.selectAs(ConfigAssayMethodDO::getName, BusinessAssayTaskDataExtendRespVO::getConfigAssayMethodName)
.selectAs(ConfigAssayMethodDO::getMethodNameCategory, BusinessAssayTaskDataExtendRespVO::getConfigAssayMethodNameAndCategory)
.selectAs(BusinessSubSampleDO::getSampleName, BusinessAssayTaskDataExtendRespVO::getSampleName)
.selectAs(BusinessSubSampleDO::getSampleCode, BusinessAssayTaskDataExtendRespVO::getSampleCode)
.selectAs(BusinessSubSampleDO::getSampleAssayCode, BusinessAssayTaskDataExtendRespVO::getSampleAssayCode)
@@ -136,7 +134,7 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
if (ObjectUtil.isNotEmpty(reqVO.getSampleStatus())) {
mpjLambdaWrapper.eq(BusinessSubSampleAnalysisGroupDO::getSampleStatus, reqVO.getSampleStatus());
}
mpjLambdaWrapper.orderByDesc(BusinessAssayTaskDataDO::getId);
mpjLambdaWrapper.orderByAsc(BusinessAssayTaskDataDO::getSampleFlowNodeTime);
return selectJoinList(BusinessAssayTaskDataExtendRespVO.class, mpjLambdaWrapper);
}
@@ -149,6 +147,7 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
.eq(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentId, BusinessAssayTaskDataDO::getAssayDepartmentId))
.selectAll(BusinessAssayTaskDataDO.class)
.selectAs(ConfigAssayMethodDO::getName, BusinessAssayTaskDataExtendRespVO::getConfigAssayMethodName)
.selectAs(ConfigAssayMethodDO::getMethodNameCategory, BusinessAssayTaskDataExtendRespVO::getConfigAssayMethodNameAndCategory)
.selectAs(BusinessSubSampleDO::getSampleName, BusinessAssayTaskDataExtendRespVO::getSampleName)
.selectAs(BusinessSubSampleDO::getSampleCode, BusinessAssayTaskDataExtendRespVO::getSampleCode)
.selectAs(BusinessSubSampleDO::getSampleAssayCode, BusinessAssayTaskDataExtendRespVO::getSampleAssayCode)
@@ -238,7 +237,7 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
if (ObjectUtil.isNotEmpty(reqVO.getSampleStatus())) {
mpjLambdaWrapper.eq(BusinessSubSampleAnalysisGroupDO::getSampleStatus, reqVO.getSampleStatus());
}
mpjLambdaWrapper.orderByDesc(BusinessAssayTaskDataDO::getId);
mpjLambdaWrapper.orderByAsc(BusinessAssayTaskDataDO::getSampleFlowNodeTime);
return selectJoinPage(reqVO, BusinessAssayTaskDataExtendRespVO.class, mpjLambdaWrapper);
}
@@ -274,6 +273,7 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
.eq(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentId, BusinessAssayTaskDataDO::getAssayDepartmentId))
.selectAll(BusinessAssayTaskDataDO.class)
.selectAs(ConfigAssayMethodDO::getName, BusinessAssayTaskDataExtendRespVO::getConfigAssayMethodName)
.selectAs(ConfigAssayMethodDO::getMethodNameCategory, BusinessAssayTaskDataExtendRespVO::getConfigAssayMethodNameAndCategory)
.selectAs(ConfigAssayMethodDO::getConfigReportTemplateKey, BusinessAssayTaskDataExtendRespVO::getConfigReportTemplateKey)
.selectAs(BusinessSubSampleDO::getSampleName, BusinessAssayTaskDataExtendRespVO::getSampleName)
.selectAs(BusinessSubSampleDO::getSampleCode, BusinessAssayTaskDataExtendRespVO::getSampleCode)
@@ -302,6 +302,9 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
break;
}
}
if (ObjectUtil.isNotEmpty(reqVO.getSampleReceiveTime()) && reqVO.getSampleReceiveTime().length == 2) {
mpjLambdaWrapper.between(BusinessSubSampleAnalysisGroupDO::getSampleReceiveTime, reqVO.getSampleReceiveTime()[0], reqVO.getSampleReceiveTime()[1]);
}
mpjLambdaWrapper.eq(BusinessSubSampleAnalysisGroupDO::getSampleStatus, "已收样");//已收样
mpjLambdaWrapper.orderByAsc(BusinessAssayTaskDataDO::getBusinessSubSampleId).orderByAsc(BusinessAssayTaskDataDO::getReportTime);

View File

@@ -49,7 +49,7 @@ public interface BusinessAssayTaskDetailMapper extends BaseMapperX<BusinessAssay
.eqIfPresent(BusinessAssayTaskDetailDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(BusinessAssayTaskDetailDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(BusinessAssayTaskDetailDO::getRemark, reqVO.getRemark())
.orderByDesc(BusinessAssayTaskDetailDO::getId));
.orderByAsc(BusinessAssayTaskDetailDO::getSampleCode));
}
default List<BusinessAssayTaskDetailExtendRespVO> selectList(BusinessAssayTaskDetailReqVO reqVO) {
@@ -80,7 +80,7 @@ public interface BusinessAssayTaskDetailMapper extends BaseMapperX<BusinessAssay
.eqIfPresent(BusinessAssayTaskDetailDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(BusinessAssayTaskDetailDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(BusinessAssayTaskDetailDO::getRemark, reqVO.getRemark())
.orderByDesc(BusinessAssayTaskDetailDO::getId));
.orderByAsc(BusinessAssayTaskDetailDO::getSampleCode));
}
default List<BusinessAssayTaskDetailDO> selectByBusinessAssayTaskId(Long businessAssayTaskId) {

View File

@@ -29,6 +29,7 @@ public interface BusinessAssayTaskMapper extends BaseMapperX<BusinessAssayTaskDO
.leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessAssayTaskDO::getConfigAssayMethodId)
.selectAll(BusinessAssayTaskDO.class)
.selectAs(ConfigAssayMethodDO::getName, BusinessAssayTaskExtendRespVO::getConfigAssayMethodName)
.selectAs(ConfigAssayMethodDO::getMethodNameCategory, BusinessAssayTaskExtendRespVO::getConfigAssayMethodNameAndCategory)
.eqIfPresent(BusinessAssayTaskDO::getTaskNo, reqVO.getTaskNo())
.likeIfPresent(BusinessAssayTaskDO::getTaskName, reqVO.getTaskName())
.eqIfPresent(BusinessAssayTaskDO::getConfigAssayMethodId, reqVO.getConfigAssayMethodId())
@@ -73,6 +74,7 @@ public interface BusinessAssayTaskMapper extends BaseMapperX<BusinessAssayTaskDO
.leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessAssayTaskDO::getConfigAssayMethodId)
.selectAll(BusinessAssayTaskDO.class)
.selectAs(ConfigAssayMethodDO::getName, BusinessAssayTaskExtendRespVO::getConfigAssayMethodName)
.selectAs(ConfigAssayMethodDO::getMethodNameCategory, BusinessAssayTaskExtendRespVO::getConfigAssayMethodNameAndCategory)
.eqIfPresent(BusinessAssayTaskDO::getTaskNo, reqVO.getTaskNo())
.likeIfPresent(BusinessAssayTaskDO::getTaskName, reqVO.getTaskName())
.eqIfPresent(BusinessAssayTaskDO::getConfigAssayMethodId, reqVO.getConfigAssayMethodId())
@@ -136,6 +138,7 @@ public interface BusinessAssayTaskMapper extends BaseMapperX<BusinessAssayTaskDO
.leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessAssayTaskDO::getConfigAssayMethodId)
.selectAll(BusinessAssayTaskDO.class)
.selectAs(ConfigAssayMethodDO::getName, BusinessAssayTaskExtendRespVO::getConfigAssayMethodName)
.selectAs(ConfigAssayMethodDO::getMethodNameCategory, BusinessAssayTaskExtendRespVO::getConfigAssayMethodNameAndCategory)
.eq(BusinessAssayTaskDO::getId, id));
}

View File

@@ -47,6 +47,9 @@ public interface BusinessHandoverRecordSubMapper extends BaseMapperX<BusinessHan
.eqIfPresent(BusinessHandoverRecordSubDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(BusinessHandoverRecordSubDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(BusinessHandoverRecordSubDO::getRemark, reqVO.getRemark())
.eqIfPresent(BusinessSubSampleDO::getSampleAssayCode, reqVO.getSampleAssayCode())
.eqIfPresent(BusinessSubSampleDO::getSampleReturnCode, reqVO.getSampleReturnCode())
.likeIfPresent(BusinessSubSampleDO::getSampleName, reqVO.getSampleName())
.eqIfPresent(BusinessHandoverRecordSubDO::getDeptId, reqVO.getDeptId())
.orderByDesc(BusinessHandoverRecordSubDO::getCreateTime));
}

View File

@@ -83,20 +83,39 @@ public interface BusinessSampleEntrustDetailMapper extends BaseMapperX<BusinessS
return selectList(new LambdaQueryWrapperX<BusinessSampleEntrustDetailDO>().eq(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, businessSampleEntrustRegistrationId));
}
default List<BusinessSampleEntrustDetailExtendRespVO> selectExtendByBusinessSampleEntrustRegistrationId(Long businessSampleEntrustRegistrationId) {
return selectJoinList(BusinessSampleEntrustDetailExtendRespVO.class, new MPJLambdaWrapperX<BusinessSampleEntrustDetailDO>()
.leftJoin(BaseSampleDO.class, BaseSampleDO::getId, BusinessSampleEntrustDetailDO::getBaseSampleId)
.selectAll(BusinessSampleEntrustDetailDO.class)
.selectAs(BaseSampleDO::getDictionaryBusinessKey, BusinessSampleEntrustDetailExtendRespVO::getSampleTypeDictionaryBusinessKey)
.eq(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, businessSampleEntrustRegistrationId));
}
default List<BusinessSampleEntrustDetailDO> selectByBusinessSampleEntrustRegistrationIds(List<Long> businessSampleEntrustRegistrationIds) {
return selectList(new LambdaQueryWrapperX<BusinessSampleEntrustDetailDO>().in(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, businessSampleEntrustRegistrationIds));
}
default BusinessSampleEntrustDetailDO selectByBusinessBaseSampleId(Long businessBaseSampleId) {
return selectOne(new LambdaQueryWrapperX<BusinessSampleEntrustDetailDO>().eq(BusinessSampleEntrustDetailDO::getBusinessBaseSampleId, businessBaseSampleId));
}
default List<BusinessSampleEntrustDetailDO> selectByBusinessBaseSampleIds(List<Long> businessBaseSampleIds) {
return selectList(new LambdaQueryWrapperX<BusinessSampleEntrustDetailDO>().in(BusinessSampleEntrustDetailDO::getBusinessBaseSampleId, businessBaseSampleIds));
}
/**
* 查询当前批次的第一条数据
* @param businessBaseSampleId 任意一条的主样id
* @param baseSampleDictionaryBusinessKey 样品大类类型key
* @return
*/
default BusinessSampleEntrustDetailDO selectCurrBatchFirstByBusinessBaseSampleId(Long businessBaseSampleId) {
default BusinessSampleEntrustDetailDO selectCurrBatchFirstByBusinessBaseSampleIdAndBaseSampleDictionaryBusinessKey(Long businessBaseSampleId, String baseSampleDictionaryBusinessKey) {
BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = selectByBusinessBaseSampleId(businessBaseSampleId);
//查询当前委托的第一条
return selectOne(new LambdaQueryWrapperX<BusinessSampleEntrustDetailDO>()
return selectJoinOne(BusinessSampleEntrustDetailDO.class, new MPJLambdaWrapperX<BusinessSampleEntrustDetailDO>()
.leftJoin(BaseSampleDO.class, BaseSampleDO::getId, BusinessSampleEntrustDetailDO::getBaseSampleId)
.eq(BusinessSampleEntrustDetailDO::getBusinessSampleEntrustRegistrationId, businessSampleEntrustDetailDO.getBusinessSampleEntrustRegistrationId())
.eq(BaseSampleDO::getDictionaryBusinessKey, baseSampleDictionaryBusinessKey)
.orderByAsc(BusinessSampleEntrustDetailDO::getSort)
.last(" limit 1 "));

View File

@@ -4,8 +4,10 @@ import java.util.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleAssessmentDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
@@ -35,6 +37,12 @@ public interface BusinessSubParentSampleAssessmentMapper extends BaseMapperX<Bus
.orderByDesc(BusinessSubParentSampleAssessmentDO::getId));
}
default List<BusinessSubParentSampleAssessmentDO> selectByBusinessSubParentSampleIds(List<Long> businessSubParentSampleIds) {
return selectJoinList(BusinessSubParentSampleAssessmentDO.class, new MPJLambdaWrapperX<BusinessSubParentSampleAssessmentDO>()
.leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessSubParentSampleAssessmentDO::getConfigAssayMethodId)
.in(BusinessSubParentSampleAssessmentDO::getBusinessSubParentSampleId, businessSubParentSampleIds));
}
default BusinessSubParentSampleAssessmentDO selectByBusinessSubParentSampleIdAndConfigAssayMethodId(Long businessSubParentSampleId, Long configAssayMethodId) {
return selectOne(new LambdaQueryWrapperX<BusinessSubParentSampleAssessmentDO>()
.eq(BusinessSubParentSampleAssessmentDO::getBusinessSubParentSampleId, businessSubParentSampleId)
@@ -48,4 +56,12 @@ public interface BusinessSubParentSampleAssessmentMapper extends BaseMapperX<Bus
.eq(BusinessSubParentSampleAssessmentDO::getConfigAssayMethodId, configAssayMethodId));
}
default List<BusinessSubParentSampleAssessmentDO> selectByBusinessSubParentSampleIdsAndAssayDepartmentId(List<Long> businessSubParentSampleIds,
Long assayDepartmentId) {
return selectJoinList(BusinessSubParentSampleAssessmentDO.class, new MPJLambdaWrapperX<BusinessSubParentSampleAssessmentDO>()
.leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessSubParentSampleAssessmentDO::getConfigAssayMethodId)
.in(BusinessSubParentSampleAssessmentDO::getBusinessSubParentSampleId, businessSubParentSampleIds)
.eq(ConfigAssayMethodDO::getAssayDepartmentId, assayDepartmentId));
}
}

View File

@@ -69,7 +69,7 @@ public interface BusinessSubParentSampleAssessmentProjectMapper extends BaseMapp
.eq(BusinessSubParentSampleAssessmentProjectDO::getConfigAssayMethodId, configAssayMethodId));
}
List<NoReportSubParentSampleAssessmentRespVO> selectNoReportSubParentSampleAssessment(@Param("configAssayMethodId") Long configAssayMethodId);
List<NoReportSubParentSampleAssessmentRespVO> selectNoReportSubParentSampleAssessment(@Param("reqVO") BusinessSubParentSampleAssessmentGroupReqVO reqVO);
List<RecheckSubSampleParentMethodRespVO> getRecheckAssayMethodList(@Param("baseSampleId") Long baseSampleId, @Param("businessSubParentSampleId") Long businessSubParentSampleId, @Param("configAssayMethodId") Long configAssayMethodId);

View File

@@ -46,4 +46,9 @@ public interface BusinessSubParentSampleMapper extends BaseMapperX<BusinessSubPa
.eq(BusinessSubParentSampleDO::getBusinessBaseSampleId, businessBaseSampleId));
}
default List<BusinessSubParentSampleDO> selectByBusinessBaseSampleIds(List<Long> businessBaseSampleIds) {
return selectList(new LambdaQueryWrapperX<BusinessSubParentSampleDO>()
.in(BusinessSubParentSampleDO::getBusinessBaseSampleId, businessBaseSampleIds));
}
}

View File

@@ -27,6 +27,7 @@ public interface BusinessSubSampleAnalysisGroupMapper extends BaseMapperX<Busine
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentId, reqVO.getAssayDepartmentId())
.likeIfPresent(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentName, reqVO.getAssayDepartmentName())
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getSampleStatus, reqVO.getSampleStatus())
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getIsSend, reqVO.getIsSend())
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getSampleReceiver, reqVO.getSampleReceiver())
.betweenIfPresent(BusinessSubSampleAnalysisGroupDO::getSampleReceiveTime, reqVO.getSampleReceiveTime())
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
@@ -46,6 +47,12 @@ public interface BusinessSubSampleAnalysisGroupMapper extends BaseMapperX<Busine
.in(BusinessSubSampleAnalysisGroupDO::getBusinessSubParentSampleId, businessSubParentSampleIds));
}
default List<BusinessSubSampleAnalysisGroupDO> selectByBusinessSubParentSampleIdsAndAssayDepartmentId(List<Long> businessSubParentSampleIds, Long assayDepartmentId) {
return selectList(new LambdaQueryWrapperX<BusinessSubSampleAnalysisGroupDO>()
.in(BusinessSubSampleAnalysisGroupDO::getBusinessSubParentSampleId, businessSubParentSampleIds)
.eq(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentId, assayDepartmentId));
}
default List<BusinessSubSampleAnalysisGroupDO> selectByBusinessSubSampleId(Long businessSubSampleId) {
return selectList(new LambdaQueryWrapperX<BusinessSubSampleAnalysisGroupDO>()
.eq(BusinessSubSampleAnalysisGroupDO::getBusinessSubSampleId, businessSubSampleId));

View File

@@ -144,8 +144,8 @@ public interface BusinessSubSampleMapper extends BaseMapperX<BusinessSubSampleDO
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentId, reqVO.getAssayDepartmentId())
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentName, reqVO.getAssayDepartmentName())
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getSampleStatus, reqVO.getAssayDepartmentStatus())
.orderByAsc(BusinessSubSampleDO::getSampleCode)
);
.eqIfPresent(BusinessSubSampleAnalysisGroupDO::getIsSend, reqVO.getIsSendSample())
.orderByDesc(BusinessSubSampleDO::getSampleFlowNodeTime).orderByAsc(BusinessSubSampleDO::getSampleCode));
}
default List<BusinessSubSampleExtendRespVO> selectList(@Valid BusinessSubSampleReqVO reqVO) {

View File

@@ -9,13 +9,15 @@ import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import cn.hutool.core.collection.CollUtil;
import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.tenant.core.context.TenantContextHolder;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayParameterDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayReportDataDO;
@@ -46,11 +48,11 @@ import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleAssessmen
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleFlowInfo;
import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleEntrustContext;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigAssayMethodProjectExtendRespVO;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfAdd;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfInfo;
import com.zt.plat.module.qms.business.config.dal.dataobject.BaseSampleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectParameterDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigBaseSampleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSampleFlowDO;
@@ -79,6 +81,13 @@ import com.zt.plat.module.qms.enums.QmsCommonConstant;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
/**
* 委检样 是否有来样品位S值, 是: 综合分析室分析配料元素,试金分析室获取分析的配料元素 不送往综合分析室配料时采用来样品位S值如果是必须含有Cu、S的则试金分析人员称样时估一个Cu品位进行配料。
*
* 商检分析样 这批样中第一个样品默认产生1个配料任务综合分析室分析最终这些配料元素对应到这批商检分析样的每一个试金样品的配料参数上
*
* 商检综合样 综合样除了杂质元素如果要分析Au、Ag单个样品综合分析室分析配料元素会单独生成1个任务这个结果匹配到综合样自身的试金任务的配料参数上
*/
@Slf4j
@LiteflowComponent(id = "sampleEntrustGenSampleDataCmp", name = "样品委托生成系统样品数据")
public class SampleEntrustGenSampleDataCmp extends NodeComponent {
@@ -182,47 +191,33 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
//样品来样品位
List<BusinessSampleAssayResultDO> sampleAssayResultList = sampleEntrustContext.getSampleAssayResultList();
//金银检测项目字典id列表
// List<Long> auAgDictionaryProjectIdList = new ArrayList<>() {
// private static final long serialVersionUID = 1L;
//
// {
// add(1000000000000000002L);
// add(1000000000000000003L);
// }};
//硫的检测项目字典id
// Long sDictionaryProjectId = 1000000000000000004L;
//商检样品来源id
// List<Long> sjEntrustSourceIdList = new ArrayList<>() {
// private static final long serialVersionUID = 1L;
//
// {
// add(1000000000000000002L);//中铜国贸
// }};
List<Long> baseSampleIdList = sampleEntrustDetailList.stream().map(m -> m.getBaseSampleId()).distinct().collect(Collectors.toList());
//样品大类列表
List<BaseSampleDO> baseSampleList = baseSampleMapper.selectList();
List<BaseSampleDO> baseSampleList = baseSampleMapper.selectByIds(baseSampleIdList);
//主样配置
List<ConfigBaseSampleDO> configBaseSampleList = configBaseSampleMapper.selectList();
List<ConfigBaseSampleDO> configBaseSampleList = configBaseSampleMapper.selectByBaseSampleIds(baseSampleIdList);
List<Long> configBaseSampleIdList = configBaseSampleList.stream().map(m -> m.getId()).collect(Collectors.toList());
//分样配置
List<ConfigSubSampleParentDO> configSubSampleParentList = configSubSampleParentMapper.selectList();
List<ConfigSubSampleParentDO> configSubSampleParentList = configSubSampleParentMapper.selectByBaseSampleIds(baseSampleIdList);
//子样配置
List<ConfigSubSampleDO> configSubSampleList = configSubSampleMapper.selectList();
List<ConfigSubSampleDO> configSubSampleList = configSubSampleMapper.selectByBaseSampleIds(baseSampleIdList);
List<Long> configSubSampleIdList = configSubSampleList.stream().map(m -> m.getId()).collect(Collectors.toList());
//子样分析方法配置
List<ConfigSubSampleMethodDO> configSubSampleMethodList = configSubSampleMethodMapper.selectList();
List<ConfigSubSampleMethodDO> configSubSampleMethodList = configSubSampleMethodMapper.selectByConfigSubSampleIds(configSubSampleIdList);
List<Long> configAssayMethodIdList = configSubSampleMethodList.stream().map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList());
//分析方法配置
List<ConfigAssayMethodDO> configAssayMethodList = configAssayMethodMapper.selectList();
List<ConfigAssayMethodDO> configAssayMethodList = configAssayMethodMapper.selectByIds(configAssayMethodIdList);
//分析方法检测项目配置
List<ConfigAssayMethodProjectDO> configAssayMethodProjectList = configAssayMethodProjectMapper.selectList();
List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectList = configAssayMethodProjectMapper.selectByConfigAssayMethodIds(configAssayMethodIdList);
//分析方法检测项目参数配置
List<ConfigAssayMethodProjectParameterDO> configAssayMethodProjectParameterList = configAssayMethodProjectParameterMapper.selectList();
List<ConfigAssayMethodProjectParameterDO> configAssayMethodProjectParameterList = configAssayMethodProjectParameterMapper.selectByConfigAssayMethodIds(configAssayMethodIdList);
//检测项目字典
List<DictionaryProjectDO> dictionaryProjectList = dictionaryProjectMapper.selectList();
//主样报表配置
List<ConfigSampleReportDO> configSampleReportList = configSampleReportMapper.selectList();
List<ConfigSampleReportDO> configSampleReportList = configSampleReportMapper.selectByConfigBaseSampleIds(configBaseSampleIdList);
//样品流程配置
List<String> configSampleFlowKeyList = new ArrayList<>();
@@ -253,13 +248,6 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
//分析报表数据
List<BusinessAssayReportDataDO> businessAssayReportDataDOList = new ArrayList<>();
//是否为商检委托
// Boolean isSjEntrust = sjEntrustSourceIdList.contains(sampleEntrustRegistration.getConfigEntrustSourceId());
//是否分析金银
// Boolean isAssayAuAg = sampleEntrustProjectList.stream().anyMatch(f -> auAgDictionaryProjectIdList.contains(f.getDictionaryProjectId()));
//是否分析硫
// Boolean isAssayS = sampleEntrustProjectList.stream().anyMatch(f -> f.getDictionaryProjectId().equals(sDictionaryProjectId));
//子样流转信息列表
List<SampleFlowInfo> sampleFlowInfoList = new ArrayList<>();
@@ -267,12 +255,20 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
List<BusinessSampleEntrustDetailDO> sampleEntrustDetailListSort = sampleEntrustDetailList.stream().sorted(Comparator.comparingInt(BusinessSampleEntrustDetailDO::getSort)).collect(Collectors.toList());
//主样
BusinessBaseSampleDO businessBaseSampleDO = null;
int sort = 0;//委托明细顺序
int sjfxyOne = -1;//商检分析样第一个是值为0已经过商检分析样的值为1默认值为-1
for (BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO : sampleEntrustDetailListSort) {//委托样品明细
//样品大类
BaseSampleDO baseSampleDO = baseSampleList.stream().filter(f -> f.getId().equals(businessSampleEntrustDetailDO.getBaseSampleId())).findFirst().orElse(null);
if (QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())){//如果是商检分析样
if (sjfxyOne == -1) {
sjfxyOne = 0;//第一个商检分析样
} else {
sjfxyOne = 1;//商检分析样已添加过
}
}
//获取当前样品的检测项目
List<BusinessSampleEntrustProjectDO> sampleEntrustProjectDOList = sampleEntrustProjectList.stream().filter(f -> businessSampleEntrustDetailDO.getId().equals(f.getBusinessSampleEntrustDetailId())).collect(Collectors.toList());
@@ -286,42 +282,17 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
List<MaterialAssayStandardMethodDO> materialAssayStandardMethodList = sampleEntrustContext.getMaterialAssayStandardMethodDefaultByMaterialAssayStandardDetailIds(materialAssayStandardDetailIdList);
//获取检测方法
List<Long> configAssayMethodIdList = materialAssayStandardMethodList.stream().map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList());
List<Long> materialAssayStandardConfigAssayMethodIdList = materialAssayStandardMethodList.stream().map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList());
//查找子样配置
List<Long> configSubSampleIdList = configSubSampleMethodList.stream().filter(f -> f.getIsDefaultUse().equals(QmsCommonConstant.YES) && configAssayMethodIdList.contains(f.getConfigAssayMethodId())).map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList());
//查找当前委托明细分析的子样配置
List<Long> currentConfigSubSampleIdList = configSubSampleMethodList.stream().filter(f -> f.getIsDefaultUse().equals(QmsCommonConstant.YES) && materialAssayStandardConfigAssayMethodIdList.contains(f.getConfigAssayMethodId())).map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList());
//查询当前委托样品对应的子样
List<ConfigSubSampleDO> entrustConfigSubSampleList = configSubSampleList.stream().filter(f -> configSubSampleIdList.contains(f.getId()) && f.getBaseSampleId().equals(businessSampleEntrustDetailDO.getBaseSampleId())).distinct().collect(Collectors.toList());
List<ConfigSubSampleDO> entrustConfigSubSampleList = configSubSampleList.stream().filter(f -> currentConfigSubSampleIdList.contains(f.getId()) && f.getBaseSampleId().equals(businessSampleEntrustDetailDO.getBaseSampleId())).distinct().collect(Collectors.toList());
if (entrustConfigSubSampleList.size() != 1) {
throw new ServiceException(1_032_100_000, "子样配置不正确");
}
//是否创建综合样S分析
// Boolean isCreateZhy = false;
//综合样分析方法
// ConfigAssayMethodDO configAssayMethodZhy = null;
//是商检样品,分析金银,第一个样品
// if (isSjEntrust && isAssayAuAg && sort == 0) {
//是否分析硫
// isAssayS = dictionaryProjectIdList.contains(sDictionaryProjectId);
// if (isAssayS) {
// isCreateZhy = false;
// } else {
// isCreateZhy = true;
// MaterialAssayStandardMethodDO materialAssayStandardMethodDO = materialAssayStandardMethodMapper.selectByBaseSampleIdAndDictionaryProjectId(businessSampleEntrustDetailDO.getBaseSampleId(), sDictionaryProjectId);
// if (materialAssayStandardMethodDO == null) {
// throw new ServiceException(1_032_100_000, "商检样品检测项目存在金银但未找到S配置");
// }
// configAssayMethodZhy = configAssayMethodMapper.selectById(materialAssayStandardMethodDO.getConfigAssayMethodId());
// }
//
// }
//获取到子样配置
ConfigSubSampleDO configSubSample = entrustConfigSubSampleList.get(0);
Long configSubSampleParentId = configSubSample.getConfigSubSampleParentId();
@@ -437,7 +408,7 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
//子样对应的分析班组
BusinessSubSampleAnalysisGroupDO businessSubSampleAnalysisGroupDO = null;
for (Long configAssayMethodId : configAssayMethodIdList) {
for (Long configAssayMethodId : materialAssayStandardConfigAssayMethodIdList) {
//查询分析方法
ConfigAssayMethodDO configAssayMethodDO = configAssayMethodList.stream().filter(f -> f.getId().equals(configAssayMethodId)).findFirst().orElse(null);
@@ -456,7 +427,230 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
List<Long> projectIdList = addAssayTask.getProjectIdList();
//判定检测项目包含条件中的检测项目
Boolean isAssayConditionProjectList = sampleEntrustProjectList.stream().anyMatch(f -> conditionProjectIdList.contains(f.getDictionaryProjectId()));
if (isAssayConditionProjectList && sort == 0) {
//是否预报S值
Boolean isForecastS = false;
String forecastResult = businessSampleEntrustDetailDO.getForecastResult();
if (StringUtils.isNotBlank(forecastResult)) {
JSONArray array = JSON.parseArray(forecastResult);
for (int i = 0; i < array.size(); i++) {
JSONObject item = array.getJSONObject(i);
if ("S".equals(item.getString("simpleName"))) {
isForecastS = true;
break;
}
}
}
//如果是商检样分析,且为第一个商检分析样,并且包含要检测的项目,
if (QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey()) && isAssayConditionProjectList && sjfxyOne == 0) {
addAssayTask(currentDateTime, configSubSampleMethodList, configAssayMethodProjectList,
configAssayMethodProjectParameterList, dictionaryProjectList,
businessSubParentSampleAssessmentDOList, businessSubSampleAnalysisGroupDOList,
businessSubSampleAssessmentDOList, businessAssayTaskDataDOList,
businessAssayProjectDataDOList, businessAssayParameterDataDOList, configSubSample,
configSampleFlowSub, sampleFlowNodeSub, businessSubSampleDO, methodId,
projectIdList);
} else if (QmsCommonConstant.ENTRUST_COMPREHENSIVE_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey()) && isAssayConditionProjectList) {//如果是商检综合样,并且包含需检查的项目
addAssayTask(currentDateTime, configSubSampleMethodList, configAssayMethodProjectList,
configAssayMethodProjectParameterList, dictionaryProjectList,
businessSubParentSampleAssessmentDOList, businessSubSampleAnalysisGroupDOList,
businessSubSampleAssessmentDOList, businessAssayTaskDataDOList,
businessAssayProjectDataDOList, businessAssayParameterDataDOList, configSubSample,
configSampleFlowSub, sampleFlowNodeSub, businessSubSampleDO, methodId,
projectIdList);
} else if (QmsCommonConstant.ENTRUST_COMMISSION_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey()) && isAssayConditionProjectList && !isForecastS ) {//如果是委检样包含检测项目未预报S值
addAssayTask(currentDateTime, configSubSampleMethodList, configAssayMethodProjectList,
configAssayMethodProjectParameterList, dictionaryProjectList,
businessSubParentSampleAssessmentDOList, businessSubSampleAnalysisGroupDOList,
businessSubSampleAssessmentDOList, businessAssayTaskDataDOList,
businessAssayProjectDataDOList, businessAssayParameterDataDOList, configSubSample,
configSampleFlowSub, sampleFlowNodeSub, businessSubSampleDO, methodId,
projectIdList);
}
}
}
//分析班组
businessSubSampleAnalysisGroupDO = businessSubSampleAnalysisGroupDOList.stream().filter(f -> f.getBusinessSubSampleId().equals(businessSubSampleDO.getId()) && f.getAssayDepartmentId().equals(configAssayMethodDO.getAssayDepartmentId())).findFirst().orElse(null);
if (businessSubSampleAnalysisGroupDO == null) {
businessSubSampleAnalysisGroupDO = new BusinessSubSampleAnalysisGroupDO();
businessSubSampleAnalysisGroupDO.setId(IdWorker.getId());
businessSubSampleAnalysisGroupDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessSubSampleAnalysisGroupDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubSampleAnalysisGroupDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessSubSampleAnalysisGroupDO.setAssayDepartmentId(configAssayMethodDO.getAssayDepartmentId());
businessSubSampleAnalysisGroupDO.setAssayDepartmentName(configAssayMethodDO.getAssayDepartmentName());
businessSubSampleAnalysisGroupDO.setSampleStatus("待收样");
businessSubSampleAnalysisGroupDOList.add(businessSubSampleAnalysisGroupDO);
}
//根据任务数判断是平行还是
String assayType = configSubSampleMethodDO.getTaskCount() > 1 ? QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL : QmsCommonConstant.ASSAY_TYPE_SINGLE_CUP;
//分样判定数据
BusinessSubParentSampleAssessmentDO businessSubParentSampleAssessmentDO = new BusinessSubParentSampleAssessmentDO();
businessSubParentSampleAssessmentDO.setId(IdWorker.getId());
businessSubParentSampleAssessmentDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubParentSampleAssessmentDO.setConfigAssayMethodId(configAssayMethodId);
businessSubParentSampleAssessmentDO.setAssayType(assayType);
businessSubParentSampleAssessmentDO.setTaskType("常规");
businessSubParentSampleAssessmentDOList.add(businessSubParentSampleAssessmentDO);
//子样判定数据
BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = new BusinessSubSampleAssessmentDO();
businessSubSampleAssessmentDO.setId(IdWorker.getId());
businessSubSampleAssessmentDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessSubSampleAssessmentDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubSampleAssessmentDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessSubSampleAssessmentDO.setBusinessSubParentSampleAssessmentId(businessSubParentSampleAssessmentDO.getId());
businessSubSampleAssessmentDO.setConfigAssayMethodId(configAssayMethodId);
businessSubSampleAssessmentDO.setAssayType(assayType);
businessSubSampleAssessmentDO.setTaskType("常规");
businessSubSampleAssessmentDOList.add(businessSubSampleAssessmentDO);
//根据检测方法循环
BusinessAssayTaskDataDO businessAssayTaskDataDO = null;
//根据任务数循环
for (int i = 0; i < configSubSampleMethodDO.getTaskCount(); i++) {
//子样检测任务
businessAssayTaskDataDO = new BusinessAssayTaskDataDO();
businessAssayTaskDataDO.setId(IdWorker.getId());
businessAssayTaskDataDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessAssayTaskDataDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessAssayTaskDataDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessAssayTaskDataDO.setBusinessSubSampleAssessmentId(businessSubSampleAssessmentDO.getId());
businessAssayTaskDataDO.setConfigAssayMethodId(configAssayMethodId);
businessAssayTaskDataDO.setAssayType(assayType);
businessAssayTaskDataDO.setTaskType("常规");
businessAssayTaskDataDO.setConfigSampleFlowId(configSampleFlowSub.getId());
businessAssayTaskDataDO.setSampleFlowNodeKey(sampleFlowNodeSub.getNodeKey());
businessAssayTaskDataDO.setSampleFlowNodeTime(currentDateTime);
businessAssayTaskDataDO.setAssayDepartmentId(configAssayMethodDO.getAssayDepartmentId());
businessAssayTaskDataDO.setAssayDepartmentName(configAssayMethodDO.getAssayDepartmentName());
List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId)).collect(Collectors.toList());
StringBuilder assayProjectBuilder = new StringBuilder();
for (ConfigAssayMethodProjectExtendRespVO configAssayMethodProjectDO : configAssayMethodProjectDOList) {
//如果当前分析方法的项目不在当前检测项目中,则跳出循环继续
if (!dictionaryProjectIdList.contains(configAssayMethodProjectDO.getDictionaryProjectId())) {
continue;
}
DictionaryProjectDO dictionaryProject = dictionaryProjectList.stream().filter(f -> f.getId().equals(configAssayMethodProjectDO.getDictionaryProjectId())).findFirst().orElse(null);
assayProjectBuilder.append(dictionaryProject.getShowName()).append(",");
//检测项目
BusinessAssayProjectDataDO businessAssayProjectDataDO = new BusinessAssayProjectDataDO();
businessAssayProjectDataDO.setId(IdWorker.getId());
businessAssayProjectDataDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId());
businessAssayProjectDataDO.setConfigAssayMethodProjectId(configAssayMethodProjectDO.getId());
businessAssayProjectDataDO.setDictionaryProjectId(configAssayMethodProjectDO.getDictionaryProjectId());
businessAssayProjectDataDO.setDataType(configAssayMethodProjectDO.getDataType());
businessAssayProjectDataDO.setDecimalPosition(configAssayMethodProjectDO.getDecimalPosition());
businessAssayProjectDataDO.setUsage(QmsCommonConstant.ASSAY_PROJECT_USAGE_REPORT);
businessAssayProjectDataDO.setMinimumLimitValue(configAssayMethodProjectDO.getMinimumLimitValue());
businessAssayProjectDataDO.setIsEnabled(1);
businessAssayProjectDataDO.setIsNotAssessment(0);
businessAssayProjectDataDOList.add(businessAssayProjectDataDO);
List<ConfigAssayMethodProjectParameterDO> configAssayMethodProjectParameterDOList = configAssayMethodProjectParameterList.stream().filter(f -> f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectDO.getId())).collect(Collectors.toList());
for (ConfigAssayMethodProjectParameterDO configAssayMethodProjectParameterDO : configAssayMethodProjectParameterDOList) {
BusinessAssayParameterDataDO businessAssayParameterDataDO = new BusinessAssayParameterDataDO();
businessAssayParameterDataDO.setId(IdWorker.getId());
businessAssayParameterDataDO.setConfigAssayMethodProjectParameterId(configAssayMethodProjectParameterDO.getId());
businessAssayParameterDataDO.setBusinessAssayProjectDataId(businessAssayProjectDataDO.getId());
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
}
}
if (assayProjectBuilder.length() > 1) {
assayProjectBuilder.delete(assayProjectBuilder.length() - 1 , assayProjectBuilder.length());
}
businessAssayTaskDataDO.setAssayProject(assayProjectBuilder.toString());
businessAssayTaskDataDOList.add(businessAssayTaskDataDO);
}
}
}
sampleEntrustRegistration.setRegistrationStatus(QmsCommonConstant.SUBMITTED);
sampleEntrustRegistration.setAssayStatus(QmsCommonConstant.UNCHECKED);
sampleEntrustRegistration.setDataStatus(QmsCommonConstant.UNRETURNED);
sampleEntrustRegistration.setTaskQuantity(businessAssayTaskDataDOList.size());
sampleEntrustContext.setSampleFlowInfoList(sampleFlowInfoList);
businessSampleEntrustRegistrationMapper.updateById(sampleEntrustRegistration);
if (CollUtil.isNotEmpty(sampleEntrustDetailList)) {
businessSampleEntrustDetailMapper.updateBatch(sampleEntrustDetailList);
}
if (CollUtil.isNotEmpty(sampleEntrustProjectList)) {
businessSampleEntrustProjectMapper.updateBatch(sampleEntrustProjectList);
}
if (CollUtil.isNotEmpty(sampleAssayResultList)) {
businessSampleAssayResultMapper.updateBatch(sampleAssayResultList);
}
if (CollUtil.isNotEmpty(businessBaseSampleDOList)) {
businessBaseSampleMapper.insertBatch(businessBaseSampleDOList);
}
if (CollUtil.isNotEmpty(businessSubParentSampleDOList)) {
businessSubParentSampleMapper.insertBatch(businessSubParentSampleDOList);
}
if (CollUtil.isNotEmpty(businessSubParentSampleAssessmentDOList)) {
businessSubParentSampleAssessmentMapper.insertBatch(businessSubParentSampleAssessmentDOList);
}
if (CollUtil.isNotEmpty(businessSubSampleDOList)) {
businessSubSampleMapper.insertBatch(businessSubSampleDOList);
}
if (CollUtil.isNotEmpty(businessSubSampleAnalysisGroupDOList)) {
businessSubSampleAnalysisGroupMapper.insertBatch(businessSubSampleAnalysisGroupDOList);
}
if (CollUtil.isNotEmpty(businessSubSampleAssessmentDOList)) {
businessSubSampleAssessmentMapper.insertBatch(businessSubSampleAssessmentDOList);
}
if (CollUtil.isNotEmpty(businessAssayTaskDataDOList)) {
businessAssayTaskDataMapper.insertBatch(businessAssayTaskDataDOList);
}
if (CollUtil.isNotEmpty(businessAssayProjectDataDOList)) {
businessAssayProjectDataMapper.insertBatch(businessAssayProjectDataDOList);
}
if (CollUtil.isNotEmpty(businessAssayParameterDataDOList)) {
businessAssayParameterDataMapper.insertBatch(businessAssayParameterDataDOList);
}
if (CollUtil.isNotEmpty(businessAssayReportDataDOList)) {
businessAssayReportDataMapper.insertBatch(businessAssayReportDataDOList);
}
}
private void addAssayTask(LocalDateTime currentDateTime, List<ConfigSubSampleMethodDO> configSubSampleMethodList,
List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectList,
List<ConfigAssayMethodProjectParameterDO> configAssayMethodProjectParameterList,
List<DictionaryProjectDO> dictionaryProjectList,
List<BusinessSubParentSampleAssessmentDO> businessSubParentSampleAssessmentDOList,
List<BusinessSubSampleAnalysisGroupDO> businessSubSampleAnalysisGroupDOList,
List<BusinessSubSampleAssessmentDO> businessSubSampleAssessmentDOList,
List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList,
List<BusinessAssayProjectDataDO> businessAssayProjectDataDOList,
List<BusinessAssayParameterDataDO> businessAssayParameterDataDOList, ConfigSubSampleDO configSubSample,
ConfigSampleFlowDO configSampleFlowSub, SampleFlowNode sampleFlowNodeSub,
BusinessSubSampleDO businessSubSampleDO, Long methodId, List<Long> projectIdList) {
BusinessSubSampleAnalysisGroupDO businessSubSampleAnalysisGroupDO;
ConfigAssayMethodDO addAssayTaskConfigAssayMethod = configAssayMethodMapper.selectById(methodId);
Long addAssayTaskAssayDepartmentId = addAssayTaskConfigAssayMethod.getAssayDepartmentId();
@@ -522,11 +716,11 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
businessAssayTaskDataDO.setAssayDepartmentId(addAssayTaskConfigAssayMethod.getAssayDepartmentId());
businessAssayTaskDataDO.setAssayDepartmentName(addAssayTaskConfigAssayMethod.getAssayDepartmentName());
List<ConfigAssayMethodProjectDO> configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(methodId)).collect(Collectors.toList());
List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(methodId)).collect(Collectors.toList());
StringBuilder assayProjectBuilder = new StringBuilder();
for (ConfigAssayMethodProjectDO configAssayMethodProjectDO : configAssayMethodProjectDOList) {
for (ConfigAssayMethodProjectExtendRespVO configAssayMethodProjectDO : configAssayMethodProjectDOList) {
//如果当前分析方法的项目不在当前检测项目中,则跳出循环继续
if (!projectIdList.contains(configAssayMethodProjectDO.getDictionaryProjectId())) {
@@ -566,289 +760,12 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
}
}
if (assayProjectBuilder.length() > 1) {
assayProjectBuilder.delete(assayProjectBuilder.length() - 1 , assayProjectBuilder.length());
}
businessAssayTaskDataDO.setAssayProject(assayProjectBuilder.toString());
businessAssayTaskDataDOList.add(businessAssayTaskDataDO);
}
}
}
}
businessSubSampleAnalysisGroupDO = businessSubSampleAnalysisGroupDOList.stream().filter(f -> f.getBusinessSubSampleId().equals(businessSubSampleDO.getId()) && f.getAssayDepartmentId().equals(configAssayMethodDO.getAssayDepartmentId())).findFirst().orElse(null);
if (businessSubSampleAnalysisGroupDO == null) {
businessSubSampleAnalysisGroupDO = new BusinessSubSampleAnalysisGroupDO();
businessSubSampleAnalysisGroupDO.setId(IdWorker.getId());
businessSubSampleAnalysisGroupDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessSubSampleAnalysisGroupDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubSampleAnalysisGroupDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessSubSampleAnalysisGroupDO.setAssayDepartmentId(configAssayMethodDO.getAssayDepartmentId());
businessSubSampleAnalysisGroupDO.setAssayDepartmentName(configAssayMethodDO.getAssayDepartmentName());
businessSubSampleAnalysisGroupDO.setSampleStatus("待收样");
businessSubSampleAnalysisGroupDOList.add(businessSubSampleAnalysisGroupDO);
}
//根据任务数判断是平行还是
String assayType = configSubSampleMethodDO.getTaskCount() > 1 ? QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL : QmsCommonConstant.ASSAY_TYPE_SINGLE_CUP;
//分样判定数据
BusinessSubParentSampleAssessmentDO businessSubParentSampleAssessmentDO = new BusinessSubParentSampleAssessmentDO();
businessSubParentSampleAssessmentDO.setId(IdWorker.getId());
businessSubParentSampleAssessmentDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubParentSampleAssessmentDO.setConfigAssayMethodId(configAssayMethodId);
businessSubParentSampleAssessmentDO.setAssayType(assayType);
businessSubParentSampleAssessmentDO.setTaskType("常规");
businessSubParentSampleAssessmentDOList.add(businessSubParentSampleAssessmentDO);
//子样判定数据
BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = new BusinessSubSampleAssessmentDO();
businessSubSampleAssessmentDO.setId(IdWorker.getId());
businessSubSampleAssessmentDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessSubSampleAssessmentDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubSampleAssessmentDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessSubSampleAssessmentDO.setBusinessSubParentSampleAssessmentId(businessSubParentSampleAssessmentDO.getId());
businessSubSampleAssessmentDO.setConfigAssayMethodId(configAssayMethodId);
businessSubSampleAssessmentDO.setAssayType(assayType);
businessSubSampleAssessmentDO.setTaskType("常规");
businessSubSampleAssessmentDOList.add(businessSubSampleAssessmentDO);
//根据检测方法循环
BusinessAssayTaskDataDO businessAssayTaskDataDO = null;
//根据任务数循环
for (int i = 0; i < configSubSampleMethodDO.getTaskCount(); i++) {
//子样检测任务
businessAssayTaskDataDO = new BusinessAssayTaskDataDO();
businessAssayTaskDataDO.setId(IdWorker.getId());
businessAssayTaskDataDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessAssayTaskDataDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessAssayTaskDataDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessAssayTaskDataDO.setBusinessSubSampleAssessmentId(businessSubSampleAssessmentDO.getId());
businessAssayTaskDataDO.setConfigAssayMethodId(configAssayMethodId);
businessAssayTaskDataDO.setAssayType(assayType);
businessAssayTaskDataDO.setTaskType("常规");
businessAssayTaskDataDO.setConfigSampleFlowId(configSampleFlowSub.getId());
businessAssayTaskDataDO.setSampleFlowNodeKey(sampleFlowNodeSub.getNodeKey());
businessAssayTaskDataDO.setSampleFlowNodeTime(currentDateTime);
businessAssayTaskDataDO.setAssayDepartmentId(configAssayMethodDO.getAssayDepartmentId());
businessAssayTaskDataDO.setAssayDepartmentName(configAssayMethodDO.getAssayDepartmentName());
List<ConfigAssayMethodProjectDO> configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId)).collect(Collectors.toList());
StringBuilder assayProjectBuilder = new StringBuilder();
for (ConfigAssayMethodProjectDO configAssayMethodProjectDO : configAssayMethodProjectDOList) {
//如果当前分析方法的项目不在当前检测项目中,则跳出循环继续
if (!dictionaryProjectIdList.contains(configAssayMethodProjectDO.getDictionaryProjectId())) {
continue;
}
DictionaryProjectDO dictionaryProject = dictionaryProjectList.stream().filter(f -> f.getId().equals(configAssayMethodProjectDO.getDictionaryProjectId())).findFirst().orElse(null);
assayProjectBuilder.append(dictionaryProject.getShowName()).append(",");
//检测项目
BusinessAssayProjectDataDO businessAssayProjectDataDO = new BusinessAssayProjectDataDO();
businessAssayProjectDataDO.setId(IdWorker.getId());
businessAssayProjectDataDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId());
businessAssayProjectDataDO.setConfigAssayMethodProjectId(configAssayMethodProjectDO.getId());
businessAssayProjectDataDO.setDictionaryProjectId(configAssayMethodProjectDO.getDictionaryProjectId());
businessAssayProjectDataDO.setDataType(configAssayMethodProjectDO.getDataType());
businessAssayProjectDataDO.setDecimalPosition(configAssayMethodProjectDO.getDecimalPosition());
businessAssayProjectDataDO.setUsage(QmsCommonConstant.ASSAY_PROJECT_USAGE_REPORT);
// if (isSjEntrust && isAssayAuAg && sort == 0 && !isCreateZhy && sDictionaryProjectId.equals(configAssayMethodProjectDO.getDictionaryProjectId())) {//是商检样品分析金银第一个样品不创建综合样并且是S值
// businessAssayProjectDataDO.setUsage(QmsCommonConstant.ASSAY_PROJECT_USAGE_INGREDIENT_REPORT);
// }
businessAssayProjectDataDO.setMinimumLimitValue(configAssayMethodProjectDO.getMinimumLimitValue());
businessAssayProjectDataDO.setIsEnabled(1);
businessAssayProjectDataDO.setIsNotAssessment(0);
businessAssayProjectDataDOList.add(businessAssayProjectDataDO);
List<ConfigAssayMethodProjectParameterDO> configAssayMethodProjectParameterDOList = configAssayMethodProjectParameterList.stream().filter(f -> f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectDO.getId())).collect(Collectors.toList());
for (ConfigAssayMethodProjectParameterDO configAssayMethodProjectParameterDO : configAssayMethodProjectParameterDOList) {
BusinessAssayParameterDataDO businessAssayParameterDataDO = new BusinessAssayParameterDataDO();
businessAssayParameterDataDO.setId(IdWorker.getId());
businessAssayParameterDataDO.setConfigAssayMethodProjectParameterId(configAssayMethodProjectParameterDO.getId());
businessAssayParameterDataDO.setBusinessAssayProjectDataId(businessAssayProjectDataDO.getId());
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
}
}
assayProjectBuilder.delete(assayProjectBuilder.length() - 1 , assayProjectBuilder.length());
businessAssayTaskDataDO.setAssayProject(assayProjectBuilder.toString());
businessAssayTaskDataDOList.add(businessAssayTaskDataDO);
}
}
/**
//判定是商检 分析金银 需要创建综合样样品为第1个
if (isSjEntrust && isAssayAuAg && sort == 0 && isCreateZhy && configAssayMethodZhy != null) {
Long configAssayMethodIdZhy = configAssayMethodZhy.getId();
Long assayDepartmentIdZhy = configAssayMethodZhy.getAssayDepartmentId();
//查询子样对应的分析方法
ConfigSubSampleMethodDO configSubSampleMethodDO = configSubSampleMethodList.stream().filter(f -> f.getIsDefaultUse().equals(QmsCommonConstant.YES) && f.getConfigAssayMethodId().equals(configAssayMethodIdZhy) && f.getConfigSubSampleId().equals(configSubSample.getId())).findFirst().orElse(null);
businessSubSampleAnalysisGroupDO = businessSubSampleAnalysisGroupDOList.stream().filter(f -> f.getBusinessSubSampleId().equals(businessSubSampleDO.getId()) && f.getAssayDepartmentId().equals(assayDepartmentIdZhy)).findFirst().orElse(null);
if (businessSubSampleAnalysisGroupDO == null) {
businessSubSampleAnalysisGroupDO = new BusinessSubSampleAnalysisGroupDO();
businessSubSampleAnalysisGroupDO.setId(IdWorker.getId());
businessSubSampleAnalysisGroupDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessSubSampleAnalysisGroupDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubSampleAnalysisGroupDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessSubSampleAnalysisGroupDO.setAssayDepartmentId(configAssayMethodZhy.getAssayDepartmentId());
businessSubSampleAnalysisGroupDO.setAssayDepartmentName(configAssayMethodZhy.getAssayDepartmentName());
businessSubSampleAnalysisGroupDO.setSampleStatus("待收样");
businessSubSampleAnalysisGroupDOList.add(businessSubSampleAnalysisGroupDO);
}
//根据任务数判断是平行还是
String assayType = configSubSampleMethodDO.getTaskCount() > 1 ? QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL : QmsCommonConstant.ASSAY_TYPE_SINGLE_CUP;
//分样判定数据
BusinessSubParentSampleAssessmentDO businessSubParentSampleAssessmentDO = new BusinessSubParentSampleAssessmentDO();
businessSubParentSampleAssessmentDO.setId(IdWorker.getId());
businessSubParentSampleAssessmentDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubParentSampleAssessmentDO.setConfigAssayMethodId(configAssayMethodZhy.getId());
businessSubParentSampleAssessmentDO.setAssayType(assayType);
businessSubParentSampleAssessmentDO.setTaskType("常规");
businessSubParentSampleAssessmentDOList.add(businessSubParentSampleAssessmentDO);
//子样判定数据
BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = new BusinessSubSampleAssessmentDO();
businessSubSampleAssessmentDO.setId(IdWorker.getId());
businessSubSampleAssessmentDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessSubSampleAssessmentDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessSubSampleAssessmentDO.setBusinessSubParentSampleAssessmentId(businessSubParentSampleAssessmentDO.getId());
businessSubSampleAssessmentDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessSubSampleAssessmentDO.setConfigAssayMethodId(configAssayMethodZhy.getId());
businessSubSampleAssessmentDO.setAssayType(assayType);
businessSubSampleAssessmentDO.setTaskType("常规");
businessSubSampleAssessmentDOList.add(businessSubSampleAssessmentDO);
//根据检测方法循环
BusinessAssayTaskDataDO businessAssayTaskDataDO = null;
//根据任务数循环
for (int i = 0; i < configSubSampleMethodDO.getTaskCount(); i++) {
//子样检测任务
businessAssayTaskDataDO = new BusinessAssayTaskDataDO();
businessAssayTaskDataDO.setId(IdWorker.getId());
businessAssayTaskDataDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessAssayTaskDataDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessAssayTaskDataDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessAssayTaskDataDO.setBusinessSubSampleAssessmentId(businessSubSampleAssessmentDO.getId());//子样判定id
businessAssayTaskDataDO.setConfigAssayMethodId(configAssayMethodZhy.getId());
businessAssayTaskDataDO.setAssayType(assayType);
businessAssayTaskDataDO.setTaskType("常规");
businessAssayTaskDataDO.setConfigSampleFlowId(configSampleFlowSub.getId());
businessAssayTaskDataDO.setSampleFlowNodeKey(sampleFlowNodeSub.getNodeKey());
businessAssayTaskDataDO.setSampleFlowNodeTime(currentDateTime);
businessAssayTaskDataDO.setAssayDepartmentId(configAssayMethodZhy.getAssayDepartmentId());
businessAssayTaskDataDO.setAssayDepartmentName(configAssayMethodZhy.getAssayDepartmentName());
//查询S检测项目
ConfigAssayMethodProjectDO configAssayMethodProjectDO = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodIdZhy) && f.getDictionaryProjectId().equals(sDictionaryProjectId)).findFirst().orElse(null);
//检测项目
BusinessAssayProjectDataDO businessAssayProjectDataDO = new BusinessAssayProjectDataDO();
businessAssayProjectDataDO.setId(IdWorker.getId());
businessAssayProjectDataDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId());
businessAssayProjectDataDO.setConfigAssayMethodProjectId(configAssayMethodProjectDO.getId());
businessAssayProjectDataDO.setDictionaryProjectId(configAssayMethodProjectDO.getDictionaryProjectId());
businessAssayProjectDataDO.setDataType(configAssayMethodProjectDO.getDataType());
businessAssayProjectDataDO.setDecimalPosition(configAssayMethodProjectDO.getDecimalPosition());
businessAssayProjectDataDO.setUsage(QmsCommonConstant.ASSAY_PROJECT_USAGE_INGREDIENT);
businessAssayProjectDataDO.setMinimumLimitValue(configAssayMethodProjectDO.getMinimumLimitValue());
businessAssayProjectDataDO.setIsEnabled(1);
businessAssayProjectDataDO.setIsNotAssessment(0);
businessAssayProjectDataDOList.add(businessAssayProjectDataDO);
List<ConfigAssayMethodProjectParameterDO> configAssayMethodProjectParameterDOList = configAssayMethodProjectParameterList.stream().filter(f -> f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectDO.getId())).collect(Collectors.toList());
for (ConfigAssayMethodProjectParameterDO configAssayMethodProjectParameterDO : configAssayMethodProjectParameterDOList) {
BusinessAssayParameterDataDO businessAssayParameterDataDO = new BusinessAssayParameterDataDO();
businessAssayParameterDataDO.setId(IdWorker.getId());
businessAssayParameterDataDO.setConfigAssayMethodProjectParameterId(configAssayMethodProjectParameterDO.getId());
businessAssayParameterDataDO.setBusinessAssayProjectDataId(businessAssayProjectDataDO.getId());
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
}
businessAssayTaskDataDO.setAssayProject("S");
businessAssayTaskDataDOList.add(businessAssayTaskDataDO);
}
}
**/
sort++;
}
sampleEntrustRegistration.setRegistrationStatus(QmsCommonConstant.SUBMITTED);
sampleEntrustContext.setSampleFlowInfoList(sampleFlowInfoList);
businessSampleEntrustRegistrationMapper.updateById(sampleEntrustRegistration);
if (CollUtil.isNotEmpty(sampleEntrustDetailList)) {
businessSampleEntrustDetailMapper.updateBatch(sampleEntrustDetailList);
}
if (CollUtil.isNotEmpty(sampleEntrustProjectList)) {
businessSampleEntrustProjectMapper.updateBatch(sampleEntrustProjectList);
}
if (CollUtil.isNotEmpty(sampleAssayResultList)) {
businessSampleAssayResultMapper.updateBatch(sampleAssayResultList);
}
if (CollUtil.isNotEmpty(businessBaseSampleDOList)) {
businessBaseSampleMapper.insertBatch(businessBaseSampleDOList);
}
if (CollUtil.isNotEmpty(businessSubParentSampleDOList)) {
businessSubParentSampleMapper.insertBatch(businessSubParentSampleDOList);
}
if (CollUtil.isNotEmpty(businessSubParentSampleAssessmentDOList)) {
businessSubParentSampleAssessmentMapper.insertBatch(businessSubParentSampleAssessmentDOList);
}
if (CollUtil.isNotEmpty(businessSubSampleDOList)) {
businessSubSampleMapper.insertBatch(businessSubSampleDOList);
}
if (CollUtil.isNotEmpty(businessSubSampleAnalysisGroupDOList)) {
businessSubSampleAnalysisGroupMapper.insertBatch(businessSubSampleAnalysisGroupDOList);
}
if (CollUtil.isNotEmpty(businessSubSampleAssessmentDOList)) {
businessSubSampleAssessmentMapper.insertBatch(businessSubSampleAssessmentDOList);
}
if (CollUtil.isNotEmpty(businessAssayTaskDataDOList)) {
businessAssayTaskDataMapper.insertBatch(businessAssayTaskDataDOList);
}
if (CollUtil.isNotEmpty(businessAssayProjectDataDOList)) {
businessAssayProjectDataMapper.insertBatch(businessAssayProjectDataDOList);
}
if (CollUtil.isNotEmpty(businessAssayParameterDataDOList)) {
businessAssayParameterDataMapper.insertBatch(businessAssayParameterDataDOList);
}
if (CollUtil.isNotEmpty(businessAssayReportDataDOList)) {
businessAssayReportDataMapper.insertBatch(businessAssayReportDataDOList);
}
}
}

View File

@@ -92,7 +92,7 @@ public class SampleSubProcessUpdateCmp extends NodeComponent {
DefaultContext<String, Object> context = new DefaultContext<>();
ConfigSubSampleDO configSubSample = sampleFlowContext.getConfigSubSampleById(businessSubSample.getConfigSubSampleId());
Boolean hasSubSimpleCodeRule = configSubSample != null && StringUtils.isNotBlank(configSubSample.getSimpleCodeRule());
Boolean hasSubSampleEncrypt = businessHandoverRecordSubDOList.stream().anyMatch(m -> QmsCommonConstant.FlOW_NODE_SAMPLE_ENCRYPT.equals(m.getSampleFlowNodeKey()));
Boolean hasSubSampleEncrypt = businessHandoverRecordSubDOList.stream().filter(f -> f.getBusinessSubSampleId().equals(businessSubSample.getId())).anyMatch(m -> QmsCommonConstant.FlOW_NODE_SAMPLE_ENCRYPT.equals(m.getSampleFlowNodeKey()));
if (CollUtil.isNotEmpty(businessSubSampleAnalysisGroupDOList)) {
List<BusinessSubSampleAnalysisGroupDO> curSubSampleAnalysisGroupDOList = businessSubSampleAnalysisGroupDOList.stream().filter(f -> f.getBusinessSubSampleId().equals(businessSubSample.getId())).collect(Collectors.toList());
@@ -140,6 +140,16 @@ public class SampleSubProcessUpdateCmp extends NodeComponent {
}
sampleFlowContext.setBusinessSubSampleAnalysisGroupList(curDeptSubSampleAnalysisGroupDOList);
}
//如果是班组送样,需要更新分析班组表
if (QmsCommonConstant.FLOW_NODE_ANALYSIS_SEND.equals(currentSampleFlowKey)) {
List<BusinessSubSampleAnalysisGroupDO> curDeptSubSampleAnalysisGroupDOList = businessSubSampleAnalysisGroupDOList.stream().filter(f -> f.getAssayDepartmentId().equals(loginUser.getVisitDeptId())).collect(Collectors.toList());
for (BusinessSubSampleAnalysisGroupDO businessSubSampleAnalysisGroupDO : curDeptSubSampleAnalysisGroupDOList) {
businessSubSampleAnalysisGroupDO.setIsSend(QmsCommonConstant.YES);
}
sampleFlowContext.setBusinessSubSampleAnalysisGroupList(curDeptSubSampleAnalysisGroupDOList);
}
}
}

View File

@@ -19,6 +19,8 @@ import com.zt.plat.framework.common.pojo.PageParam;
*/
public interface BusinessSampleEntrustRegistrationService {
/**
* 创建委检登记业务
*
@@ -56,6 +58,8 @@ public interface BusinessSampleEntrustRegistrationService {
*/
BusinessSampleEntrustRegistrationDO getBusinessSampleEntrustRegistration(Long id);
List<BusinessSampleEntrustRegistrationDO> listByIds(List<Long> ids);
/**
* 获得委检登记业务分页
*

View File

@@ -89,6 +89,11 @@ public class BusinessSampleEntrustRegistrationServiceImpl implements BusinessSam
return businessSampleEntrustRegistrationMapper.selectById(id);
}
@Override
public List<BusinessSampleEntrustRegistrationDO> listByIds(List<Long> ids) {
return businessSampleEntrustRegistrationMapper.selectByIds(ids);
}
@Override
public PageResult<BusinessSampleEntrustRegistrationExtendRespVO> getBusinessSampleEntrustRegistrationPage(BusinessSampleEntrustRegistrationPageReqVO pageReqVO) {
return businessSampleEntrustRegistrationMapper.selectPage(pageReqVO);

View File

@@ -242,6 +242,9 @@ public class BusinessSubSampleServiceImpl implements BusinessSubSampleService {
BusinessSubSampleExtendRespVO subSample = null;
if (QmsCommonConstant.FLOW_NODE_TEAM_RECEIVE.equals(reqVO.getSampleFlowNodeKey())) {
subSample = businessSubSampleMapper.getBySampleCode(reqVO);
if (subSample == null) {
return subSample;
}
List<BusinessSubSampleAnalysisGroupDO> businessSubSampleAnalysisGroupList = businessSubSampleAnalysisGroupMapper.selectByBusinessSubSampleId(subSample.getId());
BusinessSubSampleAnalysisGroupDO receiveSample = businessSubSampleAnalysisGroupList.stream().filter(f -> "已收样".equals(f.getSampleStatus()) && !f.getAssayDepartmentId().equals(loginUser.getVisitDeptId())).findFirst().orElse(null);
if (receiveSample != null) {

View File

@@ -3,6 +3,7 @@ package com.zt.plat.module.qms.business.bus.service;
import java.util.List;
import com.alibaba.fastjson2.JSONObject;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDataReqVO;
/**
* <b>SampleAnalysisAuditService</b>
@@ -13,7 +14,7 @@ public interface SampleAnalysisAuditService {
void crossAuditByByTaskId(Long businessAssayTaskId, String auditStatus);
JSONObject getSampleResultAssessmentList(Long configAssayMethodId, String asmtReportedStatus);
JSONObject getSampleResultAssessmentList(BusinessAssayTaskDataReqVO reqVO);
JSONObject getParallelResultAssessment(Long businessSubSampleId, Long configAssayMethodId);

View File

@@ -152,7 +152,9 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
private ConfigSubSampleMethodMapper configSubSampleMethodMapper;
@Override
public JSONObject getSampleResultAssessmentList(Long configAssayMethodId, String asmtReportedStatus) {
public JSONObject getSampleResultAssessmentList(BusinessAssayTaskDataReqVO reqVO) {
Long configAssayMethodId = reqVO.getConfigAssayMethodId();
String asmtReportedStatus = reqVO.getAsmtReportedStatus();
List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectDOList = configAssayMethodProjectMapper.selectByConfigAssayMethodId(configAssayMethodId);
List<Map<String, Object>> columnList = new ArrayList<>();
@@ -173,6 +175,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
BusinessAssayTaskDataReqVO search = new BusinessAssayTaskDataReqVO();
search.setConfigAssayMethodId(configAssayMethodId);
search.setAsmtReportedStatus(asmtReportedStatus);
search.setSampleReceiveTime(reqVO.getSampleReceiveTime());
List<BusinessAssayTaskDataExtendRespVO> resultAssessmentList = businessAssayTaskDataMapper.selectResultAssessmentList(search);
for (BusinessAssayTaskDataExtendRespVO businessAssayTaskDataExtendRespVO : resultAssessmentList) {
@@ -327,6 +330,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
map.put("sampleCode", businessAssayTaskDetailDO.getSampleCode());
map.put("sampleName", businessAssayTaskDetailDO.getSampleName());
map.put("analysisType", "analysis");
map.put("assayTime", businessAssayTaskJson.get("assayTime"));
BusinessAssayProjectDataReqVO projectDataSearch2 = new BusinessAssayProjectDataReqVO();
projectDataSearch2.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId());
@@ -362,6 +366,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
map.put("sampleCode", businessQCManagementData.getSampleCode());
map.put("sampleName", businessQCManagementData.getSampleName());
map.put("analysisType", businessQCManagementData.getDictionaryBusinessKey());
map.put("assayTime", businessAssayTaskJson.get("assayTime"));
BusinessQCManagementProjectDataReqVO projectDataSearch2 = new BusinessQCManagementProjectDataReqVO();
projectDataSearch2.setBusinessQCManagementDataId(businessQCManagementData.getId());
@@ -395,6 +400,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
map.put("sampleCode", businessQCCoefficientData.getSampleCode());
map.put("sampleName", businessQCCoefficientData.getSampleName());
map.put("analysisType", businessQCCoefficientData.getDictionaryBusinessKey());
map.put("assayTime", businessAssayTaskJson.get("assayTime"));
BusinessQCCoefficientParameterDataReqVO parameterDataSearch2 = new BusinessQCCoefficientParameterDataReqVO();
parameterDataSearch2.setBusinessQCCoefficientDataId(businessQCCoefficientData.getId());
@@ -436,8 +442,8 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
BusinessAssayTaskDO businessAssayTaskDO = businessAssayTaskMapper.selectById(businessAssayTaskId);
if (QmsCommonConstant.APPROVE.equals(auditStatus)) {
businessAssayTaskDO.setFinishStatus(QmsCommonConstant.APPROVED);
businessAssayTaskDO.setFlowStatus(QmsCommonConstant.APPROVED);
businessAssayTaskDO.setFinishStatus(QmsCommonConstant.COMPLETED);
businessAssayTaskDO.setFlowStatus(QmsCommonConstant.COMPLETED);
businessAssayTaskDO.setReportTime(LocalDateTime.now());
businessAssayTaskDO.setReportOperator(SecurityFrameworkUtils.getLoginUserNickname());
businessAssayTaskDO.setReportOperatorId(SecurityFrameworkUtils.getLoginUserId());
@@ -640,8 +646,9 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
} else {
businessAssayTaskDO.setTaskAssayStatus(QmsCommonConstant.SAVED);
businessAssayTaskDO.setFinishStatus(QmsCommonConstant.PENDING);
businessAssayTaskDO.setFlowStatus(QmsCommonConstant.NOT_START);
businessAssayTaskDO.setFlowStatus(QmsCommonConstant.RETURNED);
}
businessAssayTaskMapper.updateById(businessAssayTaskDO);

View File

@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.common.util.object.BeanUtils;
@@ -71,10 +72,12 @@ import com.zt.plat.module.qms.business.config.controller.vo.ConfigQCSampleMethod
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfInfo;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfItem;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfPoint;
import com.zt.plat.module.qms.business.config.dal.dataobject.BaseSampleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectCoefficientDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectRangeDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleMethodDO;
import com.zt.plat.module.qms.business.config.dal.mapper.BaseSampleMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectCoefficientMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectRangeMapper;
@@ -142,6 +145,9 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
@Resource
private BusinessSampleEntrustDetailMapper businessSampleEntrustDetailMapper;
@Resource
private BaseSampleMapper baseSampleMapper;
@Resource
private BusinessSubParentSampleMapper businessSubParentSampleMapper;
@@ -152,6 +158,7 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
private DataCollectionService dataCollectionService;
@Override
@Transactional(rollbackFor = Exception.class)
public BusinessAssayTaskAnalysisSampleProjectRespVO batchSampleAnalysisByTaskId(Long businessAssayTaskId) {
BusinessAssayTaskAnalysisSampleProjectRespVO businessAssayTaskAnalysisSampleProjectRespVO = new BusinessAssayTaskAnalysisSampleProjectRespVO();
BusinessAssayTaskDO businessAssayTaskDO = businessAssayTaskMapper.selectById(businessAssayTaskId);
@@ -177,17 +184,27 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
List<BatchSampleAnalysisColumnRespVO> cloumns = new ArrayList<>();
cloumns.add(new BatchSampleAnalysisColumnRespVO("sampleCode", "sampleCode", "样品编号", "200px", "200px", "string", null, null, null, null, false, null, null, null, null, null, null));
cloumns.add(new BatchSampleAnalysisColumnRespVO("sampleName", "sampleName", "样品名称", "200px", "200px", "string", null, null, null, null, false, null, null, null, null, null, null));
//cloumns.add(new BatchSampleAnalysisColumnRespVO("cupNumber", "cupNumber", "杯号", "200px", "200px", "string", null, null, null, null, true, null));
List<BusinessAssayTaskDetailDO> businessAssayTaskDetailList = businessAssayTaskDetailMapper.selectList(new LambdaQueryWrapperX<BusinessAssayTaskDetailDO>().eq(BusinessAssayTaskDetailDO::getBusinessAssayTaskId, businessAssayTaskId));
List<BusinessAssayTaskDataDO> businessAssayTaskDataList = businessAssayTaskDataMapper.selectList(new LambdaQueryWrapperX<BusinessAssayTaskDataDO>().eq(BusinessAssayTaskDataDO::getBusinessAssayTaskId, businessAssayTaskId).eq(BusinessAssayTaskDataDO::getConfigAssayMethodId, businessAssayTaskDO.getConfigAssayMethodId()));
List<Long> businessAssayTaskDataIdList = businessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList());
//BusinessAssayTaskDataDO businessAssayTaskData = businessAssayTaskDataList.get(0);
//子样Id列表
List<Long> businessSubSampleIdList = businessAssayTaskDataList.stream().map(m -> m.getBusinessSubSampleId()).distinct().collect(Collectors.toList());
//子样列表
List<BusinessSubSampleDO> businessSubSampleDOList = businessSubSampleMapper.selectByIds(businessSubSampleIdList);
//子样配置id列表
List<Long> configSubSampleIdList = businessSubSampleDOList.stream().map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList());
//子样方法配置列表
List<ConfigSubSampleMethodDO> configSubSampleMethodDOList = configSubSampleMethodMapper.selectByConfigSubSampleIdsAndConfigAssayMethodId(configSubSampleIdList, businessAssayTaskDO.getConfigAssayMethodId());
BusinessAssayProjectDataReqVO projectDataSearch = new BusinessAssayProjectDataReqVO();
// projectDataSearch.setBusinessAssayTaskDataId(businessAssayTaskData.getId());
projectDataSearch.setBusinessAssayTaskDataIdList(businessAssayTaskDataIdList);
List<BusinessAssayProjectAndParameterRespVO> projectAndParameterList = businessAssayProjectDataMapper.selectProjectAndParameterBy(projectDataSearch);
@@ -215,24 +232,6 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
}
}
// for (BusinessAssayProjectAndParameterRespVO ep : projectAndParameterList) {
// String fieldIndex = "e" + ep.getDicId();
// String title = ep.getShowName() + (StringUtils.isBlank(ep.getUnit()) ? "" : "(" + ep.getUnit() + ")");
// boolean isEdit = StringUtils.isBlank(ep.getFormula());
// cloumns.add(new BatchSampleAnalysisColumnRespVO(fieldIndex, fieldIndex + ".value", title, "", "120px", ep.getDataType(), ep.getDecimalPosition(), null, ep.getFormula(), ep.getParamNo(), isEdit, ep.getUnit(), "project", ep.getFillingWay(), ep.getGroupDictionaryBusinessId(), ep.getGroupDictionaryBusinessKey(), ep.getGroupDictionaryBusinessName()));
//
// if (StringUtils.isNotEmpty(ep.getFormula())) {
// BusinessAssayParameterDataReqVO parameterDataSearch = new BusinessAssayParameterDataReqVO();
// parameterDataSearch.setBusinessAssayProjectDataId(ep.getId());
// List<BusinessAssayProjectAndParameterRespVO> plist = businessAssayParameterDataMapper.selectProjectAndParameterBy(parameterDataSearch);
// for (BusinessAssayProjectAndParameterRespVO p : plist) {
// fieldIndex = "p" + p.getDicId();
// title = p.getShowName() + (StringUtils.isBlank(p.getUnit()) ? "" : "(" + p.getUnit() + ")");
// isEdit = StringUtils.isBlank(p.getFormula());
// cloumns.add(new BatchSampleAnalysisColumnRespVO(fieldIndex, fieldIndex + ".value", title, "", "120px", p.getDataType(), p.getDecimalPosition(), null, p.getFormula(), p.getParamNo(), isEdit, p.getUnit(), "parameter", p.getFillingWay(), p.getGroupDictionaryBusinessId(), p.getGroupDictionaryBusinessKey(), p.getGroupDictionaryBusinessName()));
// }
// }
// }
businessAssayTaskAnalysisSampleProjectRespVO.setColumns(cloumns);
@@ -241,6 +240,91 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
for (BusinessAssayTaskDataDO businessAssayTaskDataDO : businessAssayTaskDataList) {
BusinessAssayTaskDetailDO businessAssayTaskDetailDO = businessAssayTaskDetailList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskDataDO.getId())).findFirst().orElse(null);
BusinessSubSampleDO businessSubSampleDO = businessSubSampleDOList.stream().filter(f -> f.getId().equals(businessAssayTaskDataDO.getBusinessSubSampleId())).findFirst().orElse(null);
ConfigSubSampleMethodDO configSubSampleMethodDO = configSubSampleMethodDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(businessAssayTaskDataDO.getConfigAssayMethodId()) && f.getConfigSubSampleId().equals(businessSubSampleDO.getConfigSubSampleId())).findFirst().orElse(null);
String configInfomation = configSubSampleMethodDO.getConfigInfomation();
if (StringUtils.isNotBlank(configInfomation)) {
ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class);
List<ConfigSubSampleMethodConfItem> getParamList = configSubSampleMethodConfInfo.getGetParam();
for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem: getParamList) {
//Boolean required = configSubSampleMethodConfItem.getRequired();//是否必须
ConfigSubSampleMethodConfPoint source = configSubSampleMethodConfItem.getSource();//来源
Long configMethodId = source.getMethodId();
String sourceProject = source.getProject();
//String sourceParameter = source.getParameter();
ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget();//目标
String targetProject = target.getProject();
String targetParameter = target.getParameter();
BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(businessAssayTaskDataDO.getId(), targetProject, targetParameter);
if (StringUtils.isBlank(businessAssayParameterDataDO.getValue())) {
//1 查询委托明细
BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectByBusinessBaseSampleId(businessAssayTaskDataDO.getBusinessBaseSampleId());
//2 查询样品大类
BaseSampleDO baseSampleDO = baseSampleMapper.selectById(businessSampleEntrustDetailDO.getBaseSampleId());
//3 判断样品大类类型
if (QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是商检分析样
//查询当前批次的第一个商检分析样
BusinessSampleEntrustDetailDO currBatchFirstBusinessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectCurrBatchFirstByBusinessBaseSampleIdAndBaseSampleDictionaryBusinessKey(businessAssayTaskDataDO.getBusinessBaseSampleId(), QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE);
List<BusinessSubParentSampleDO> currBusinessSubParentSampleDOList = businessSubParentSampleMapper.selectByBusinessBaseSampleId(currBatchFirstBusinessSampleEntrustDetailDO.getBusinessBaseSampleId());
List<Long> currBusinessSubParentSampleIdList = currBusinessSubParentSampleDOList.stream().map(m -> m.getId()).collect(Collectors.toList());
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(currBusinessSubParentSampleIdList, configMethodId);
BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null);
if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) {
businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue());
}
} else if (QmsCommonConstant.ENTRUST_COMPREHENSIVE_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是商检综合样
//查询当前样品的其他分析方法的结果
List<Long> businessSubParentSampleIdList = Arrays.asList(businessAssayTaskDataDO.getBusinessSubParentSampleId());
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configMethodId);
BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null);
if (businessSubParentSampleAssessmentProject == null || StringUtils.isBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) {
businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue());
}
} else if (QmsCommonConstant.ENTRUST_COMMISSION_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是委检样
//查询来样品位
Boolean isForecastS = false;
String forecastValue = null;
String forecastResult = businessSampleEntrustDetailDO.getForecastResult();
if (StringUtils.isNotBlank(forecastResult)) {
JSONArray array = JSON.parseArray(forecastResult);
for (int i = 0; i < array.size(); i++) {
JSONObject item = array.getJSONObject(i);
if ("S".equals(item.getString("simpleName"))) {
isForecastS = true;
break;
}
}
for (int i = 0; i < array.size(); i++) {
JSONObject item = array.getJSONObject(i);
if (sourceProject.equals(item.getString("simpleName"))) {
forecastValue = item.getString("value");
break;
}
}
}
if (isForecastS) {//来样品位存在S值 则取预报的值
businessAssayParameterDataDO.setValue(forecastValue);
} else {
//查询当前样品的其他方法的结果
List<Long> businessSubParentSampleIdList = Arrays.asList(businessAssayTaskDataDO.getBusinessSubParentSampleId());
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configMethodId);
BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null);
if (businessSubParentSampleAssessmentProject == null || StringUtils.isBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) {
businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue());
}
}
}
businessAssayParameterDataMapper.updateById(businessAssayParameterDataDO);
}
}
}
Map<String, Object> map = new HashedMap<>();
map.put("businessAssayTaskDataId", businessAssayTaskDataDO.getId());
map.put("businessAssayTaskId", businessAssayTaskDataDO.getBusinessAssayTaskId());
@@ -405,6 +489,7 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public BusinessAssayTaskAnalysisSampleAndQcProjectRespVO batchSampleAndQcAnalysisByTaskId(Long businessAssayTaskId) {
BusinessAssayTaskAnalysisSampleAndQcProjectRespVO businessAssayTaskAnalysisSampleAndQcProjectRespVO = new BusinessAssayTaskAnalysisSampleAndQcProjectRespVO();
BusinessAssayTaskDO businessAssayTaskDO = businessAssayTaskMapper.selectById(businessAssayTaskId);
@@ -438,9 +523,6 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
businessAssayTaskAnalysisSampleAndQcProjectRespVO.setAssayTaskAnalysisDataList(assayTaskAnalysisDataList);
// List<ConfigQCSampleMethodExtendRespVO> configQCSampleMethodList = configQCSampleMethodMapper.selectByConfigAssayMethodId(businessAssayTaskDO.getConfigAssayMethodId());
// businessAssayTaskAnalysisSampleAndQcProjectRespVO.setConfigQCSampleMethodList(configQCSampleMethodList);
//查询区间范围
List<ConfigAssayMethodProjectRangeDO> configAssayMethodProjectRangeDOList = configAssayMethodProjectRangeMapper.selectList(new LambdaQueryWrapperX<ConfigAssayMethodProjectRangeDO>().eq(ConfigAssayMethodProjectRangeDO::getConfigAssayMethodId, businessAssayTaskDO.getConfigAssayMethodId()));
businessAssayTaskAnalysisSampleAndQcProjectRespVO.setConfigAssayMethodProjectRangeList(BeanUtils.toBean(configAssayMethodProjectRangeDOList, ConfigAssayMethodProjectRangeRespVO.class));
@@ -463,8 +545,6 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
List<BatchSampleAnalysisColumnRespVO> cloumns = new ArrayList<>();
cloumns.add(new BatchSampleAnalysisColumnRespVO("sampleCode", "sampleCode", "样品编号", "200px", "200px", "string", null, null, null, null, false, null, null, null, null, null, null));
cloumns.add(new BatchSampleAnalysisColumnRespVO("sampleName", "sampleName", "样品名称", "200px", "200px", "string", null, null, null, null, false, null, null, null, null, null, null));
//cloumns.add(new BatchSampleAnalysisColumnRespVO("cupNumber", "cupNumber", "杯号", "200px", "200px", "string", null, null, null, null, true, null));
List<BusinessAssayTaskDetailDO> businessAssayTaskDetailList = businessAssayTaskDetailMapper.selectList(new LambdaQueryWrapperX<BusinessAssayTaskDetailDO>().eq(BusinessAssayTaskDetailDO::getBusinessAssayTaskId, businessAssayTaskDO.getId()));
List<BusinessAssayTaskDataDO> businessAssayTaskDataList = businessAssayTaskDataMapper.selectList(new LambdaQueryWrapperX<BusinessAssayTaskDataDO>().eq(BusinessAssayTaskDataDO::getBusinessAssayTaskId, businessAssayTaskDO.getId()).eq(BusinessAssayTaskDataDO::getConfigAssayMethodId, businessAssayTaskDO.getConfigAssayMethodId()));
@@ -482,10 +562,8 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
List<Long> businessAssayTaskDataIdList = businessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList());
// BusinessAssayTaskDataDO businessAssayTaskData = businessAssayTaskDataList.get(0);
BusinessAssayProjectDataReqVO projectDataSearch = new BusinessAssayProjectDataReqVO();
// projectDataSearch.setBusinessAssayTaskDataId(businessAssayTaskData.getId());
projectDataSearch.setBusinessAssayTaskDataIdList(businessAssayTaskDataIdList);
List<BusinessAssayProjectAndParameterRespVO> projectAndParameterList = businessAssayProjectDataMapper.selectProjectAndParameterBy(projectDataSearch);
Map<Long, List<BusinessAssayProjectAndParameterRespVO>> projectAndParameterMap = projectAndParameterList.stream().sorted(Comparator.comparing(BusinessAssayProjectAndParameterRespVO::getParamNo)).collect(Collectors.groupingBy(BusinessAssayProjectAndParameterRespVO::getDicId,
@@ -511,24 +589,7 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
}
}
}
// for (BusinessAssayProjectAndParameterRespVO ep : projectAndParameterList) {
// String fieldIndex = "e" + ep.getDicId();
// String title = ep.getShowName() + (StringUtils.isBlank(ep.getUnit()) ? "" : "(" + ep.getUnit() + ")");
// boolean isEdit = StringUtils.isBlank(ep.getFormula());
// cloumns.add(new BatchSampleAnalysisColumnRespVO(fieldIndex, fieldIndex + ".value", title, "", "120px", ep.getDataType(), ep.getDecimalPosition(), null, ep.getFormula(), ep.getParamNo(), isEdit, ep.getUnit(), "project", ep.getFillingWay(), ep.getGroupDictionaryBusinessId(), ep.getGroupDictionaryBusinessKey(), ep.getGroupDictionaryBusinessName()));
//
// if (StringUtils.isNotEmpty(ep.getFormula())) {
// BusinessAssayParameterDataReqVO parameterDataSearch = new BusinessAssayParameterDataReqVO();
// parameterDataSearch.setBusinessAssayProjectDataId(ep.getId());
// List<BusinessAssayProjectAndParameterRespVO> plist = businessAssayParameterDataMapper.selectProjectAndParameterBy(parameterDataSearch);
// for (BusinessAssayProjectAndParameterRespVO p : plist) {
// fieldIndex = "p" + p.getDicId();
// title = p.getShowName() + (StringUtils.isBlank(p.getUnit()) ? "" : "(" + p.getUnit() + ")");
// isEdit = StringUtils.isBlank(p.getFormula());
// cloumns.add(new BatchSampleAnalysisColumnRespVO(fieldIndex, fieldIndex + ".value", title, "", "120px", p.getDataType(), p.getDecimalPosition(), null, p.getFormula(), p.getParamNo(), isEdit, p.getUnit(), "parameter", p.getFillingWay(), p.getGroupDictionaryBusinessId(), p.getGroupDictionaryBusinessKey(), p.getGroupDictionaryBusinessName()));
// }
// }
// }
businessAssayTaskAnalysisDataRespVO.setColumns(cloumns);
@@ -557,18 +618,14 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(businessAssayTaskDataDO.getId(), targetProject, targetParameter);
if (StringUtils.isBlank(businessAssayParameterDataDO.getValue())) {
//1 查询来源品位
//1 查询委托明细
BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectByBusinessBaseSampleId(businessAssayTaskDataDO.getBusinessBaseSampleId());
String forecastResult = businessSampleEntrustDetailDO.getForecastResult();//预报品位
if (StringUtils.isBlank(forecastResult)) {
//2 查询当前样品其他分析方法的结果 (废弃-20251202)
// List<Long> businessSubParentSampleIdList = Arrays.asList(businessAssayTaskDataDO.getBusinessSubParentSampleId());
// List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configMethodId);
// BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null);
// if (businessSubParentSampleAssessmentProject == null || StringUtils.isBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) {
//3 查询当前批次委托的第一个样品对应的分析方法的结果
BusinessSampleEntrustDetailDO currBatchFirstBusinessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectCurrBatchFirstByBusinessBaseSampleId(businessAssayTaskDataDO.getBusinessBaseSampleId());
//2 查询样品大类
BaseSampleDO baseSampleDO = baseSampleMapper.selectById(businessSampleEntrustDetailDO.getBaseSampleId());
//3 判断样品大类类型
if (QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是商检分析样
//查询当前批次的第一个商检分析样
BusinessSampleEntrustDetailDO currBatchFirstBusinessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectCurrBatchFirstByBusinessBaseSampleIdAndBaseSampleDictionaryBusinessKey(businessAssayTaskDataDO.getBusinessBaseSampleId(), QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE);
List<BusinessSubParentSampleDO> currBusinessSubParentSampleDOList = businessSubParentSampleMapper.selectByBusinessBaseSampleId(currBatchFirstBusinessSampleEntrustDetailDO.getBusinessBaseSampleId());
List<Long> currBusinessSubParentSampleIdList = currBusinessSubParentSampleDOList.stream().map(m -> m.getId()).collect(Collectors.toList());
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(currBusinessSubParentSampleIdList, configMethodId);
@@ -576,14 +633,47 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) {
businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue());
}
// } else {
// businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue());
// }
} else if (QmsCommonConstant.ENTRUST_COMPREHENSIVE_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是商检综合样
//查询当前样品的其他分析方法的结果
List<Long> businessSubParentSampleIdList = Arrays.asList(businessAssayTaskDataDO.getBusinessSubParentSampleId());
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configMethodId);
BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null);
if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) {
businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue());
}
} else if (QmsCommonConstant.ENTRUST_COMMISSION_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是委检样
//查询来样品位
Boolean isForecastS = false;
String forecastValue = null;
String forecastResult = businessSampleEntrustDetailDO.getForecastResult();
if (StringUtils.isNotBlank(forecastResult)) {
JSONArray array = JSON.parseArray(forecastResult);
for (int i = 0; i < array.size(); i++) {
JSONObject item = array.getJSONObject(i);
if ("S".equals(item.getString("simpleName"))) {
isForecastS = true;
break;
}
}
for (int i = 0; i < array.size(); i++) {
JSONObject item = array.getJSONObject(i);
if (sourceProject.equals(item.getString("simpleName"))) {
forecastValue = item.getString("value");
break;
}
}
}
if (isForecastS) {//来样品位存在S值 则取预报的值
businessAssayParameterDataDO.setValue(forecastValue);
} else {
JSONObject forecastResultJson = JSON.parseObject(forecastResult);
//查询当前样品的其他方法的结果
List<Long> businessSubParentSampleIdList = Arrays.asList(businessAssayTaskDataDO.getBusinessSubParentSampleId());
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configMethodId);
BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null);
if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) {
businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue());
}
}
}
@@ -1008,8 +1098,8 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
BusinessAssayTaskDO businessAssayTaskDO = businessAssayTaskMapper.selectById(businessAssayTaskId);
businessAssayTaskDO.setTaskAssayStatus(QmsCommonConstant.SUBMITTED);
businessAssayTaskDO.setAssaySubmitTime(LocalDateTime.now());
businessAssayTaskDO.setFinishStatus(QmsCommonConstant.NOT_START);
businessAssayTaskDO.setFlowStatus(QmsCommonConstant.NOT_START);
businessAssayTaskDO.setFinishStatus(QmsCommonConstant.IN_PROGRESS);
businessAssayTaskDO.setFlowStatus(QmsCommonConstant.IN_PROGRESS);
businessAssayTaskMapper.updateById(businessAssayTaskDO);
}

View File

@@ -2,6 +2,7 @@ package com.zt.plat.module.qms.business.bus.service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
@@ -114,21 +115,22 @@ public class SampleEntrustServiceImpl implements SampleEntrustService {
sampleEntrustRegistration.put(key, value);
});
JSONArray jsonArray = new JSONArray();
jsonArray.add(sampleEntrustRegistration);
List<BusinessSampleEntrustDetailExtendRespVO> sampleEntrustDetailExtendRespVOList = new ArrayList<>();
List<BusinessSampleEntrustDetailDO> sampleEntrustDetailList = businessSampleEntrustDetailMapper.selectByBusinessSampleEntrustRegistrationId(id);
BusinessSampleEntrustDetailExtendRespVO businessSampleEntrustDetailExtendRespVO = null;
for (BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO : sampleEntrustDetailList) {
businessSampleEntrustDetailExtendRespVO = BeanUtils.toBean(businessSampleEntrustDetailDO, BusinessSampleEntrustDetailExtendRespVO.class);
List<BusinessSampleEntrustProjectExtendRespVO> businessSampleEntrustProjectExtendRespVOList = businessSampleEntrustProjectMapper.selectByBusinessSampleEntrustDetailId(businessSampleEntrustDetailDO.getId());
List<BusinessSampleEntrustDetailExtendRespVO> sampleEntrustDetailExtendRespVOList = businessSampleEntrustDetailMapper.selectExtendByBusinessSampleEntrustRegistrationId(id);
for (BusinessSampleEntrustDetailExtendRespVO businessSampleEntrustDetailExtendRespVO : sampleEntrustDetailExtendRespVOList) {
List<BusinessSampleEntrustProjectExtendRespVO> businessSampleEntrustProjectExtendRespVOList = businessSampleEntrustProjectMapper.selectByBusinessSampleEntrustDetailId(businessSampleEntrustDetailExtendRespVO.getId());
businessSampleEntrustDetailExtendRespVO.setSampleEntrustDetailProjectList(businessSampleEntrustProjectExtendRespVOList);
sampleEntrustDetailExtendRespVOList.add(businessSampleEntrustDetailExtendRespVO);
}
//样品类型分组统计
Map<String, Long> groupMap = sampleEntrustDetailExtendRespVOList.stream().collect(Collectors.groupingBy(BusinessSampleEntrustDetailExtendRespVO::getSampleTypeDictionaryBusinessKey, Collectors.counting()));
for (Map.Entry<String, Long> entry : groupMap.entrySet()) {
String key = entry.getKey();
Long val = entry.getValue();
sampleEntrustRegistration.put(key + "Count", val);
}
JSONArray jsonArray = new JSONArray();
jsonArray.add(sampleEntrustRegistration);
String sampleEntrustDetailJsonString = JSON.toJSONString(sampleEntrustDetailExtendRespVOList, context);
result.put("sampleEntrustRegistration", jsonArray);
@@ -250,6 +252,7 @@ public class SampleEntrustServiceImpl implements SampleEntrustService {
LiteflowResponse response = flowExecutor.execute2Resp("sampleEntrustSubmitChain" + tenantId, sampleEntrustParam, SampleEntrustContext.class);
if (!response.isSuccess()){
log.error("提交委托登记失败", response.getCause());
response.getCause().printStackTrace();
throw new ServiceException(1_032_100_000, response.getCause().getMessage());
}
}

View File

@@ -14,7 +14,7 @@ public interface SampleResultReportingService {
List<BusinessSubParentSampleAssessmentGroupRespVO> getUnReportMethodGroupList(BusinessSubParentSampleAssessmentGroupReqVO reqVO);
JSONObject getSampleResultReportingList(Long configAssayMethodId);
JSONObject getSampleResultReportingList(BusinessSubParentSampleAssessmentGroupReqVO reqVO);
List<RecheckSubSampleParentMethodRespVO> getRecheckAssayMethodList(Long baseSampleId, Long businessSubParentSampleId, Long configAssayMethodId);

View File

@@ -36,6 +36,8 @@ import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDa
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayReportDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleAssessmentDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleAssessmentProjectDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleDO;
@@ -48,6 +50,8 @@ import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayProjectDataMa
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayReportDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessBaseSampleMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubParentSampleAssessmentMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubParentSampleAssessmentProjectMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubParentSampleMapper;
@@ -111,8 +115,8 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
}
@Override
public JSONObject getSampleResultReportingList(Long configAssayMethodId) {
List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectDOList = configAssayMethodProjectMapper.selectByConfigAssayMethodId(configAssayMethodId);
public JSONObject getSampleResultReportingList(BusinessSubParentSampleAssessmentGroupReqVO reqVO) {
List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectDOList = configAssayMethodProjectMapper.selectByConfigAssayMethodId(reqVO.getConfigAssayMethodId());
List<Map<String, Object>> columnList = new ArrayList<>();
//动态字段
@@ -132,7 +136,7 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
List<Map<String, Object>> dataList = new ArrayList<>();
//查询结果报送未上报的样品
List<NoReportSubParentSampleAssessmentRespVO> noReportSubParentSampleAssessmentRespList = businessSubParentSampleAssessmentProjectMapper.selectNoReportSubParentSampleAssessment(configAssayMethodId);
List<NoReportSubParentSampleAssessmentRespVO> noReportSubParentSampleAssessmentRespList = businessSubParentSampleAssessmentProjectMapper.selectNoReportSubParentSampleAssessment(reqVO);
if (CollUtil.isEmpty(noReportSubParentSampleAssessmentRespList)) {//没有查询到未上报的数据
JSONObject json = new JSONObject();
@@ -144,18 +148,18 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
//分样id列表
List<Long> businessSubParentSampleIds = noReportSubParentSampleAssessmentRespList.stream().map(m -> m.getBusinessSubParentSampleId()).collect(Collectors.toList());
//报送的检测项目数据
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentDOList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIds, configAssayMethodId);
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentDOList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIds, reqVO.getConfigAssayMethodId());
//获取分析任务数
List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIds, configAssayMethodId);
List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIds, reqVO.getConfigAssayMethodId());
List<Long> businessSubSampleIds = businessAssayTaskDataDOList.stream().map(m -> m.getBusinessSubSampleId()).distinct().collect(Collectors.toList());
//获取子样数据
List<BusinessSubSampleDO> businessSubSampleDOList = businessSubSampleMapper.selectByIds(businessSubSampleIds);
//获取结果判定数据
List<BusinessSubSampleAssessmentProjectExtendRespVO> businessSubSampleAssessmentExtendRespVOList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIds, configAssayMethodId);
List<BusinessSubSampleAssessmentProjectExtendRespVO> businessSubSampleAssessmentExtendRespVOList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIds, reqVO.getConfigAssayMethodId());
//获取复测业务数据
List<BusinessSubSampleParentRecheckDO> businessSubSampleParentRecheckDOList = businessSubSampleParentRecheckMapper.selectByRecheckBusinessSubParentSampleIdsAndRecheckConfigAssayMethodId(businessSubParentSampleIds, configAssayMethodId);
List<BusinessSubSampleParentRecheckDO> businessSubSampleParentRecheckDOList = businessSubSampleParentRecheckMapper.selectByRecheckBusinessSubParentSampleIdsAndRecheckConfigAssayMethodId(businessSubParentSampleIds, reqVO.getConfigAssayMethodId());
//循环未上报的样品
for (NoReportSubParentSampleAssessmentRespVO noReportSubParentSampleAssessmentRespVO : noReportSubParentSampleAssessmentRespList) {
@@ -166,6 +170,7 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
Map<String, Object> subSampleAssessmentBeforeMap = BeanUtil.copyProperties(noReportSubParentSampleAssessmentMap, Map.class);
Map<String, Object> subSampleAssessmentMap = BeanUtil.copyProperties(noReportSubParentSampleAssessmentMap, Map.class);
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> curBusinessSubParentSampleAssessmentDOList = businessSubParentSampleAssessmentDOList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(noReportSubParentSampleAssessmentRespVO.getBusinessSubParentSampleId())).collect(Collectors.toList());
noReportSubParentSampleAssessmentMap.put("sampleReceiveTime", noReportSubParentSampleAssessmentRespVO.getSampleReceiveTime());
noReportSubParentSampleAssessmentMap.put("configAssayMethodName", "报出结果");
StringBuilder businessSubParentSampleAssessmentIds = new StringBuilder();
for (BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentDO : curBusinessSubParentSampleAssessmentDOList) {
@@ -183,6 +188,7 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
List<BusinessSubSampleAssessmentProjectExtendRespVO> businessSubSampleAssessmentExtendBeforeList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdAndConfigAssayMethodId(businessSubSampleParentRecheckDO.getBusinessSubParentSampleId(), businessSubSampleParentRecheckDO.getConfigAssayMethodId());
StringBuilder businessSubSampleAssessmentIdsBefore = new StringBuilder();
for (BusinessSubSampleAssessmentProjectExtendRespVO businessSubSampleAssessmentProjectExtendRespVO : businessSubSampleAssessmentExtendBeforeList) {
subSampleAssessmentBeforeMap.put("sampleReceiveTime", noReportSubParentSampleAssessmentRespVO.getSampleReceiveTime());
subSampleAssessmentBeforeMap.put("configAssayMethodName", businessSubSampleAssessmentProjectExtendRespVO.getConfigAssayMethodName());
subSampleAssessmentBeforeMap.put(businessSubSampleAssessmentProjectExtendRespVO.getSimpleName(), businessSubSampleAssessmentProjectExtendRespVO.getAssessmentValue());
businessSubSampleAssessmentIdsBefore.append(businessSubSampleAssessmentProjectExtendRespVO.getId()).append(",");
@@ -198,6 +204,7 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
List<BusinessSubSampleAssessmentProjectExtendRespVO> businessSubSampleAssessmentList = businessSubSampleAssessmentExtendRespVOList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(noReportSubParentSampleAssessmentRespVO.getBusinessSubParentSampleId())).collect(Collectors.toList());
StringBuilder businessSubSampleAssessmentIds = new StringBuilder();
for (BusinessSubSampleAssessmentProjectExtendRespVO businessSubSampleAssessmentProjectExtendRespVO : businessSubSampleAssessmentList) {
subSampleAssessmentMap.put("sampleReceiveTime", noReportSubParentSampleAssessmentRespVO.getSampleReceiveTime());
subSampleAssessmentMap.put("configAssayMethodName", businessSubSampleAssessmentProjectExtendRespVO.getConfigAssayMethodName());
subSampleAssessmentMap.put(businessSubSampleAssessmentProjectExtendRespVO.getSimpleName(), businessSubSampleAssessmentProjectExtendRespVO.getAssessmentValue());
businessSubSampleAssessmentIds.append(businessSubSampleAssessmentProjectExtendRespVO.getId()).append(",");
@@ -423,6 +430,12 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
@Resource
private BusinessSubParentSampleAssessmentMapper businessSubParentSampleAssessmentMapper;
@Resource
private BusinessSampleEntrustRegistrationMapper businessSampleEntrustRegistrationMapper;
@Resource
private BusinessSampleEntrustDetailMapper businessSampleEntrustDetailMapper;
@Resource
private SampleFlowService sampleFlowService;
@@ -433,7 +446,7 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
//当前登录用户昵称
String nickName = SecurityFrameworkUtils.getLoginUserNickname();
List<BusinessSampleEntrustRegistrationDO> updatebBusinessSampleEntrustRegistrationDOList = new ArrayList<>();
List<BusinessSubSampleDO> updateBusinessSubSampleDOList = new ArrayList<>();
List<BusinessSubSampleAnalysisGroupDO> updateBusinessSubSampleAnalysisGroupDOList = new ArrayList<>();
@@ -444,8 +457,6 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
List<BusinessSubParentSampleDO> businessSubParentSampleDOList = businessSubParentSampleMapper.selectByIds(reqVO.getBusinessSubParentSampleIds());
// List<BusinessSubParentSampleAssessmentDO> businessSubParentSampleAssessmentDOList = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(reqVO.getBusinessSubParentSampleIds(), reqVO.getConfigAssayMethodId());
//循环分样主样数据
for (BusinessSubParentSampleDO businessSubParentSampleDO : businessSubParentSampleDOList) {
@@ -490,7 +501,7 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
List<BusinessSubParentSampleAssessmentProjectExtendRespVO> businessSubParentSampleAssessmentList = businessSubParentSampleAssessmentExtendList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubParentSampleDO.getId())).collect(Collectors.toList());
for (BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessment : businessSubParentSampleAssessmentList) {
Long configAssayMethodProjectId = businessSubParentSampleAssessment.getConfigAssayMethodProjectId();
List<ConfigProjectExtendRespVO> configProjectFeildList = configProjectList.stream().filter(f -> f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectId)).collect(Collectors.toList());
List<ConfigProjectExtendRespVO> configProjectFeildList = configProjectList.stream().filter(f -> f.getConfigAssayMethodProjectId() != null && f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectId)).collect(Collectors.toList());
for (ConfigProjectExtendRespVO configProjectFeild : configProjectFeildList) {
//查询动态报表字段
ConfigReportFieldDO configReportField = configReportFieldDynamicList.stream().filter(f -> f.getConfigReportTypeId().equals(configSampleReport.getConfigReportTypeId()) && f.getField().equals(configProjectFeild.getSaveColumn())).findFirst().orElse(null);
@@ -538,33 +549,48 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
}
}
//处理子样分析任务数据
List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessSubParentSampleIds(reqVO.getBusinessSubParentSampleIds());
List<Long> businessSubSampleIdList = businessAssayTaskDataDOList.stream().map(m -> m.getBusinessSubSampleId()).distinct().collect(Collectors.toList());
List<BusinessSubSampleDO> businessSubSampleDOList = businessSubSampleMapper.selectByIds(businessSubSampleIdList);
List<BusinessSubSampleAnalysisGroupDO> businessSubSampleAnalysisGroupDOList = businessSubSampleAnalysisGroupMapper.selectByBusinessSubParentSampleIds(reqVO.getBusinessSubParentSampleIds());
//根据子样id进行分组
Map<Long, List<BusinessAssayTaskDataDO>> businessAssayTaskDataDOMap = businessAssayTaskDataDOList.stream().collect(Collectors.groupingBy(BusinessAssayTaskDataDO::getBusinessSubSampleId));
for (Map.Entry<Long, List<BusinessAssayTaskDataDO>> businessAssayTaskDataDOEntry : businessAssayTaskDataDOMap.entrySet()) {
Long businessSubSampleId = businessAssayTaskDataDOEntry.getKey();
//子样下的分析任务
List<BusinessAssayTaskDataDO> valList = businessAssayTaskDataDOEntry.getValue();
//查询子样
BusinessSubSampleDO businessSubSampleDO = businessSubSampleDOList.stream().filter(f -> businessSubSampleId.equals(f.getId())).findFirst().orElse(null);
//查询子样下的分析班组
List<BusinessSubSampleAnalysisGroupDO> subSampleAnalysisGroupList = businessSubSampleAnalysisGroupDOList.stream().filter(f -> f.getBusinessSubSampleId().equals(businessSubSampleId)).collect(Collectors.toList());
for (BusinessSubSampleAnalysisGroupDO subSampleAnalysisGroupDO : subSampleAnalysisGroupList) {
long count = valList.stream().filter(f -> f.getIsReported().equals(QmsCommonConstant.NO) && f.getAssayDepartmentId().equals(subSampleAnalysisGroupDO.getAssayDepartmentId())).count();
//分析方法信息
ConfigAssayMethodDO configAssayMethodDO = configAssayMethodMapper.selectById(reqVO.getConfigAssayMethodId());
//查询当前分析部门下的分样判定信息
List<BusinessSubParentSampleAssessmentDO> businessSubParentSampleAssessmentDOList = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdsAndAssayDepartmentId(reqVO.getBusinessSubParentSampleIds(), configAssayMethodDO.getAssayDepartmentId());
//查询当前分析部门下的子样分析班组信息
List<BusinessSubSampleAnalysisGroupDO> businessSubSampleAnalysisGroupDOList = businessSubSampleAnalysisGroupMapper.selectByBusinessSubParentSampleIdsAndAssayDepartmentId(reqVO.getBusinessSubParentSampleIds(), configAssayMethodDO.getAssayDepartmentId());
for (BusinessSubSampleAnalysisGroupDO businessSubSampleAnalysisGroupDO : businessSubSampleAnalysisGroupDOList) {//循环分析班组信息
//查询当前分样判定上报未上报的,并排除当前上报的方法,的数量
long count = businessSubParentSampleAssessmentDOList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubSampleAnalysisGroupDO.getBusinessSubParentSampleId()) && !f.getConfigAssayMethodId().equals(reqVO.getConfigAssayMethodId()) && f.getIsReported().equals(QmsCommonConstant.NO)).count();
if (count > 0) {//如果还存在未上报的数据,则继续
continue;
}
subSampleAnalysisGroupDO.setSampleStatus("已完成");//当前班组分析已完成
updateBusinessSubSampleAnalysisGroupDOList.add(subSampleAnalysisGroupDO);
businessSubSampleAnalysisGroupDO.setSampleStatus("已完成");//当前班组分析已完成
updateBusinessSubSampleAnalysisGroupDOList.add(businessSubSampleAnalysisGroupDO);
//查询子样
BusinessSubSampleDO businessSubSampleDO = businessSubSampleMapper.selectById(businessSubSampleAnalysisGroupDO.getBusinessSubSampleId());
updateBusinessSubSampleDOList.add(businessSubSampleDO);
}
//处理委托登记信息
List<Long> businessBaseSampleIdList = businessSubParentSampleDOList.stream().map(m -> m.getBusinessBaseSampleId()).distinct().collect(Collectors.toList());
List<BusinessSampleEntrustDetailDO> businessSampleEntrustDetailDOList = businessSampleEntrustDetailMapper.selectByBusinessBaseSampleIds(businessBaseSampleIdList);
List<Long> businessSampleEntrustRegistrationIdList = businessSampleEntrustDetailDOList.stream().map(m -> m.getBusinessSampleEntrustRegistrationId()).distinct().collect(Collectors.toList());
List<BusinessSampleEntrustRegistrationDO> businessSampleEntrustRegistrationDOList = businessSampleEntrustRegistrationMapper.selectByIds(businessSampleEntrustRegistrationIdList);
List<BusinessSampleEntrustDetailDO> allBusinessSampleEntrustDetailDOList = businessSampleEntrustDetailMapper.selectByBusinessSampleEntrustRegistrationIds(businessSampleEntrustRegistrationIdList);
for (BusinessSampleEntrustRegistrationDO businessSampleEntrustRegistrationDO : businessSampleEntrustRegistrationDOList) {
List<Long> currentBusinessBaseSampleIdList = allBusinessSampleEntrustDetailDOList.stream().filter(f -> f.getBusinessSampleEntrustRegistrationId().equals(businessSampleEntrustRegistrationDO.getId())).map(m -> m.getBusinessBaseSampleId()).collect(Collectors.toList());
List<BusinessSubParentSampleDO> currentBusinessSubParentSampleDOList = businessSubParentSampleMapper.selectByBusinessBaseSampleIds(currentBusinessBaseSampleIdList);
List<Long> currentBusinessSubParentSampleIdList = currentBusinessSubParentSampleDOList.stream().map(m -> m.getId()).collect(Collectors.toList());
List<BusinessSubParentSampleAssessmentDO> currentBusinessSubParentSampleAssessmentDOList = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIds(currentBusinessSubParentSampleIdList);
//排除不在reqVO.getBusinessSubParentSampleIds()并且方法reqVO.getConfigAssayMethodId()的数据,其他数据校验是否已上报
long count = currentBusinessSubParentSampleAssessmentDOList.stream().filter(f -> !(reqVO.getBusinessSubParentSampleIds().contains(f.getBusinessSubParentSampleId()) && f.getConfigAssayMethodId().equals(reqVO.getConfigAssayMethodId())) && f.getIsReported().equals(QmsCommonConstant.NO)).count();
if (count > 0) {//如果还存在未上报的数据,则继续
continue;
}
businessSampleEntrustRegistrationDO.setAssayStatus(QmsCommonConstant.CHECKED);
updatebBusinessSampleEntrustRegistrationDOList.add(businessSampleEntrustRegistrationDO);
}
if (saveBusinessAssayReportDataDOList.size() > 0) {
@@ -594,6 +620,9 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe
.in(BusinessSubParentSampleAssessmentDO::getBusinessSubParentSampleId, reqVO.getBusinessSubParentSampleIds())
.eq(BusinessSubParentSampleAssessmentDO::getConfigAssayMethodId, reqVO.getConfigAssayMethodId()));
if (updatebBusinessSampleEntrustRegistrationDOList.size() > 0) {
businessSampleEntrustRegistrationMapper.updateBatch(updatebBusinessSampleEntrustRegistrationDOList);
}
if (updateBusinessSubSampleDOList.size() > 0) {

View File

@@ -18,6 +18,13 @@ public interface SampleTaskAssignService {
*/
List<AdminUserRespDTO> getAssignUserList();
/**
* 根据用户id获取用户信息
* @param userId
* @return
*/
AdminUserRespDTO getUserInfoById(Long userId);
/**
* 获取未指派任务子样信息
* @return

View File

@@ -176,6 +176,12 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService {
return userListResult.getCheckedData();
}
@Override
public AdminUserRespDTO getUserInfoById(Long userId) {
CommonResult<AdminUserRespDTO> useResult = adminUserApi.getUser(userId);
return useResult.getCheckedData();
}
@Override
public List<UnAssignTaskedSubSampleRespVO> getAssaySampleList(BusinessAssayTaskDataReqVO reqVO) {
List<UnAssignTaskedSubSampleRespVO> list = businessAssayTaskDataMapper.selectUnAssignTaskedSubSample(reqVO);
@@ -208,6 +214,7 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService {
jsonObject = new JSONObject();
jsonObject.put("configAssayMethodId", configSubSampleMethod.getConfigAssayMethodId());
jsonObject.put("configAssayMethodName", configSubSampleMethod.getConfigAssayMethodName());
jsonObject.put("configAssayMethodNameAndCategory", configSubSampleMethod.getConfigAssayMethodNameAndCategory());
jsonObject.put("configAssayMethodCode", configSubSampleMethod.getConfigAssayMethodCode());
StringBuilder assayProjectBuilder = new StringBuilder();

View File

@@ -100,6 +100,13 @@ public class BaseSampleController implements BusinessControllerMarker {
return success(BeanUtils.toBean(pageResult, BaseSampleRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "获得样品大类管理列表")
public CommonResult<?> getBaseSampleList(BaseSamplePageReqVO reqVO) {
List<BaseSampleRespVO> list = baseSampleService.getBaseSampleList(reqVO);
return success(list);
}
@GetMapping("/export-excel")
@Operation(summary = "导出样品大类管理 Excel")
//@PreAuthorize("@ss.hasPermission('qms:base-sample:export')")

View File

@@ -0,0 +1,106 @@
package com.zt.plat.module.qms.business.config.controller.admin;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import com.zt.plat.framework.business.interceptor.BusinessControllerMarker;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*;
import jakarta.validation.*;
import jakarta.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceSampleTypeDO;
import com.zt.plat.module.qms.business.config.service.ConfigEntrustSourceSampleTypeService;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 检验委托来源与样品类型配置")
@RestController
@RequestMapping("/qms/config-entrust-source-sample-type")
@Validated
public class ConfigEntrustSourceSampleTypeController implements BusinessControllerMarker {
@Resource
private ConfigEntrustSourceSampleTypeService configEntrustSourceSampleTypeService;
@PostMapping("/create")
@Operation(summary = "创建检验委托来源与样品类型配置")
@PreAuthorize("@ss.hasPermission('qms:config-entrust-source-sample-type:create')")
public CommonResult<ConfigEntrustSourceSampleTypeRespVO> createConfigEntrustSourceSampleType(@Valid @RequestBody ConfigEntrustSourceSampleTypeSaveReqVO createReqVO) {
return success(configEntrustSourceSampleTypeService.createConfigEntrustSourceSampleType(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新检验委托来源与样品类型配置")
@PreAuthorize("@ss.hasPermission('qms:config-entrust-source-sample-type:update')")
public CommonResult<Boolean> updateConfigEntrustSourceSampleType(@Valid @RequestBody ConfigEntrustSourceSampleTypeSaveReqVO updateReqVO) {
configEntrustSourceSampleTypeService.updateConfigEntrustSourceSampleType(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除检验委托来源与样品类型配置")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('qms:config-entrust-source-sample-type:delete')")
public CommonResult<Boolean> deleteConfigEntrustSourceSampleType(@RequestParam("id") Long id) {
configEntrustSourceSampleTypeService.deleteConfigEntrustSourceSampleType(id);
return success(true);
}
@DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除检验委托来源与样品类型配置")
@PreAuthorize("@ss.hasPermission('qms:config-entrust-source-sample-type:delete')")
public CommonResult<Boolean> deleteConfigEntrustSourceSampleTypeList(@RequestBody BatchDeleteReqVO req) {
configEntrustSourceSampleTypeService.deleteConfigEntrustSourceSampleTypeListByIds(req.getIds());
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得检验委托来源与样品类型配置")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:config-entrust-source-sample-type:query')")
public CommonResult<ConfigEntrustSourceSampleTypeRespVO> getConfigEntrustSourceSampleType(@RequestParam("id") Long id) {
ConfigEntrustSourceSampleTypeDO configEntrustSourceSampleType = configEntrustSourceSampleTypeService.getConfigEntrustSourceSampleType(id);
return success(BeanUtils.toBean(configEntrustSourceSampleType, ConfigEntrustSourceSampleTypeRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得检验委托来源与样品类型配置分页")
@PreAuthorize("@ss.hasPermission('qms:config-entrust-source-sample-type:query')")
public CommonResult<PageResult<ConfigEntrustSourceSampleTypeRespVO>> getConfigEntrustSourceSampleTypePage(@Valid ConfigEntrustSourceSampleTypePageReqVO pageReqVO) {
PageResult<ConfigEntrustSourceSampleTypeDO> pageResult = configEntrustSourceSampleTypeService.getConfigEntrustSourceSampleTypePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ConfigEntrustSourceSampleTypeRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出检验委托来源与样品类型配置 Excel")
@PreAuthorize("@ss.hasPermission('qms:config-entrust-source-sample-type:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportConfigEntrustSourceSampleTypeExcel(@Valid ConfigEntrustSourceSampleTypePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ConfigEntrustSourceSampleTypeDO> list = configEntrustSourceSampleTypeService.getConfigEntrustSourceSampleTypePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "检验委托来源与样品类型配置.xls", "数据", ConfigEntrustSourceSampleTypeRespVO.class,
BeanUtils.toBean(list, ConfigEntrustSourceSampleTypeRespVO.class));
}
}

View File

@@ -3,109 +3,41 @@ package com.zt.plat.module.qms.business.config.controller.admin;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigReportTemplatePageReqVO;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigReportTemplateRespVO;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigReportTemplateSaveReqVO;
import com.zt.plat.module.qms.business.config.controller.vo.GenReportBody;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriUtils;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.ResourceRegion;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import com.zt.plat.framework.business.interceptor.BusinessControllerMarker;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import jakarta.validation.*;
import jakarta.servlet.http.*;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.common.util.servlet.ServletUtils;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.zt.plat.framework.security.config.SecurityProperties;
import com.zt.plat.framework.security.core.LoginUser;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportTemplateDO;
import com.zt.plat.module.qms.enums.ErrorCodeConstants;
import com.zt.plat.module.qms.framework.gridreport.GridReport;
import com.zt.plat.module.qms.framework.gridreport.PdfHelper;
import com.zt.plat.module.qms.framework.gridreport.exception.GridReportException;
import com.zt.plat.module.qms.business.config.service.ConfigReportTemplateService;
import gridreport.jni.BinaryObject;
import gridreport.jni.ExportImageType;
import gridreport.jni.ExportType;
import gridreport.jni.Report;
@Tag(name = "管理后台 - 报表模版配置")
@RestController
@RequestMapping("/qms/config-report-template")
@Validated
@Slf4j
public class ConfigReportTemplateController {
public static final String WR_PREFIX = "_WR_";
@Resource
private GridReport gridReport;
@Resource
private SecurityProperties securityProperties;
public class ConfigReportTemplateController implements BusinessControllerMarker {
@Resource
private ConfigReportTemplateService configReportTemplateService;
@GetMapping("/info")
@Operation(summary = "获取报表信息")
public CommonResult<?> info() {
Map<String, Object> data = new HashMap<>();
try {
String moduleInfo = Report.getModuleInfo();
String moduleVersion = Report.getModuleVersion();
String modulePath = Report.getModulePath();
data.put("moduleInfo", moduleInfo);
data.put("moduleVersion", moduleVersion);
data.put("modulePath", modulePath);
} catch (Exception e) {
}
return success(data);
}
@PostMapping("/create")
@Operation(summary = "创建报表模版配置")
@@ -179,460 +111,4 @@ public class ConfigReportTemplateController {
BeanUtils.toBean(list, ConfigReportTemplateRespVO.class));
}
/***
* 预览报表
* @param reportId
* @param reportKey
* @param dataUrl
* @param isCrypto
* @param type
* @return
* @throws Exception
*/
@GetMapping("/preview")
@Operation(summary = "预览报表")
public ResponseEntity<org.springframework.core.io.Resource> preview(Long reportId, String reportKey, String dataUrl, Boolean isCrypto, String type) throws Exception {
HttpServletRequest request = ServletUtils.getRequest();
ConfigReportTemplateDO gridppReportFile = null;
if (reportId != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(reportId);
} else if (StrUtil.isNotBlank(reportKey)) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(reportKey);
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new ServiceException(ErrorCodeConstants.CONFIG_REPORT_TEMPLATE_NOT_EXISTS);
}
String reportData = StringEscapeUtils.unescapeHtml4(gridppReportFile.getData());
//报表参数
Map<String, String> reportParams = new HashMap<>();
//获取当前用户姓名
LoginUser user = SecurityFrameworkUtils.getLoginUser();
String realName = "";
if (user != null) {
realName = SecurityFrameworkUtils.getLoginUserNickname();
}
reportParams.put("operName", realName);
if (StrUtil.isNotBlank(dataUrl)) {
log.info("url:" + dataUrl);
dataUrl = StringEscapeUtils.unescapeHtml4(dataUrl);
log.info("url:" + dataUrl);
//处理url参数
if(dataUrl.contains("?")) {
String urlParam = dataUrl.split("\\?")[1];
String[] urlVks = urlParam.split("&");
for (int i = 0; i < urlVks.length; i++) {
String vk = urlVks[i];
if (StrUtil.isNotBlank(vk)) {
String[] vkSplit = vk.split("=");
if(vkSplit.length == 2){
reportParams.put(vkSplit[0], vkSplit[1]);
}
}
}
}
Map<String, String> headers = new HashMap<>();
String token = SecurityFrameworkUtils.obtainAuthorization(request,
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
headers.put(securityProperties.getTokenHeader(), token);
HttpResponse res = HttpRequest.get(dataUrl)
.addHeaders(headers)
.setConnectionTimeout(60 * 1000)
.setReadTimeout(120 * 1000)
.execute();
if (res.getStatus() != 200) {
log.error("报表数据,网络请求错误!", res.body());
throw new GridReportException("报表数据,网络请求错误!");
}
String body = res.body();
CommonResult<?> dataR = JSON.parseObject(body, CommonResult.class);
if (dataR != null && dataR.getCode() == 0) {
if (ArrayUtil.isArray(dataR.getData()) || dataR.getData() instanceof Collection) {
reportData = JSON.toJSONString(dataR);
} else {
reportData = JSON.toJSONString(dataR.getData());
}
} else {
log.error("获取报表数据错误!", dataR.getMsg());
log.error("报表数据:" + reportData);
throw new GridReportException("获取报表数据错误!");
}
}
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), reportData, reportParams, ExportType.valueOf("OFD".equals(type.toUpperCase()) ? "PDF" : type.toUpperCase()));
MediaType mediaType = null;
byte[] docBytes = null;
//文件扩展名
String fileExtName = type.toLowerCase();
switch (type.toUpperCase()) {
case "PDF":
mediaType = MediaType.APPLICATION_PDF;
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "OFD":
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "RTF":
fileExtName = "doc";
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = binaryObject.getDataBuf();
break;
default:
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = binaryObject.getDataBuf();
break;
}
return browser(new ByteArrayResource(docBytes), gridppReportFile.getName() + "." + fileExtName, mediaType);
}
@GetMapping("/previewDocs")
@Operation(summary = "报告预览报表")
public ResponseEntity<org.springframework.core.io.Resource> previewDocs(Long reportId, String reportKey, String dataUrl, Boolean isCrypto, String type) throws Exception {
HttpServletRequest request = ServletUtils.getRequest();
ConfigReportTemplateDO gridppReportFile = null;
if (reportId != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(reportId);
} else if (StrUtil.isNotBlank(reportKey)) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(reportKey);
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new GridReportException("未找到报表模板!");
}
String reportData = StringEscapeUtils.unescapeHtml4(gridppReportFile.getData());
//报表参数
Map<String, String> reportParams = new HashMap<>();
//获取当前用户姓名
LoginUser user = SecurityFrameworkUtils.getLoginUser();
String realName = "";
if (user != null) {
realName = SecurityFrameworkUtils.getLoginUserNickname();
}
reportParams.put("operName", realName);
if (StrUtil.isNotBlank(dataUrl)) {
log.info("url:" + dataUrl);
dataUrl = StringEscapeUtils.unescapeHtml4(dataUrl);
log.info("url:" + dataUrl);
Map<String, String> headers = new HashMap<>();
String token = SecurityFrameworkUtils.obtainAuthorization(request,
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
headers.put(securityProperties.getTokenHeader(), token);
HttpResponse res = HttpRequest.get(dataUrl)
.addHeaders(headers)
.setConnectionTimeout(60 * 1000)
.setReadTimeout(120 * 1000)
.execute();
if (res.getStatus() != 200) {
log.error("报表数据,网络请求错误!", res.body());
throw new GridReportException("报表数据,网络请求错误!");
}
String body = res.body();
CommonResult<?> dataR = JSON.parseObject(body, CommonResult.class);
if (dataR != null && dataR.getCode() == 0) {
if (ArrayUtil.isArray(dataR.getData()) || dataR.getData() instanceof Collection) {
reportData = JSON.toJSONString(dataR);
} else {
Map<String, Object> map = BeanUtil.beanToMap(dataR.getData());
for (Map.Entry<String,Object> obj : BeanUtil.beanToMap(map.get("reportParams")).entrySet()) {
reportParams.put(obj.getKey(), obj.getValue() == null ? "": obj.getValue().toString());
}
reportData = JSON.toJSONString(dataR.getData());
}
} else {
log.error("获取报表数据错误!", dataR.getMsg());
log.error("报表数据:" + reportData);
throw new GridReportException("获取报表数据错误!");
}
}
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), reportData, reportParams, ExportType.valueOf("OFD".equals(type.toUpperCase()) ? "PDF" : type.toUpperCase()));
MediaType mediaType = null;
byte[] docBytes = null;
//文件扩展名
String fileExtName = type.toLowerCase();
switch (type.toUpperCase()) {
case "PDF":
mediaType = MediaType.APPLICATION_PDF;
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "OFD":
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "RTF":
fileExtName = "doc";
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = binaryObject.getDataBuf();
break;
case "IMG":
fileExtName = "png";
mediaType = MediaType.IMAGE_PNG;
docBytes = binaryObject.getDataBuf();
break;
default:
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = binaryObject.getDataBuf();
break;
}
return browser(new ByteArrayResource(docBytes), gridppReportFile.getName() + "." + fileExtName, mediaType);
}
@GetMapping("/export")
@Operation(summary = "导出报表")
public ResponseEntity<ResourceRegion> export(Long reportId, String reportKey, String exportName, String dataUrl, Boolean isCrypto, String type) throws Exception {
HttpServletRequest request = ServletUtils.getRequest();
ConfigReportTemplateDO gridppReportFile = null;
if (reportId != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(reportId);
} else if (StrUtil.isNotBlank(reportKey)) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(reportKey);
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new GridReportException("未找到报表模板!");
}
String reportData = StringEscapeUtils.unescapeHtml4(gridppReportFile.getData());
//报表参数
Map<String, String> reportParams = new HashMap<>();
//获取当前用户姓名
LoginUser user = SecurityFrameworkUtils.getLoginUser();
String realName = "";
if (user != null) {
realName = SecurityFrameworkUtils.getLoginUserNickname();
}
reportParams.put("operName", realName);
if (StrUtil.isNotBlank(dataUrl)) {
dataUrl = StringEscapeUtils.unescapeHtml4(dataUrl);
//处理url参数
if (dataUrl.contains("?")) {
String urlParam = dataUrl.split("\\?")[1];
String[] urlVks = urlParam.split("&");
for (int i = 0; i < urlVks.length; i++) {
String vk = urlVks[i];
if (StrUtil.isNotBlank(vk)) {
String[] vkSplit = vk.split("=");
if(vkSplit.length == 2){
reportParams.put(vkSplit[0], vkSplit[1]);
}
}
}
}
Map<String, String> headers = new HashMap<>();
String token = SecurityFrameworkUtils.obtainAuthorization(request,
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
headers.put(securityProperties.getTokenHeader(), token);
HttpResponse res = HttpRequest.get(dataUrl)
.addHeaders(headers)
.setConnectionTimeout(60 * 1000)
.setReadTimeout(120 * 1000)
.execute();
if (res.getStatus() != 200) {
log.error("报表数据,网络请求错误!", res.body());
throw new GridReportException("报表数据,网络请求错误!");
}
String body = res.body();
CommonResult<?> dataR = JSON.parseObject(body, CommonResult.class);
if (dataR != null && dataR.getCode() == 0) {
if (ArrayUtil.isArray(dataR.getData()) || dataR.getData() instanceof Collection) {
reportData = JSON.toJSONString(dataR);
} else {
reportData = JSON.toJSONString(dataR.getData());
}
} else {
log.error("获取报表数据错误!", dataR.getMsg());
throw new GridReportException("获取报表数据错误!");
}
}
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), reportData, reportParams, ExportType.valueOf("OFD".equals(type.toUpperCase()) ? "PDF" : type.toUpperCase()));
byte[] docBytes = null;
//文件扩展名
String fileExtName = type.toLowerCase();
switch (type.toUpperCase()) {
case "PDF":
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "OFD":
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "RTF":
fileExtName = "doc";
docBytes = binaryObject.getDataBuf();
break;
case "IMG":
fileExtName = "png";
docBytes = binaryObject.getDataBuf();
break;
default:
docBytes = binaryObject.getDataBuf();
break;
}
String fileName = gridppReportFile.getName();
if (StrUtil.isNotBlank(exportName)) {
fileName = exportName;
}
return download(new ByteArrayResource(docBytes), fileName + "." + fileExtName);
}
/**
* 生成Base64图片
* @return
*/
@PostMapping("/gen-report-png-image-base64")
@Operation(summary = "生成Base64图片")
public CommonResult<?> genReportPngImageBase64(@RequestBody GenReportBody body) {
ConfigReportTemplateDO gridppReportFile = null;
if (body.getReportId() != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(body.getReportId());
} else if (StrUtil.isNotBlank(body.getReportKey())) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(body.getReportKey());
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new ServiceException(ErrorCodeConstants.CONFIG_REPORT_TEMPLATE_NOT_EXISTS);
}
String imgBase64 = null;
try {
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), body.getReportDataJson(), body.getReportParams(), ExportType.IMG, ExportImageType.PNG, body.getImgDpi());
imgBase64 = binaryObject.getAsBase64Text();
} catch (Exception e) {
log.error("生成base64图片失败", e);
}
if (StringUtils.isBlank(imgBase64)) {
return CommonResult.error(1_032_100_000, "生成Base64图片失败");
}
return success(imgBase64);
}
/**
* 生成Base64图片
* @return
*/
@PostMapping("/gen-report-png-image-base64-by-pdf")
@Operation(summary = "生成Base64图片")
public CommonResult<?> genReportPngImageBase64ByPdf(@RequestBody GenReportBody body) {
ConfigReportTemplateDO gridppReportFile = null;
if (body.getReportId() != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(body.getReportId());
} else if (StrUtil.isNotBlank(body.getReportKey())) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(body.getReportKey());
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new ServiceException(ErrorCodeConstants.CONFIG_REPORT_TEMPLATE_NOT_EXISTS);
}
String imgBase64 = null;
try {
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), body.getReportDataJson(), body.getReportParams(), ExportType.PDF);
byte[] pngBytes = PdfHelper.pdfToPng(binaryObject.getDataBuf(), body.getImgDpi());
//String encodeHexStr = HexUtil.encodeHexStr(pngBytes);
//System.out.println(encodeHexStr);
imgBase64 = Base64.encode(pngBytes);
} catch (Exception e) {
log.error("生成base64图片失败", e);
}
if (StringUtils.isBlank(imgBase64)) {
return CommonResult.error(1_032_100_000, "生成Base64图片失败");
}
return success(imgBase64);
}
/**
* 下载文件
*
* @param file 文件
* @return {ResponseEntity}
* @throws IOException io异常
*/
protected ResponseEntity<ResourceRegion> download(File file) throws IOException {
String fileName = file.getName();
return download(file, fileName);
}
/**
* 下载
*
* @param file 文件
* @param fileName 生成的文件名
* @return {ResponseEntity}
* @throws IOException io异常
*/
protected ResponseEntity<ResourceRegion> download(File file, String fileName) throws IOException {
org.springframework.core.io.Resource resource = new FileSystemResource(file);
return download(resource, fileName);
}
/**
* 下载
*
* @param resource 资源
* @param fileName 生成的文件名
* @return {ResponseEntity}
* @throws IOException io异常
*/
protected ResponseEntity<ResourceRegion> download(org.springframework.core.io.Resource resource, String fileName) throws IOException {
HttpServletRequest request = ServletUtils.getRequest();
String header = request.getHeader(HttpHeaders.USER_AGENT);
// 避免空指针
header = header == null ? StringPool.EMPTY : header.toUpperCase();
HttpStatus status= HttpStatus.OK;
// 断点续传
long position = 0;
long count = resource.contentLength();
String range = request.getHeader(HttpHeaders.RANGE);
if (null != range) {
status = HttpStatus.PARTIAL_CONTENT;
String[] rangeRange = range.replace("bytes=", StringPool.EMPTY).split(StringPool.DASH);
position = Long.parseLong(rangeRange[0]);
if (rangeRange.length > 1) {
long end = Long.parseLong(rangeRange[1]);
count = end - position + 1;
}
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
String encodeFileName = UriUtils.encode(fileName, StandardCharsets.UTF_8);
// 兼容各种浏览器下载:
// https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/
String disposition = "attachment;" +
"filename=\"" + encodeFileName + "\";" +
"filename*=utf-8''" + encodeFileName;
headers.set(HttpHeaders.CONTENT_DISPOSITION, disposition);
return new ResponseEntity<>(new ResourceRegion(resource, position, count), headers, status);
}
/**
* 浏览器打开
*
* @param resource 资源
* @param fileName 生成的文件名
* @return {ResponseEntity}
* @throws IOException io异常
*/
protected ResponseEntity<org.springframework.core.io.Resource> browser(org.springframework.core.io.Resource resource, String fileName, MediaType mediaType) throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(mediaType);
headers.setContentLength(resource.contentLength());
String encodeFileName = UriUtils.encode(fileName, StandardCharsets.UTF_8);
// 兼容各种浏览器下载:
// https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/
String disposition = "inline;" +
"filename=\"" + encodeFileName + "\";" +
"filename*=utf-8''" + encodeFileName;
headers.set(HttpHeaders.CONTENT_DISPOSITION, disposition);
return new ResponseEntity<>(resource, headers, HttpStatus.OK);
}
}

View File

@@ -0,0 +1,556 @@
package com.zt.plat.module.qms.business.config.controller.admin;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.ResourceRegion;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriUtils;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.servlet.ServletUtils;
import com.zt.plat.framework.security.config.SecurityProperties;
import com.zt.plat.framework.security.core.LoginUser;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.framework.web.core.util.WebFrameworkUtils;
import com.zt.plat.module.qms.business.config.controller.vo.GenReportBody;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportTemplateDO;
import com.zt.plat.module.qms.business.config.service.ConfigReportTemplateService;
import com.zt.plat.module.qms.enums.ErrorCodeConstants;
import com.zt.plat.module.qms.framework.gridreport.GridReport;
import com.zt.plat.module.qms.framework.gridreport.PdfHelper;
import com.zt.plat.module.qms.framework.gridreport.exception.GridReportException;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import gridreport.jni.BinaryObject;
import gridreport.jni.ExportImageType;
import gridreport.jni.ExportType;
import gridreport.jni.Report;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping("/qms/config-report-template")
public class GridReportController {
public static final String WR_PREFIX = "_WR_";
@Resource
private GridReport gridReport;
@Resource
private SecurityProperties securityProperties;
@Resource
private ConfigReportTemplateService configReportTemplateService;
@GetMapping("/info")
@Operation(summary = "获取报表信息")
public CommonResult<?> info() {
Map<String, Object> data = new HashMap<>();
try {
String moduleInfo = Report.getModuleInfo();
String moduleVersion = Report.getModuleVersion();
String modulePath = Report.getModulePath();
data.put("moduleInfo", moduleInfo);
data.put("moduleVersion", moduleVersion);
data.put("modulePath", modulePath);
} catch (Exception e) {
}
return success(data);
}
/***
* 预览报表
* @param reportId
* @param reportKey
* @param dataUrl
* @param isCrypto
* @param type
* @return
* @throws Exception
*/
@GetMapping("/preview")
@Operation(summary = "预览报表")
public ResponseEntity<org.springframework.core.io.Resource> preview(Long reportId, String reportKey, String dataUrl, Boolean isCrypto, String type) throws Exception {
HttpServletRequest request = ServletUtils.getRequest();
ConfigReportTemplateDO gridppReportFile = null;
if (reportId != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(reportId);
} else if (StrUtil.isNotBlank(reportKey)) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(reportKey);
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new ServiceException(ErrorCodeConstants.CONFIG_REPORT_TEMPLATE_NOT_EXISTS);
}
String reportData = StringEscapeUtils.unescapeHtml4(gridppReportFile.getData());
//报表参数
Map<String, String> reportParams = new HashMap<>();
//获取当前用户姓名
LoginUser user = SecurityFrameworkUtils.getLoginUser();
String realName = "";
if (user != null) {
realName = SecurityFrameworkUtils.getLoginUserNickname();
}
reportParams.put("operName", realName);
if (StrUtil.isNotBlank(dataUrl)) {
log.info("url:" + dataUrl);
dataUrl = StringEscapeUtils.unescapeHtml4(dataUrl);
log.info("url:" + dataUrl);
//处理url参数
if(dataUrl.contains("?")) {
String urlParam = dataUrl.split("\\?")[1];
String[] urlVks = urlParam.split("&");
for (int i = 0; i < urlVks.length; i++) {
String vk = urlVks[i];
if (StrUtil.isNotBlank(vk)) {
String[] vkSplit = vk.split("=");
if(vkSplit.length == 2){
reportParams.put(vkSplit[0], vkSplit[1]);
}
}
}
}
Map<String, String> headers = new HashMap<>();
String token = SecurityFrameworkUtils.obtainAuthorization(request,
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
headers.put(securityProperties.getTokenHeader(), token);
// headers.put(WebFrameworkUtils.HEADER_VISIT_COMPANY_ID, user.getVisitCompanyId() + "");
// headers.put(WebFrameworkUtils.HEADER_VISIT_DEPT_ID, user.getVisitDeptId() + "");
HttpResponse res = HttpRequest.get(dataUrl)
.addHeaders(headers)
.setConnectionTimeout(60 * 1000)
.setReadTimeout(120 * 1000)
.execute();
if (res.getStatus() != 200) {
log.error("报表数据,网络请求错误!", res.body());
throw new GridReportException("报表数据,网络请求错误!");
}
String body = res.body();
CommonResult<?> dataR = JSON.parseObject(body, CommonResult.class);
if (dataR != null && dataR.getCode() == 0) {
if (ArrayUtil.isArray(dataR.getData()) || dataR.getData() instanceof Collection) {
reportData = JSON.toJSONString(dataR);
} else {
reportData = JSON.toJSONString(dataR.getData());
}
} else {
log.error("获取报表数据错误!", dataR.getMsg());
log.error("报表数据:" + reportData);
throw new GridReportException("获取报表数据错误!");
}
}
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), reportData, reportParams, ExportType.valueOf("OFD".equals(type.toUpperCase()) ? "PDF" : type.toUpperCase()));
MediaType mediaType = null;
byte[] docBytes = null;
//文件扩展名
String fileExtName = type.toLowerCase();
switch (type.toUpperCase()) {
case "PDF":
mediaType = MediaType.APPLICATION_PDF;
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "OFD":
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "RTF":
fileExtName = "doc";
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = binaryObject.getDataBuf();
break;
default:
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = binaryObject.getDataBuf();
break;
}
return browser(new ByteArrayResource(docBytes), gridppReportFile.getName() + "." + fileExtName, mediaType);
}
@GetMapping("/previewDocs")
@Operation(summary = "报告预览报表")
public ResponseEntity<org.springframework.core.io.Resource> previewDocs(Long reportId, String reportKey, String dataUrl, Boolean isCrypto, String type) throws Exception {
HttpServletRequest request = ServletUtils.getRequest();
ConfigReportTemplateDO gridppReportFile = null;
if (reportId != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(reportId);
} else if (StrUtil.isNotBlank(reportKey)) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(reportKey);
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new GridReportException("未找到报表模板!");
}
String reportData = StringEscapeUtils.unescapeHtml4(gridppReportFile.getData());
//报表参数
Map<String, String> reportParams = new HashMap<>();
//获取当前用户姓名
LoginUser user = SecurityFrameworkUtils.getLoginUser();
String realName = "";
if (user != null) {
realName = SecurityFrameworkUtils.getLoginUserNickname();
}
reportParams.put("operName", realName);
if (StrUtil.isNotBlank(dataUrl)) {
log.info("url:" + dataUrl);
dataUrl = StringEscapeUtils.unescapeHtml4(dataUrl);
log.info("url:" + dataUrl);
Map<String, String> headers = new HashMap<>();
String token = SecurityFrameworkUtils.obtainAuthorization(request,
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
headers.put(securityProperties.getTokenHeader(), token);
// headers.put(WebFrameworkUtils.HEADER_VISIT_COMPANY_ID, user.getVisitCompanyId() + "");
// headers.put(WebFrameworkUtils.HEADER_VISIT_DEPT_ID, user.getVisitDeptId() + "");
HttpResponse res = HttpRequest.get(dataUrl)
.addHeaders(headers)
.setConnectionTimeout(60 * 1000)
.setReadTimeout(120 * 1000)
.execute();
if (res.getStatus() != 200) {
log.error("报表数据,网络请求错误!", res.body());
throw new GridReportException("报表数据,网络请求错误!");
}
String body = res.body();
CommonResult<?> dataR = JSON.parseObject(body, CommonResult.class);
if (dataR != null && dataR.getCode() == 0) {
if (ArrayUtil.isArray(dataR.getData()) || dataR.getData() instanceof Collection) {
reportData = JSON.toJSONString(dataR);
} else {
Map<String, Object> map = BeanUtil.beanToMap(dataR.getData());
for (Map.Entry<String,Object> obj : BeanUtil.beanToMap(map.get("reportParams")).entrySet()) {
reportParams.put(obj.getKey(), obj.getValue() == null ? "": obj.getValue().toString());
}
reportData = JSON.toJSONString(dataR.getData());
}
} else {
log.error("获取报表数据错误!", dataR.getMsg());
log.error("报表数据:" + reportData);
throw new GridReportException("获取报表数据错误!");
}
}
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), reportData, reportParams, ExportType.valueOf("OFD".equals(type.toUpperCase()) ? "PDF" : type.toUpperCase()));
MediaType mediaType = null;
byte[] docBytes = null;
//文件扩展名
String fileExtName = type.toLowerCase();
switch (type.toUpperCase()) {
case "PDF":
mediaType = MediaType.APPLICATION_PDF;
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "OFD":
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "RTF":
fileExtName = "doc";
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = binaryObject.getDataBuf();
break;
case "IMG":
fileExtName = "png";
mediaType = MediaType.IMAGE_PNG;
docBytes = binaryObject.getDataBuf();
break;
default:
mediaType = MediaType.APPLICATION_OCTET_STREAM;
docBytes = binaryObject.getDataBuf();
break;
}
return browser(new ByteArrayResource(docBytes), gridppReportFile.getName() + "." + fileExtName, mediaType);
}
@GetMapping("/export")
@Operation(summary = "导出报表")
public ResponseEntity<ResourceRegion> export(Long reportId, String reportKey, String exportName, String dataUrl, Boolean isCrypto, String type) throws Exception {
HttpServletRequest request = ServletUtils.getRequest();
ConfigReportTemplateDO gridppReportFile = null;
if (reportId != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(reportId);
} else if (StrUtil.isNotBlank(reportKey)) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(reportKey);
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new GridReportException("未找到报表模板!");
}
String reportData = StringEscapeUtils.unescapeHtml4(gridppReportFile.getData());
//报表参数
Map<String, String> reportParams = new HashMap<>();
//获取当前用户姓名
LoginUser user = SecurityFrameworkUtils.getLoginUser();
String realName = "";
if (user != null) {
realName = SecurityFrameworkUtils.getLoginUserNickname();
}
reportParams.put("operName", realName);
if (StrUtil.isNotBlank(dataUrl)) {
dataUrl = StringEscapeUtils.unescapeHtml4(dataUrl);
//处理url参数
if (dataUrl.contains("?")) {
String urlParam = dataUrl.split("\\?")[1];
String[] urlVks = urlParam.split("&");
for (int i = 0; i < urlVks.length; i++) {
String vk = urlVks[i];
if (StrUtil.isNotBlank(vk)) {
String[] vkSplit = vk.split("=");
if(vkSplit.length == 2){
reportParams.put(vkSplit[0], vkSplit[1]);
}
}
}
}
Map<String, String> headers = new HashMap<>();
String token = SecurityFrameworkUtils.obtainAuthorization(request,
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
headers.put(securityProperties.getTokenHeader(), token);
// headers.put(WebFrameworkUtils.HEADER_VISIT_COMPANY_ID, user.getVisitCompanyId() + "");
// headers.put(WebFrameworkUtils.HEADER_VISIT_DEPT_ID, user.getVisitDeptId() + "");
HttpResponse res = HttpRequest.get(dataUrl)
.addHeaders(headers)
.setConnectionTimeout(60 * 1000)
.setReadTimeout(120 * 1000)
.execute();
if (res.getStatus() != 200) {
log.error("报表数据,网络请求错误!", res.body());
throw new GridReportException("报表数据,网络请求错误!");
}
String body = res.body();
CommonResult<?> dataR = JSON.parseObject(body, CommonResult.class);
if (dataR != null && dataR.getCode() == 0) {
if (ArrayUtil.isArray(dataR.getData()) || dataR.getData() instanceof Collection) {
reportData = JSON.toJSONString(dataR);
} else {
reportData = JSON.toJSONString(dataR.getData());
}
} else {
log.error("获取报表数据错误!", dataR.getMsg());
throw new GridReportException("获取报表数据错误!");
}
}
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), reportData, reportParams, ExportType.valueOf("OFD".equals(type.toUpperCase()) ? "PDF" : type.toUpperCase()));
byte[] docBytes = null;
//文件扩展名
String fileExtName = type.toLowerCase();
switch (type.toUpperCase()) {
case "PDF":
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "OFD":
docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf());
break;
case "RTF":
fileExtName = "doc";
docBytes = binaryObject.getDataBuf();
break;
case "IMG":
fileExtName = "png";
docBytes = binaryObject.getDataBuf();
break;
default:
docBytes = binaryObject.getDataBuf();
break;
}
String fileName = gridppReportFile.getName();
if (StrUtil.isNotBlank(exportName)) {
fileName = exportName;
}
return download(new ByteArrayResource(docBytes), fileName + "." + fileExtName);
}
/**
* 生成Base64图片
* @return
*/
@PostMapping("/gen-report-png-image-base64")
@Operation(summary = "生成Base64图片")
public CommonResult<?> genReportPngImageBase64(@RequestBody GenReportBody body) {
ConfigReportTemplateDO gridppReportFile = null;
if (body.getReportId() != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(body.getReportId());
} else if (StrUtil.isNotBlank(body.getReportKey())) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(body.getReportKey());
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new ServiceException(ErrorCodeConstants.CONFIG_REPORT_TEMPLATE_NOT_EXISTS);
}
String imgBase64 = null;
try {
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), body.getReportDataJson(), body.getReportParams(), ExportType.IMG, ExportImageType.PNG, body.getImgDpi());
imgBase64 = binaryObject.getAsBase64Text();
} catch (Exception e) {
log.error("生成base64图片失败", e);
}
if (StringUtils.isBlank(imgBase64)) {
return CommonResult.error(1_032_100_000, "生成Base64图片失败");
}
return success(imgBase64);
}
/**
* 生成Base64图片
* @return
*/
@PostMapping("/gen-report-png-image-base64-by-pdf")
@Operation(summary = "生成Base64图片")
public CommonResult<?> genReportPngImageBase64ByPdf(@RequestBody GenReportBody body) {
ConfigReportTemplateDO gridppReportFile = null;
if (body.getReportId() != null) {
gridppReportFile = configReportTemplateService.getConfigReportTemplate(body.getReportId());
} else if (StrUtil.isNotBlank(body.getReportKey())) {
gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(body.getReportKey());
}
if (ObjectUtil.isEmpty(gridppReportFile)) {
throw new ServiceException(ErrorCodeConstants.CONFIG_REPORT_TEMPLATE_NOT_EXISTS);
}
String imgBase64 = null;
try {
BinaryObject binaryObject = gridReport.genReport(gridppReportFile.getContent(), body.getReportDataJson(), body.getReportParams(), ExportType.PDF);
byte[] pngBytes = PdfHelper.pdfToPng(binaryObject.getDataBuf(), body.getImgDpi());
//String encodeHexStr = HexUtil.encodeHexStr(pngBytes);
//System.out.println(encodeHexStr);
imgBase64 = Base64.encode(pngBytes);
} catch (Exception e) {
log.error("生成base64图片失败", e);
}
if (StringUtils.isBlank(imgBase64)) {
return CommonResult.error(1_032_100_000, "生成Base64图片失败");
}
return success(imgBase64);
}
/**
* 下载文件
*
* @param file 文件
* @return {ResponseEntity}
* @throws IOException io异常
*/
protected ResponseEntity<ResourceRegion> download(File file) throws IOException {
String fileName = file.getName();
return download(file, fileName);
}
/**
* 下载
*
* @param file 文件
* @param fileName 生成的文件名
* @return {ResponseEntity}
* @throws IOException io异常
*/
protected ResponseEntity<ResourceRegion> download(File file, String fileName) throws IOException {
org.springframework.core.io.Resource resource = new FileSystemResource(file);
return download(resource, fileName);
}
/**
* 下载
*
* @param resource 资源
* @param fileName 生成的文件名
* @return {ResponseEntity}
* @throws IOException io异常
*/
protected ResponseEntity<ResourceRegion> download(org.springframework.core.io.Resource resource, String fileName) throws IOException {
HttpServletRequest request = ServletUtils.getRequest();
String header = request.getHeader(HttpHeaders.USER_AGENT);
// 避免空指针
header = header == null ? StringPool.EMPTY : header.toUpperCase();
HttpStatus status= HttpStatus.OK;
// 断点续传
long position = 0;
long count = resource.contentLength();
String range = request.getHeader(HttpHeaders.RANGE);
if (null != range) {
status = HttpStatus.PARTIAL_CONTENT;
String[] rangeRange = range.replace("bytes=", StringPool.EMPTY).split(StringPool.DASH);
position = Long.parseLong(rangeRange[0]);
if (rangeRange.length > 1) {
long end = Long.parseLong(rangeRange[1]);
count = end - position + 1;
}
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
String encodeFileName = UriUtils.encode(fileName, StandardCharsets.UTF_8);
// 兼容各种浏览器下载:
// https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/
String disposition = "attachment;" +
"filename=\"" + encodeFileName + "\";" +
"filename*=utf-8''" + encodeFileName;
headers.set(HttpHeaders.CONTENT_DISPOSITION, disposition);
return new ResponseEntity<>(new ResourceRegion(resource, position, count), headers, status);
}
/**
* 浏览器打开
*
* @param resource 资源
* @param fileName 生成的文件名
* @return {ResponseEntity}
* @throws IOException io异常
*/
protected ResponseEntity<org.springframework.core.io.Resource> browser(org.springframework.core.io.Resource resource, String fileName, MediaType mediaType) throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(mediaType);
headers.setContentLength(resource.contentLength());
String encodeFileName = UriUtils.encode(fileName, StandardCharsets.UTF_8);
// 兼容各种浏览器下载:
// https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/
String disposition = "inline;" +
"filename=\"" + encodeFileName + "\";" +
"filename*=utf-8''" + encodeFileName;
headers.set(HttpHeaders.CONTENT_DISPOSITION, disposition);
return new ResponseEntity<>(resource, headers, HttpStatus.OK);
}
}

View File

@@ -42,4 +42,9 @@ public class BaseSamplePageReqVO extends PageParam {
@Schema(description = "检测标准数量")
private String assayStandardCount;
@Schema(description = "检验委托来源配置ID", example = "321")
private Long configEntrustSourceId;
@Schema(description = "委托类型,委托登记-entrust_registration、检验委托-entrust_inspection", example = "1")
private String entrustType;
}

View File

@@ -25,6 +25,9 @@ public class ConfigAssayMethodPageReqVO extends PageParam {
@Schema(description = "方法名称", example = "李四")
private String name;
@Schema(description = "方法名称及类别")
private String methodNameCategory;
@Schema(description = "方法编号")
private String methodCode;

View File

@@ -25,6 +25,9 @@ public class ConfigAssayMethodReqVO {
@Schema(description = "方法名称", example = "李四")
private String name;
@Schema(description = "方法名称及类别")
private String methodNameCategory;
@Schema(description = "方法编号")
private String methodCode;

View File

@@ -30,6 +30,9 @@ public class ConfigAssayMethodRespVO {
@ExcelProperty("方法名称")
private String name;
@Schema(description = "方法名称及类别")
private String methodNameCategory;
@Schema(description = "方法编号")
@ExcelProperty("方法编号")
private String methodCode;

View File

@@ -24,6 +24,9 @@ public class ConfigAssayMethodSaveReqVO {
@Schema(description = "方法名称", example = "李四")
private String name;
@Schema(description = "方法名称及类别")
private String methodNameCategory;
@Schema(description = "方法编号")
private String methodCode;

View File

@@ -0,0 +1,35 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.zt.plat.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 检验委托来源与样品类型配置分页 Request VO")
@Data
public class ConfigEntrustSourceSampleTypePageReqVO extends PageParam {
@Schema(description = "检验委托来源配置ID", example = "321")
private Long configEntrustSourceId;
@Schema(description = "样品类型_ID,字典表【T_DIC_BSN】样品类型委检样、商检分析样、商检综合样、西南铜产品", example = "30057")
private Long dictionaryBusinessId;
@Schema(description = "参数分组_Key,字典表【T_DIC_BSN】样品类型")
private String dictionaryBusinessKey;
@Schema(description = "所属部门")
private String systemDepartmentCode;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "备注")
private String remark;
}

View File

@@ -0,0 +1,43 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 检验委托来源与样品类型配置 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ConfigEntrustSourceSampleTypeRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2073")
@ExcelProperty("ID")
private Long id;
@Schema(description = "检验委托来源配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "321")
@ExcelProperty("检验委托来源配置ID")
private Long configEntrustSourceId;
@Schema(description = "样品类型_ID,字典表【T_DIC_BSN】样品类型委检样、商检分析样、商检综合样、西南铜产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "30057")
@ExcelProperty("样品类型_ID,字典表【T_DIC_BSN】样品类型委检样、商检分析样、商检综合样、西南铜产品")
private Long dictionaryBusinessId;
@Schema(description = "参数分组_Key,字典表【T_DIC_BSN】样品类型")
@ExcelProperty("参数分组_Key,字典表【T_DIC_BSN】样品类型")
private String dictionaryBusinessKey;
@Schema(description = "所属部门")
@ExcelProperty("所属部门")
private String systemDepartmentCode;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "备注")
@ExcelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,32 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import jakarta.validation.constraints.*;
@Schema(description = "管理后台 - 检验委托来源与样品类型配置新增/修改 Request VO")
@Data
public class ConfigEntrustSourceSampleTypeSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2073")
private Long id;
@Schema(description = "检验委托来源配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "321")
@NotEmpty(message = "检验委托来源配置ID不能为空")
private Long configEntrustSourceId;
@Schema(description = "样品类型_ID,字典表【T_DIC_BSN】样品类型委检样、商检分析样、商检综合样、西南铜产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "30057")
@NotNull(message = "样品类型_ID,字典表【T_DIC_BSN】样品类型委检样、商检分析样、商检综合样、西南铜产品不能为空")
private Long dictionaryBusinessId;
@Schema(description = "参数分组_Key,字典表【T_DIC_BSN】样品类型")
private String dictionaryBusinessKey;
@Schema(description = "所属部门")
private String systemDepartmentCode;
@Schema(description = "备注")
private String remark;
}

View File

@@ -10,6 +10,9 @@ public class ConfigSubSampleMethodExtendRespVO extends ConfigSubSampleMethodResp
@Schema(description = "分析方法名称")
private String configAssayMethodName;
@Schema(description = "检测方法配置名称及类别")
private String configAssayMethodNameAndCategory;
/** 分析方法编号 **/
@Schema(description = "分析方法编号")
private String configAssayMethodCode;

View File

@@ -52,10 +52,15 @@ public class BaseSampleDO extends BusinessBaseDO {
@TableField("MTRL_NAME")
private String materialName;
/**
* 样品类型_ID,字典表【T_DIC_BSN】结算样、委检样、抽查样
* 样品类型
*/
@TableField("DIC_BSN_ID")
private Long dictionaryBusinessId;
/**
* 样品类型key
*/
@TableField("DIC_BSN_KY")
private String dictionaryBusinessKey;
/**
* 所属部门
*/

View File

@@ -57,6 +57,11 @@ public class ConfigAssayMethodDO extends BusinessBaseDO {
@TableField("MTHD_CD")
private String methodCode;
/**
* 方法名称及类别
*/
@TableField("MTHD_NAME_CTGR")
private String methodNameCategory;
/**
* 描述
*/
@TableField("DSP")

View File

@@ -0,0 +1,60 @@
package com.zt.plat.module.qms.business.config.dal.dataobject;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
/**
* 检验委托来源与样品类型配置 DO
*
* @author 后台管理
*/
@TableName("t_cfg_entt_src_smp_tp")
@KeySequence("t_cfg_entt_src_smp_tp_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
public class ConfigEntrustSourceSampleTypeDO extends BusinessBaseDO {
/**
* ID
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 检验委托来源配置ID
*/
@TableField("CFG_ENTT_SRC_ID")
private Long configEntrustSourceId;
/**
* 样品类型_ID,字典表【T_DIC_BSN】样品类型委检样、商检分析样、商检综合样、西南铜产品
*/
@TableField("DIC_BSN_ID")
private Long dictionaryBusinessId;
/**
* 参数分组_Key,字典表【T_DIC_BSN】样品类型
*/
@TableField("DIC_BSN_KY")
private String dictionaryBusinessKey;
/**
* 所属部门
*/
@TableField("SYS_DEPT_CD")
private String systemDepartmentCode;
/**
* 备注
*/
@TableField("RMK")
private String remark;
}

View File

@@ -1,10 +1,17 @@
package com.zt.plat.module.qms.business.config.dal.mapper;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.module.qms.business.config.controller.vo.BaseSamplePageReqVO;
import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.BaseSampleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceSampleTypeDO;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import cn.hutool.core.util.ObjectUtil;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@@ -30,6 +37,28 @@ public interface BaseSampleMapper extends BaseMapperX<BaseSampleDO> {
.orderByDesc(BaseSampleDO::getId));
}
default List<BaseSampleRespVO> selectList(BaseSamplePageReqVO reqVO) {
LambdaQueryWrapperX<BaseSampleDO> queryWrapperX = new LambdaQueryWrapperX<BaseSampleDO>()
.likeIfPresent(BaseSampleDO::getName, reqVO.getName())
.eqIfPresent(BaseSampleDO::getMaterialId, reqVO.getMaterialId())
.eqIfPresent(BaseSampleDO::getMaterialCode, reqVO.getMaterialCode())
.likeIfPresent(BaseSampleDO::getMaterialName, reqVO.getMaterialName())
.eqIfPresent(BaseSampleDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
.eqIfPresent(BaseSampleDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(BaseSampleDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(BaseSampleDO::getRemark, reqVO.getRemark());
if (ObjectUtil.isNotEmpty(reqVO.getConfigEntrustSourceId())) {
queryWrapperX.inSql(BaseSampleDO::getDictionaryBusinessId, "SELECT tcesst.DIC_BSN_ID FROM T_CFG_ENTT_SRC_SMP_TP tcesst WHERE tcesst.CFG_ENTT_SRC_ID = " + reqVO.getConfigEntrustSourceId());
}
if (QmsCommonConstant.ENTRUST_INSPECTION.equals(reqVO.getEntrustType())) {
queryWrapperX.inSql(BaseSampleDO::getDictionaryBusinessId, "SELECT tcesst.DIC_BSN_ID FROM T_CFG_ENTT_SRC_SMP_TP tcesst LEFT JOIN T_CFG_ENTT_SRC tces ON tcesst.CFG_ENTT_SRC_ID = tces.ID WHERE tces.ENTT_TP = '" + reqVO.getEntrustType() + "'");
}
queryWrapperX.orderByDesc(BaseSampleDO::getId);
List<BaseSampleDO> list = selectList(queryWrapperX);
return BeanUtils.toBean(list, BaseSampleRespVO.class);
}
List<BaseSampleDO> getBaseSampleListWithAssayStandardCount();
}

View File

@@ -27,6 +27,7 @@ public interface ConfigAssayMethodMapper extends BaseMapperX<ConfigAssayMethodDO
.eqIfPresent(ConfigAssayMethodDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
.eqIfPresent(ConfigAssayMethodDO::getDictionaryBusinessKey, reqVO.getDictionaryBusinessKey())
.likeIfPresent(ConfigAssayMethodDO::getName, reqVO.getName())
.eqIfPresent(ConfigAssayMethodDO::getMethodNameCategory, reqVO.getMethodNameCategory())
.eqIfPresent(ConfigAssayMethodDO::getMethodCode, reqVO.getMethodCode())
.eqIfPresent(ConfigAssayMethodDO::getDescription, reqVO.getDescription())
.eqIfPresent(ConfigAssayMethodDO::getIsEnabled, reqVO.getIsEnabled())
@@ -51,6 +52,7 @@ public interface ConfigAssayMethodMapper extends BaseMapperX<ConfigAssayMethodDO
.eqIfPresent(ConfigAssayMethodDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
.eqIfPresent(ConfigAssayMethodDO::getDictionaryBusinessKey, reqVO.getDictionaryBusinessKey())
.likeIfPresent(ConfigAssayMethodDO::getName, reqVO.getName())
.eqIfPresent(ConfigAssayMethodDO::getMethodNameCategory, reqVO.getMethodNameCategory())
.eqIfPresent(ConfigAssayMethodDO::getMethodCode, reqVO.getMethodCode())
.eqIfPresent(ConfigAssayMethodDO::getDescription, reqVO.getDescription())
.eqIfPresent(ConfigAssayMethodDO::getDataCollectionKey, reqVO.getDataCollectionKey())
@@ -70,4 +72,5 @@ public interface ConfigAssayMethodMapper extends BaseMapperX<ConfigAssayMethodDO
.orderByDesc(ConfigAssayMethodDO::getId));
}
}

View File

@@ -6,6 +6,9 @@ import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigBaseSamplePageReqVO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigBaseSampleDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
/**
@@ -32,4 +35,9 @@ public interface ConfigBaseSampleMapper extends BaseMapperX<ConfigBaseSampleDO>
.orderByDesc(ConfigBaseSampleDO::getId));
}
default List<ConfigBaseSampleDO> selectByBaseSampleIds(List<Long> baseSampleIds) {
return selectList(new LambdaQueryWrapperX<ConfigBaseSampleDO>()
.in(ConfigBaseSampleDO::getBaseSampleId, baseSampleIds));
}
}

View File

@@ -0,0 +1,31 @@
package com.zt.plat.module.qms.business.config.dal.mapper;
import java.util.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigEntrustSourceSampleTypePageReqVO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceSampleTypeDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 检验委托来源与样品类型配置 Mapper
*
* @author 后台管理
*/
@Mapper
public interface ConfigEntrustSourceSampleTypeMapper extends BaseMapperX<ConfigEntrustSourceSampleTypeDO> {
default PageResult<ConfigEntrustSourceSampleTypeDO> selectPage(ConfigEntrustSourceSampleTypePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ConfigEntrustSourceSampleTypeDO>()
.eqIfPresent(ConfigEntrustSourceSampleTypeDO::getConfigEntrustSourceId, reqVO.getConfigEntrustSourceId())
.eqIfPresent(ConfigEntrustSourceSampleTypeDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
.eqIfPresent(ConfigEntrustSourceSampleTypeDO::getDictionaryBusinessKey, reqVO.getDictionaryBusinessKey())
.eqIfPresent(ConfigEntrustSourceSampleTypeDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(ConfigEntrustSourceSampleTypeDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ConfigEntrustSourceSampleTypeDO::getRemark, reqVO.getRemark())
.orderByDesc(ConfigEntrustSourceSampleTypeDO::getId));
}
}

View File

@@ -51,4 +51,9 @@ public interface ConfigSampleReportMapper extends BaseMapperX<ConfigSampleReport
.eqIfPresent(ConfigSampleReportDO::getVersion, reqVO.getVersion())
.orderByDesc(ConfigSampleReportDO::getId));
}
default List<ConfigSampleReportDO> selectByConfigBaseSampleIds(List<Long> configBaseSampleIds) {
return selectList(new LambdaQueryWrapperX<ConfigSampleReportDO>()
.in(ConfigSampleReportDO::getConfigBaseSampleId, configBaseSampleIds));
}
}

View File

@@ -6,6 +6,9 @@ import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSamplePageReqVO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
/**
@@ -40,4 +43,9 @@ public interface ConfigSubSampleMapper extends BaseMapperX<ConfigSubSampleDO> {
.orderByDesc(ConfigSubSampleDO::getId));
}
default List<ConfigSubSampleDO> selectByBaseSampleIds(List<Long> baseSampleIds) {
return selectList(new LambdaQueryWrapperX<ConfigSubSampleDO>()
.in(ConfigSubSampleDO::getBaseSampleId, baseSampleIds));
}
}

View File

@@ -43,6 +43,7 @@ public interface ConfigSubSampleMethodMapper extends BaseMapperX<ConfigSubSample
.leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, ConfigSubSampleMethodDO::getConfigAssayMethodId)
.selectAll(ConfigSubSampleMethodDO.class)
.selectAs(ConfigAssayMethodDO::getName, ConfigSubSampleMethodExtendRespVO::getConfigAssayMethodName)
.selectAs(ConfigAssayMethodDO::getMethodNameCategory, ConfigSubSampleMethodExtendRespVO::getConfigAssayMethodNameAndCategory)
.selectAs(ConfigAssayMethodDO::getMethodCode, ConfigSubSampleMethodExtendRespVO::getConfigAssayMethodCode)
.eq(ConfigSubSampleMethodDO::getConfigSubSampleId, configSubSampleId)
.eq(ConfigAssayMethodDO::getAssayDepartmentId, assayDepartmentId));
@@ -60,4 +61,9 @@ public interface ConfigSubSampleMethodMapper extends BaseMapperX<ConfigSubSample
.eq(ConfigSubSampleMethodDO::getConfigAssayMethodId, configAssayMethodId));
}
default List<ConfigSubSampleMethodDO> selectByConfigSubSampleIds(List<Long> configSubSampleIds) {
return selectList(new LambdaQueryWrapper<ConfigSubSampleMethodDO>()
.in(ConfigSubSampleMethodDO::getConfigSubSampleId, configSubSampleIds));
}
}

View File

@@ -6,6 +6,9 @@ import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleParentPageReqVO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleParentDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
/**
@@ -31,4 +34,9 @@ public interface ConfigSubSampleParentMapper extends BaseMapperX<ConfigSubSample
.orderByDesc(ConfigSubSampleParentDO::getId));
}
default List<ConfigSubSampleParentDO> selectByBaseSampleIds(List<Long> baseSampleIds) {
return selectList(new LambdaQueryWrapperX<ConfigSubSampleParentDO>()
.in(ConfigSubSampleParentDO::getBaseSampleId, baseSampleIds));
}
}

View File

@@ -63,4 +63,11 @@ public interface BaseSampleService {
*/
PageResult<BaseSampleDO> getBaseSamplePage(BaseSamplePageReqVO pageReqVO);
/**
* 获得样品大类管理列表
* @param reqVO
* @return
*/
List<BaseSampleRespVO> getBaseSampleList(BaseSamplePageReqVO reqVO);
}

View File

@@ -92,4 +92,9 @@ public class BaseSampleServiceImpl implements BaseSampleService {
return baseSampleMapper.selectPage(pageReqVO);
}
@Override
public List<BaseSampleRespVO> getBaseSampleList(BaseSamplePageReqVO reqVO) {
return baseSampleMapper.selectList(reqVO);
}
}

View File

@@ -0,0 +1,61 @@
package com.zt.plat.module.qms.business.config.service;
import java.util.*;
import jakarta.validation.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceSampleTypeDO;
/**
* 检验委托来源与样品类型配置 Service 接口
*
* @author 后台管理
*/
public interface ConfigEntrustSourceSampleTypeService {
/**
* 创建检验委托来源与样品类型配置
*
* @param createReqVO 创建信息
* @return 编号
*/
ConfigEntrustSourceSampleTypeRespVO createConfigEntrustSourceSampleType(@Valid ConfigEntrustSourceSampleTypeSaveReqVO createReqVO);
/**
* 更新检验委托来源与样品类型配置
*
* @param updateReqVO 更新信息
*/
void updateConfigEntrustSourceSampleType(@Valid ConfigEntrustSourceSampleTypeSaveReqVO updateReqVO);
/**
* 删除检验委托来源与样品类型配置
*
* @param id 编号
*/
void deleteConfigEntrustSourceSampleType(Long id);
/**
* 批量删除检验委托来源与样品类型配置
*
* @param ids 编号
*/
void deleteConfigEntrustSourceSampleTypeListByIds(List<Long> ids);
/**
* 获得检验委托来源与样品类型配置
*
* @param id 编号
* @return 检验委托来源与样品类型配置
*/
ConfigEntrustSourceSampleTypeDO getConfigEntrustSourceSampleType(Long id);
/**
* 获得检验委托来源与样品类型配置分页
*
* @param pageReqVO 分页查询
* @return 检验委托来源与样品类型配置分页
*/
PageResult<ConfigEntrustSourceSampleTypeDO> getConfigEntrustSourceSampleTypePage(ConfigEntrustSourceSampleTypePageReqVO pageReqVO);
}

View File

@@ -0,0 +1,91 @@
package com.zt.plat.module.qms.business.config.service;
import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceSampleTypeDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigEntrustSourceSampleTypeMapper;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.diffList;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*;
/**
* 检验委托来源与样品类型配置 Service 实现类
*
* @author 后台管理
*/
@Service
@Validated
public class ConfigEntrustSourceSampleTypeServiceImpl implements ConfigEntrustSourceSampleTypeService {
@Resource
private ConfigEntrustSourceSampleTypeMapper configEntrustSourceSampleTypeMapper;
@Override
public ConfigEntrustSourceSampleTypeRespVO createConfigEntrustSourceSampleType(ConfigEntrustSourceSampleTypeSaveReqVO createReqVO) {
// 插入
ConfigEntrustSourceSampleTypeDO configEntrustSourceSampleType = BeanUtils.toBean(createReqVO, ConfigEntrustSourceSampleTypeDO.class);
configEntrustSourceSampleTypeMapper.insert(configEntrustSourceSampleType);
// 返回
return BeanUtils.toBean(configEntrustSourceSampleType, ConfigEntrustSourceSampleTypeRespVO.class);
}
@Override
public void updateConfigEntrustSourceSampleType(ConfigEntrustSourceSampleTypeSaveReqVO updateReqVO) {
// 校验存在
validateConfigEntrustSourceSampleTypeExists(updateReqVO.getId());
// 更新
ConfigEntrustSourceSampleTypeDO updateObj = BeanUtils.toBean(updateReqVO, ConfigEntrustSourceSampleTypeDO.class);
configEntrustSourceSampleTypeMapper.updateById(updateObj);
}
@Override
public void deleteConfigEntrustSourceSampleType(Long id) {
// 校验存在
validateConfigEntrustSourceSampleTypeExists(id);
// 删除
configEntrustSourceSampleTypeMapper.deleteById(id);
}
@Override
public void deleteConfigEntrustSourceSampleTypeListByIds(List<Long> ids) {
// 校验存在
validateConfigEntrustSourceSampleTypeExists(ids);
// 删除
configEntrustSourceSampleTypeMapper.deleteByIds(ids);
}
private void validateConfigEntrustSourceSampleTypeExists(List<Long> ids) {
List<ConfigEntrustSourceSampleTypeDO> list = configEntrustSourceSampleTypeMapper.selectByIds(ids);
if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
throw exception(CONFIG_ENTRUST_SOURCE_SAMPLE_TYPE_NOT_EXISTS);
}
}
private void validateConfigEntrustSourceSampleTypeExists(Long id) {
if (configEntrustSourceSampleTypeMapper.selectById(id) == null) {
throw exception(CONFIG_ENTRUST_SOURCE_SAMPLE_TYPE_NOT_EXISTS);
}
}
@Override
public ConfigEntrustSourceSampleTypeDO getConfigEntrustSourceSampleType(Long id) {
return configEntrustSourceSampleTypeMapper.selectById(id);
}
@Override
public PageResult<ConfigEntrustSourceSampleTypeDO> getConfigEntrustSourceSampleTypePage(ConfigEntrustSourceSampleTypePageReqVO pageReqVO) {
return configEntrustSourceSampleTypeMapper.selectPage(pageReqVO);
}
}

View File

@@ -62,16 +62,12 @@ public class ReportDocumentDataController extends AbstractFileUploadController i
@GetMapping("/queryReportDetail")
@Operation(summary = "查询报告明细数据")
@Parameter(name = "mainId", description = "报告id", required = true, example = "1024")
public CommonResult<List<JSONObject>> queryReportDetail(@RequestParam("mainId") Long mainId) {
public CommonResult<?> queryReportDetail(@RequestParam("mainId") Long mainId, @RequestParam(name = "pageFlag", required = false) String pageFlag) {
ReportDocumentMainDO mainDO = reportDocumentMainService.getReportDocumentMain(mainId);
Long typeId = mainDO.getReportDocumentTypeId();
ReportDocumentTypeDO typeDO = reportDocumentTypeService.getReportDocumentType(typeId);
Long confId = typeDO.getConfigReportTypeId();
// Map<String, Object> param = new HashMap<>();
// List<ReportDocumentDataDO> list = reportDocumentDataService.listByMainDataId(mainId).getData();
// return success(BeanUtils.toBean(list, ReportDocumentDataRespVO.class));
CommonResult<List<JSONObject>> result = reportDocumentDataService.assembleDynamicData(mainDO, typeDO);
CommonResult<JSONArray> result = reportDocumentDataService.assembleDynamicData(mainDO, typeDO, pageFlag);
return result;
}

View File

@@ -189,58 +189,32 @@ public class ReportDocumentMainController extends AbstractFileUploadController i
//处理抬头数据
if("true".equals(editFlag)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formData = vo.getFormData();
JSONObject formDataJson = new JSONObject();
if(!ObjectUtils.isEmpty(formData))
formDataJson = JSONObject.parseObject(formData);
List<ReportDocumentDataDO> dataList = reportDocumentDataService.listByMainDataId(id).getData();
ReportDocumentTypeDO typeDO = reportDocumentTypeService.getReportDocumentType(reportDocumentMain.getReportDocumentTypeId());
String customConfig = typeDO.getCustomConfig();
String defaultConclusion = "";
if(!ObjectUtils.isEmpty(customConfig)){
JSONObject config = JSONObject.parseObject(customConfig);
defaultConclusion = config.getString("defaultConclusion");
}
formDataJson.put("conclusion", defaultConclusion);
if(!dataList.isEmpty())
formDataJson.put("sampleName", dataList.get(0).getSampleName());
//处理检测标准
String standard = assembleStandard(dataList);
formDataJson.put("standard", standard);
formDataJson.put("reportTime", sdf.format(new Date()));
vo.setFormData(formDataJson.toJSONString());
// ReportDocumentMainSaveReqVO updateVO = new ReportDocumentMainSaveReqVO();
// updateVO.setId(reportDocumentMain.getId());
// updateVO.setFormData(formDataJson.toJSONString());
// reportDocumentMainService.updateReportDocumentMain(updateVO);
}
// if("true".equals(editFlag)){
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String formData = vo.getFormData();
// JSONObject formDataJson = new JSONObject();
// if(!ObjectUtils.isEmpty(formData))
// formDataJson = JSONObject.parseObject(formData);
// List<ReportDocumentDataDO> dataList = reportDocumentDataService.listByMainDataId(id).getData();
// ReportDocumentTypeDO typeDO = reportDocumentTypeService.getReportDocumentType(reportDocumentMain.getReportDocumentTypeId());
// String customConfig = typeDO.getCustomConfig();
// String defaultConclusion = "";
// if(!ObjectUtils.isEmpty(customConfig)){
// JSONObject config = JSONObject.parseObject(customConfig);
// defaultConclusion = config.getString("defaultConclusion");
// }
// formDataJson.put("conclusion", defaultConclusion);
// if(!dataList.isEmpty())
// formDataJson.put("sampleName", dataList.get(0).getSampleName());
// //处理检测标准
// String standard = assembleStandard(dataList);
// formDataJson.put("standard", standard);
// formDataJson.put("reportTime", sdf.format(new Date()));
// vo.setFormData(formDataJson.toJSONString());
// }
return success(vo);
}
private String assembleStandard(List<ReportDocumentDataDO> dataList){
Set<String> standardSet = new HashSet<>();
for(ReportDocumentDataDO data : dataList){
String content = data.getDocumentContent();
if(ObjectUtils.isEmpty( content))
continue;
JSONObject json = JSONObject.parseObject(content);
for(String key : json.keySet()){
JSONObject obj = json.getJSONObject(key);
String methodName = obj.getString("methodName");
if(ObjectUtils.isEmpty(methodName))
continue;
standardSet.add(methodName);
}
}
if(standardSet.isEmpty())
return "";
return String.join(",", standardSet);
}
@GetMapping("/page")
@Operation(summary = "获得检测报告业务分页")
//@PreAuthorize("@ss.hasPermission('qms:report-document-main:query')")

View File

@@ -43,4 +43,16 @@ public class ReportDocumentDataPageReqVO extends PageParam {
@Schema(description = "样品大类名称")
private String baseSampleName;
@Schema(description = "样品类型key")
private String sampleTypeKey;
@Schema(description = "委托样品名称")
private String entrustSampleName;
@Schema(description = "委托样品编号")
private String entrustSampleCode;
@Schema(description = "排序")
private Integer sort;
}

View File

@@ -56,6 +56,22 @@ public class ReportDocumentDataRespVO {
@ExcelProperty("样品大类名称")
private String baseSampleName;
@Schema(description = "样品类型key")
@ExcelProperty("样品类型key")
private String sampleTypeKey;
@Schema(description = "委托样品名称")
@ExcelProperty("委托样品名称")
private String entrustSampleName;
@Schema(description = "委托样品编号")
@ExcelProperty("委托样品编号")
private String entrustSampleCode;
@Schema(description = "排序")
@ExcelProperty("排序")
private Integer sort;
//==================扩展字段===========
@Schema(description = "样品创建时间")

View File

@@ -40,4 +40,16 @@ public class ReportDocumentDataSaveReqVO {
@Schema(description = "样品大类名称")
private String baseSampleName;
@Schema(description = "样品类型key")
private String sampleTypeKey;
@Schema(description = "委托样品名称")
private String entrustSampleName;
@Schema(description = "委托样品编号")
private String entrustSampleCode;
@Schema(description = "排序")
private Integer sort;
}

View File

@@ -75,8 +75,26 @@ public class ReportDocumentDataDO extends BusinessBaseDO {
@TableField("BSE_SMP_NAME")
private String baseSampleName;
//样品类型key
@TableField("SMP_TP_KY")
private String sampleTypeKey;
/**
* 委托样品名称
*/
@TableField("ENTT_SMP_NAME")
private String entrustSampleName;
/**
* 委托样品编号
*/
@TableField("ENTT_SMP_CD")
private String entrustSampleCode;
/**
* 排序
*/
@TableField("SRT")
private Integer sort;
//==================扩展字段===========
//样品创建时间

View File

@@ -19,7 +19,7 @@ import java.util.List;
*/
public interface ReportDocumentDataService {
CommonResult<List<JSONObject>> assembleDynamicData(ReportDocumentMainDO mainData, ReportDocumentTypeDO reportConfig);
CommonResult<JSONArray> assembleDynamicData(ReportDocumentMainDO mainData, ReportDocumentTypeDO reportConfig, String pageFlag);
CommonResult<List<ReportDocumentDataDO>> listByMainDataId(Long mainDataId);
CommonResult<Long> countMainDataId(Long mainDataId);

View File

@@ -27,6 +27,7 @@ import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.e
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.REPORT_DOCUMENT_DATA_NOT_EXISTS;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.REPORT_DOCUMENT_TYPE_NOT_EXISTS;
import static com.zt.plat.module.qms.enums.QmsCommonConstant.FIELD_DYNAMIC;
import static com.zt.plat.module.qms.enums.QmsCommonConstant.FIELD_CALCULATED;
import static com.zt.plat.module.qms.enums.QmsCommonConstant.FIELD_FIXED;
/**
@@ -43,10 +44,13 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
private final String colPrefix = "col";
private final String sampleCodeKey = "SMP_CD";
private final String sampleNameKey = "SMP_NAME";
private final String name_code_merge = "merge";
private final String name_code_name = "name";
private final String name_code_code = "code";
private final String name_code_split = "split";
private final String sampleNameAndCodeKey = "SMP_NAME_CD";
private final String entrustSampleNameKey = "ENTT_SMP_NAME";
private final String entrustSampleCodeKey = "ENTT_SMP_CD";
private final String entrustSampleNameCodeKey = "ENTT_SMP_NAME_CD";
private final String rowTypeKey = "rowType"; //行类型
private final String rowTypeTitle = "title"; //行类型-标题
private final String rowTypeLimit = "limit"; //行类型-检出限
private final String rangeKey = "minLimitValue";
private final String emptyText = "以下为空白";
@@ -55,10 +59,16 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
* 组装动态报表数据
* */
@Override
public CommonResult<List<JSONObject>> assembleDynamicData(ReportDocumentMainDO mainData, ReportDocumentTypeDO typeDO) {
public CommonResult<JSONArray> assembleDynamicData(ReportDocumentMainDO mainData, ReportDocumentTypeDO typeDO, String pageFlag) {
if(typeDO == null || typeDO.getConfigReportTypeId() == null)
return CommonResult.error(REPORT_DOCUMENT_TYPE_NOT_EXISTS.getCode(), "报告配置为空,或未配置报表类型,请联系管理员处理!");
String customConfig = typeDO.getCustomConfig();
JSONObject configJson = JSONObject.parseObject(customConfig);
String verticalFlag = configJson.getString("verticalFlag");
String maxRowCountStr = configJson.getString("maxRowCount"); //最大行数
Integer maxRowCount = 3;
if(!ObjectUtils.isEmpty(maxRowCountStr))
maxRowCount = Integer.parseInt(maxRowCountStr);
//查询报表字段配置
ConfigReportFieldPageReqVO fieldParam = new ConfigReportFieldPageReqVO();
fieldParam.setConfigReportTypeId(typeDO.getConfigReportTypeId());
@@ -67,6 +77,25 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
if(fieldListAll.isEmpty())
return CommonResult.error(REPORT_DOCUMENT_TYPE_NOT_EXISTS.getCode(), "未配置报表字段,请联系管理员处理!");
List<ReportDocumentDataDO> dataList = listByMainDataId(mainData.getId()).getData();
//拆分dataList按样品分类key拆分
List<List<ReportDocumentDataDO>> dataListGroup = new ArrayList<>();
String[] sampleTypeKeys = new String[]{"inspectionAnalysisSample", "comprehensiveInspectionSample"}; //商检分析样、商检综合样
for(String sampleTypeKey : sampleTypeKeys){
List<ReportDocumentDataDO> dataListByKey = new ArrayList<>();
for(ReportDocumentDataDO dataDO: dataList){
if(sampleTypeKey.equals(dataDO.getSampleTypeKey())){
dataListByKey.add(dataDO);
}
}
if(!dataListByKey.isEmpty())
dataListGroup.add(dataListByKey);
}
if(dataListGroup.isEmpty())
dataListGroup.add(dataList);
JSONArray rowList = new JSONArray();
for(int i = 0; i < dataListGroup.size(); i++){
List<ReportDocumentDataDO> dataListByKey = dataListGroup.get(i);
//处理字段,提取有数据的字段
List<ConfigReportFieldDO> fieldList = new ArrayList<>();
List<String> hasFields = new ArrayList<>();
@@ -82,7 +111,7 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
}
continue;
}
for(ReportDocumentDataDO dataDO : dataList){
for(ReportDocumentDataDO dataDO : dataListByKey){
String documentContent = dataDO.getDocumentContent();
JSONObject dataJson = JSONObject.parseObject(documentContent);
if(dataJson == null)
@@ -95,10 +124,120 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
}
}
}
assembleStep1(rowList, fieldList, dataListByKey, customConfig, i); //处理后的组数对象
}
if(!"1".equals(verticalFlag)){
//处理空数据,填充/
rowList = assembleEmpty(configJson, rowList);
//组装数据
List<JSONObject> step1Arr = assembleStep1(fieldList, dataList, customConfig); //处理后的组数对象
return CommonResult.success(step1Arr);
//处理数据分页
if("1".equals(pageFlag)){
JSONArray pageRowList = assemblePageRowList(rowList, configJson);
return CommonResult.success(pageRowList);
}
}
//以下为空白
if(rowList.size() < maxRowCount){
JSONObject t = new JSONObject();
t.put(colPrefix + "01", emptyText);
rowList.add(t.clone());
}
while(rowList.size() < maxRowCount){
JSONObject t = new JSONObject();
t.put(colPrefix + "01", " ");
rowList.add(t.clone());
}
return CommonResult.success(rowList);
}
/*
* 处理分页
*
* */
private JSONArray assemblePageRowList(JSONArray rowList, JSONObject configJson){
JSONArray pageRowList = new JSONArray();
Integer maxRowCount = 20;
String maxRowCountStr = configJson.getString("maxRowCount"); //最大行数
if(!ObjectUtils.isEmpty(maxRowCountStr)) maxRowCount = Integer.parseInt(maxRowCountStr);
int rowLength = rowList.size();
if(rowLength <= maxRowCount){
pageRowList.add(rowList);
return pageRowList;
}
JSONArray remainingRows = new JSONArray();
remainingRows.addAll(rowList);
while(remainingRows.size() > 0){
JSONArray pageRow = new JSONArray();
for(int i = 0; i < maxRowCount ; i++){
if(remainingRows.isEmpty())
break;
pageRow.add(remainingRows.getJSONObject(0));
remainingRows.remove(0);
}
/*
在每页开头插入“标题行”
如果最后一行是标题,直接移到下一页;如果不是,往上寻找最近的“标题行”
*/
JSONObject lastTitleRow = pageRow.getJSONObject(pageRow.size() - 1);
String rowType = lastTitleRow.getString(rowTypeKey);
if(rowTypeTitle.equals(rowType)){
//如果最后一行是“标题行”,移除
pageRow.remove(pageRow.size() - 1);
}else {
for(int i = pageRow.size() - 1; i >= 0; i--){
JSONObject t = pageRow.getJSONObject(i);
rowType = t.getString(rowTypeKey);
if(rowTypeTitle.equals(rowType)){
lastTitleRow = t;
break;
}
}
}
if(!remainingRows.isEmpty()){
JSONObject firstRemainingRow = remainingRows.getJSONObject(0);
if(!rowTypeTitle.equals(firstRemainingRow.getString(rowTypeKey))){
remainingRows.add(0, lastTitleRow);
}
}
pageRowList.add(pageRow);
}
//在最后一页插入“以下为空”
JSONArray pageRow = pageRowList.getJSONArray(pageRowList.size() - 1);
if(pageRow.size() < maxRowCount){
JSONObject t = new JSONObject();
t.put(colPrefix + "01", emptyText);
pageRow.add(t.clone());
}
return pageRowList;
}
private JSONArray assembleEmpty(JSONObject configJson, JSONArray rowList){
JSONArray fixedCol = configJson.getJSONArray("fixedCol"); //固定列,举例:["SMP_NAME", "SMP_CD"]
if(fixedCol == null) fixedCol = new JSONArray();
JSONArray fixedColRight = configJson.getJSONArray("fixedColRight"); //右侧固定列
if(fixedColRight == null) fixedColRight = new JSONArray();
String dynamicColCountStr = configJson.getString("dynamicColCount"); //动态列(检测项)数量
Integer dynamicColCount = 0;
Integer fixedColCount_left = 0;
Integer fixedColCount_right = 0;
if(!ObjectUtils.isEmpty(dynamicColCountStr)) dynamicColCount = Integer.parseInt(dynamicColCountStr);
fixedColCount_left = fixedCol.size();
fixedColCount_right = fixedColRight.size();
for(int i = 0; i < rowList.size(); i++){
JSONObject row = rowList.getJSONObject(i);
if(" ".equals(row.getString(colPrefix + "01")))
continue;
int colIndex = 1;
while(colIndex <= dynamicColCount){
String colKey = colPrefix + parseNumToString(colIndex + fixedColCount_left, 2);
if(!row.containsKey(colKey))
row.put(colKey, "/");
colIndex ++;
}
}
return rowList;
}
/**
@@ -106,130 +245,193 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
* @param fieldList 要显示的字段列表。固定字段在最前
* @param customConfig 报告配置项
* */
private List<JSONObject> assembleStep1(List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, String customConfig){
private JSONArray assembleStep1(JSONArray rowList, List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, String customConfig, int groupIndex){
if(dataList.isEmpty())
return new ArrayList<>();
return new JSONArray();
JSONObject jsonObject = JSONObject.parseObject(customConfig);
Integer dynamicColCount = 3;
Integer fixedColCount = 0;
Integer maxRowCount = 3;
Integer fixedColCount_left = 0;
String dynamicColCountStr = jsonObject.getString("dynamicColCount"); //动态列(检测项)数量
// String fixedColCountStr = jsonObject.getString("fixedColCount"); //固定列(样品名称、样品编号等)数量
JSONArray fixedCol = jsonObject.getJSONArray("fixedCol"); //固定列,举例:["sampleName", "sampleCode"]
JSONArray fixedColShow = jsonObject.getJSONArray("fixedColShow"); //固定列,举例:["产品名称", "编 号"]
String maxRowCountStr = jsonObject.getString("maxRowCount"); //最大行数
// String nameCodeType = jsonObject.getString("nameCodeType"); //名称、编号处理方式merge-合并, name-只显示名称, code-只显示编号, split-2列分开显示
JSONArray fixedCol = jsonObject.getJSONArray("fixedCol"); //固定列,举例:["SMP_NAME", "SMP_CD"]
if(fixedCol == null) fixedCol = new JSONArray();
JSONArray fixedColRight = jsonObject.getJSONArray("fixedColRight"); //右侧固定列
if(fixedColRight == null) fixedColRight = new JSONArray();
String hasRemark = jsonObject.getString("hasRemark"); //是否有备注
String hasRange = jsonObject.getString("hasRange"); //是否有检出限
String verticalFlag = jsonObject.getString("verticalFlag"); //vertical-纵表, 否则为横表
String fixedFields = jsonObject.getString("fixedFields"); //固定检测项。如果固定检测项则以检测项作为数据Key
if("1".equals(verticalFlag)){ //纵表
return assembleVerticalData(fieldList, dataList, customConfig);
return assembleVerticalData(rowList, fieldList, dataList, customConfig);
}
if(!ObjectUtils.isEmpty(fixedFields)){ //固定列
return assembleFixedFieldsData(fieldList, dataList, customConfig);
return assembleFixedFieldsData(rowList, fieldList, dataList, customConfig);
}
if(!ObjectUtils.isEmpty(dynamicColCountStr)) dynamicColCount = Integer.parseInt(dynamicColCountStr);
if(fixedCol != null) fixedColCount = fixedCol.size();
if(!ObjectUtils.isEmpty(maxRowCountStr)) maxRowCount = Integer.parseInt(maxRowCountStr);
Integer eleCount = 0; //元素数量,即元素列总数
for(ConfigReportFieldDO fieldDO : fieldList){
String fieldType = fieldDO.getFieldType();
if(FIELD_DYNAMIC.equals(fieldType))
eleCount ++;
}
Integer rowCountOneSample = eleCount / dynamicColCount + (eleCount % dynamicColCount == 0 ? 0 : 1); //每个样品要占的行数
Integer colCountOneSample = fixedColCount + dynamicColCount; //每个样品要占的列数
Integer dataLength = dataList.size();
Integer emptyRowCount = dataLength < maxRowCount ? 1 : 0; //空行数
// Integer allRowCount = 1 + dataLength + emptyRowCount + 1; //标题 + 样品数 + 空行
if("1".equals(hasRange))
emptyRowCount ++;
// if(rowCountOneSample > 1){
// allRowCount = (1 + dataLength + emptyRowCount + 9) * rowCountOneSample + emptyRowCount; //(标题 + 样品数 + 空行) * 但样品行数 + 末尾行
// }
List<JSONObject> rowList = new ArrayList<>();
for(int i = 0; i < maxRowCount; i++){
JSONObject row = new JSONObject();
row.put("col01", " ");
rowList.add( row);
}
fixedColCount_left = fixedCol.size();
Integer colCountOneSample = fixedColCount_left + dynamicColCount; //每个样品要占的列数
//=============处理表头============
JSONObject t = new JSONObject();
JSONObject r = new JSONObject(); //检出限
int rowAssist = 1;
int colIndex = fixedColCount + 1;
boolean lastObjFlag = true;
//取第一行数据,用来处理检出限
JSONObject firstData = new JSONObject(); //取第一行数据,用于处理检出限
if(dataLength > 0)
firstData = JSONObject.parseObject(dataList.get(0).getDocumentContent());
JSONObject firstData = JSONObject.parseObject(dataList.get(0).getDocumentContent()); //取第一行数据,用于处理检出限
if("1".equals(hasRemark)){
//在最后一列增加备注
t.put(colPrefix + parseNumToString(colCountOneSample + 1, 2), "备注");
}
for(ConfigReportFieldDO fieldDO : fieldList){
//取fieldList的动态字段并分组
List<List<ConfigReportFieldDO>> dynamicFieldListGroup = new ArrayList<>();
int fieldIndex = 1;
List<ConfigReportFieldDO> list = new ArrayList<>();
for(int i = 0; i < fieldList.size(); i++){
ConfigReportFieldDO fieldDO = fieldList.get(i);
String fieldType = fieldDO.getFieldType();
String field = fieldDO.getField();
if(FIELD_FIXED.equals(fieldType)){ //这里只处理动态列。固定列在 addTitleToRowList 处理
if(FIELD_FIXED.equals(fieldType))
continue;
list.add(fieldDO);
if(fieldIndex % dynamicColCount == 0){
dynamicFieldListGroup.add(list);
list = new ArrayList<>();
}
fieldIndex ++;
}
if(!list.isEmpty())
dynamicFieldListGroup.add(list);
int colIndex = 1;
for(int i = 0; i < dynamicFieldListGroup.size(); i++){
List<ConfigReportFieldDO> dynamicFieldList = dynamicFieldListGroup.get(i);
t = new JSONObject();
t.put(rowTypeKey, rowTypeTitle);
r = new JSONObject();
r.put(rowTypeKey, rowTypeLimit);
colIndex = fixedColCount_left + 1; //第二组以后,从固定列数开始
for(ConfigReportFieldDO fieldDO : dynamicFieldList) {
String field = fieldDO.getField();
String fieldName = fieldDO.getFieldName();
String colKey = parseNumToString(colIndex, 2);
t.put(colPrefix + colKey, fieldName);
//查询当前字段的检出限
JSONObject fieldObj = firstData.getJSONObject( field);
JSONObject fieldObj = firstData.getJSONObject(field);
String rangeVal = "";
if(fieldObj != null){
if (fieldObj != null) {
rangeVal = fieldObj.getString(rangeKey);
}
r.put(colPrefix + colKey, rangeVal);
r.put(colPrefix + "01", "方法检出限");
lastObjFlag = true;
if(colIndex % colCountOneSample == 0){
addTitleToRowList(fixedCol, rowAssist, t, dataLength, emptyRowCount, rowList, fieldList);
if("1".equals(hasRange))
addRangeToRowList(rowAssist, r, dataLength, emptyRowCount, rowList);
t = new JSONObject();
r = new JSONObject();
if("1".equals(hasRemark)){
colIndex ++;
}
//处理备注列
if(i == 0 && groupIndex == 0 && "1".equals(hasRemark)){
//在最后一列增加备注
t.put(colPrefix + parseNumToString(colCountOneSample + 1, 2), "备注");
}
rowAssist++;
colIndex = fixedColCount + 1; //第二组以后,从固定列数开始
lastObjFlag = false;
continue;
if(i > 0 || groupIndex > 0){ //插入空行
JSONObject emptyRow = new JSONObject();
emptyRow.put(colPrefix + "01", " ");
rowList.add(emptyRow);
}
colIndex++;
addTitleToRowList(fixedCol, fixedColRight, dynamicColCount, t, rowList, fieldList);
//插入样品数据
addDataToRowList(fixedCol, fixedColRight, dynamicFieldList, dataList, rowList, fixedColCount_left, dynamicColCount, hasRemark);
//检出限
if("1".equals(hasRange)){
rowList.add(r);
}
if(lastObjFlag){
addTitleToRowList(fixedCol, rowAssist, t, dataLength, emptyRowCount, rowList, fieldList);
if("1".equals(hasRange))
addRangeToRowList(rowAssist, r, dataLength, emptyRowCount, rowList);
}
return rowList;
}
//=============处理数据============
int dataIndex = 1;
/**
* @param
*
* */
private void addTitleToRowList(JSONArray fixedCol, JSONArray fixedColRight, Integer dynamicColCount, JSONObject t, JSONArray rowList, List<ConfigReportFieldDO> fieldList){
//处理固定列
int index = 1;
String colKey = "";
//固定列-左
for(int i=0;i<fixedCol.size();i++) {
String col = fixedCol.getString(i);
for(ConfigReportFieldDO fieldDO : fieldList) {
colKey = "";
String fieldName = fieldDO.getFieldName();
String fieldType = fieldDO.getFieldType();
String field = fieldDO.getField();
if (FIELD_DYNAMIC.equals(fieldType) || FIELD_CALCULATED.equals(fieldType))
continue;
if(sampleNameAndCodeKey.equals( col) && sampleNameAndCodeKey.equals(field)
|| sampleNameKey.equals( col) && sampleNameKey.equals(field)
|| sampleCodeKey.equals( col) && sampleCodeKey.equals(field)
|| entrustSampleNameKey.equals( col) && entrustSampleNameKey.equals(field)
|| entrustSampleCodeKey.equals( col) && entrustSampleCodeKey.equals(field)
|| entrustSampleNameCodeKey.equals( col) && entrustSampleNameCodeKey.equals(field)){
colKey = parseNumToString(index, 2);
}
if(!ObjectUtils.isEmpty(colKey)){
t.put(colPrefix + colKey, fieldName);
index++;
}
}
}
//固定列-右
index = fixedCol.size() + dynamicColCount + 1;
for(int i=0;i<fixedColRight.size();i++) {
String col = fixedColRight.getString(i);
for(ConfigReportFieldDO fieldDO : fieldList) {
colKey = "";
String fieldName = fieldDO.getFieldName();
String fieldType = fieldDO.getFieldType();
String field = fieldDO.getField();
if (FIELD_DYNAMIC.equals(fieldType) || FIELD_CALCULATED.equals(fieldType))
continue;
if(sampleNameAndCodeKey.equals( col) && sampleNameAndCodeKey.equals(field)
|| sampleNameKey.equals( col) && sampleNameKey.equals(field)
|| sampleCodeKey.equals( col) && sampleCodeKey.equals(field)
|| entrustSampleNameKey.equals( col) && entrustSampleNameKey.equals(field)
|| entrustSampleCodeKey.equals( col) && entrustSampleCodeKey.equals(field)
|| entrustSampleNameCodeKey.equals( col) && entrustSampleNameCodeKey.equals(field)){
colKey = parseNumToString(index, 2);
}
if(!ObjectUtils.isEmpty(colKey)){
t.put(colPrefix + colKey, fieldName);
index++;
}
}
}
rowList.add(t.clone());
}
//添加行数据
private void addDataToRowList(JSONArray fixedCol, JSONArray fixedColRight, List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, JSONArray rowList, int fixedColCount, int dynamicColCount, String hasRemark){
int colIndex = 0;
JSONObject t = new JSONObject();
for(ReportDocumentDataDO dataDO : dataList){
String documentContent = dataDO.getDocumentContent();
String externalContent = dataDO.getExternalContent();
JSONObject s = JSONObject.parseObject(documentContent);
JSONObject e = new JSONObject();
if(!ObjectUtils.isEmpty(externalContent)){
e = JSONObject.parseObject(externalContent);
//判断样品是否有值,若无值则跳过
boolean hasValue = false;
for(ConfigReportFieldDO fieldDO : fieldList) {
String fieldType = fieldDO.getFieldType();
if (FIELD_FIXED.equals(fieldType)) //这里只处理动态列。固定列在 addDataToRowList 处理
continue;
String field = fieldDO.getField();
JSONObject fieldObj = s.getJSONObject(field);
String fieldValue = "";
if (fieldObj != null)
fieldValue = fieldObj.getString("fieldValue");
if(!ObjectUtils.isEmpty(fieldValue))
hasValue = true;
}
if(!hasValue)
continue;
JSONObject e = new JSONObject();
if(!ObjectUtils.isEmpty(externalContent))
e = JSONObject.parseObject(externalContent);
String remark = e.getString("remark");
colIndex = fixedColCount + 1;
rowAssist = 1;
t = new JSONObject();
int colCountOneSample = fixedColCount + dynamicColCount;
if("1".equals(hasRemark)){
t.put(colPrefix + parseNumToString(colCountOneSample + 1, 2), remark);
}
@@ -249,157 +451,63 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
}
if(!ObjectUtils.isEmpty(mathSymbol) && !"=".equals(mathSymbol))
fieldValue = mathSymbol + fieldValue;
if(ObjectUtils.isEmpty(fieldValue))
fieldValue = "/";
t.put(colPrefix + colKey, fieldValue);
lastObjFlag = true;
if(colIndex % colCountOneSample == 0){
addFixedDataToRowList(fixedCol, dataDO, rowAssist, t, dataLength, emptyRowCount, dataIndex, rowList, fieldList);
t = new JSONObject();
if("1".equals(hasRemark)){
t.put(colPrefix + parseNumToString(colCountOneSample + 1, 2), remark);
}
rowAssist++;
colIndex = fixedColCount + 1; //第二组以后,从固定列数开始
lastObjFlag = false;
continue;
}
colIndex++;
}
if(lastObjFlag){
addFixedDataToRowList(fixedCol, dataDO, rowAssist, t, dataLength, emptyRowCount, dataIndex, rowList, fieldList);
}
dataIndex ++;
}
//==============以下为空白=================
//实际使用行数小于总行数,显示“”以下为空白“
if(dataLength < maxRowCount){
String colKey = colPrefix + "01";
t = new JSONObject();
t.put(colKey, emptyText);
int rowIndex = (dataLength + emptyRowCount) * (rowAssist) + 2;
if(rowAssist == 1)
rowIndex = dataLength + emptyRowCount;
if(rowCountOneSample == 1)
rowIndex = dataLength + 2;
rowList.set(rowIndex, t.clone());
}
//前面的计数是从1开始移除第一个元素
if(!rowList.isEmpty())
rowList.remove(0);
return rowList;
}
/**
* @param
*
* */
private void addTitleToRowList(JSONArray fixedCol, Integer rowAssist, JSONObject t, Integer dataLength, Integer emptyRowCount, List<JSONObject> rowList, List<ConfigReportFieldDO> fieldList){
int rowIndex = (1 + dataLength + emptyRowCount) * (rowAssist - 1) + 1; //(标题 + 数据行 + 空行)
//处理固定列
int index = 1;
String colKey = "";
for(int i=0;i<fixedCol.size();i++) {
String col = fixedCol.getString(i);
for(ConfigReportFieldDO fieldDO : fieldList) {
String fieldName = fieldDO.getFieldName();
String fieldType = fieldDO.getFieldType();
String field = fieldDO.getField();
if (FIELD_DYNAMIC.equals(fieldType))
continue;
if("sampleNameCode".equals( col) && "SMP_NAME_CD".equals(field)){
// String sampleNameCode = "样品名称及编号";
// String sampleNameCode = fieldName;
colKey = parseNumToString(index, 2);
t.put(colPrefix + colKey, fieldName);
index++;
continue;
}
if("sampleName".equals( col) && "SMP_NAME".equals(field)){
colKey = parseNumToString(index, 2);
t.put(colPrefix + colKey, fieldName);
index++;
continue;
}
if("sampleCode".equals( col) && "SMP_CD".equals(field)){
colKey = parseNumToString(index, 2);
t.put(colPrefix + colKey, fieldName);
index++;
continue;
}
}
}
rowList.set(rowIndex, t.clone());
}
/**
* 处理检出限
* 如果是
* */
private void addRangeToRowList(Integer rowAssist, JSONObject r, Integer dataLength, Integer emptyRowCount, List<JSONObject> rowList){
int rowIndex = (dataLength + emptyRowCount + 1 ) * (rowAssist);
rowList.set(rowIndex, r.clone());
}
/**
* 添加固定列的数据
* */
private void addFixedDataToRowList(JSONArray fixedCol, ReportDocumentDataDO dataDO, Integer rowAssist, JSONObject t, Integer dataLength, Integer emptyRowCount, Integer dataIndex, List<JSONObject> rowList, List<ConfigReportFieldDO> fieldList){
int rowIndex = (1 + dataLength + emptyRowCount) * (rowAssist - 1) + dataIndex + 1; //(标题 + 数据行 + 空行)
t.put("id", dataDO.getId());
//处理固定列
//处理固定列-左
int index = 1;
//处理固定列
String colKey = "";
if(fixedCol != null && !fixedCol.isEmpty()){
for(int i=0;i<fixedCol.size();i++){
String col = fixedCol.getString(i);
colKey = parseNumToString(index, 2);
if("sampleName".equals(col)){
if(sampleNameKey.equals(col)){
t.put(colPrefix + colKey, dataDO.getSampleName());
}
else if("sampleCode".equals(col)){
else if(sampleCodeKey.equals(col)){
t.put(colPrefix + colKey, dataDO.getSampleCode());
}
else if("sampleNameCode".equals( col)){
else if(sampleNameAndCodeKey.equals( col)){
t.put(colPrefix + colKey, dataDO.getSampleName() + " " + dataDO.getSampleCode());
}else if(entrustSampleNameKey.equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleName());
}else if(entrustSampleCodeKey.equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleCode());
}else if(entrustSampleNameCodeKey.equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleName() + " " + dataDO.getEntrustSampleCode());
}
index ++;
}
//处理固定列-右
index = fixedColRight.size() + dynamicColCount + 1;
for(int i=0;i<fixedColRight.size();i++){
String col = fixedColRight.getString(i);
colKey = parseNumToString(index, 2);
if(sampleNameKey.equals(col)){
t.put(colPrefix + colKey, dataDO.getSampleName());
}
// if(name_code_merge.equals(nameCodeType)){
// String merge = dataDO.getSampleName() + " " + dataDO.getSampleCode();
// t.put(colPrefix + colKey, merge);
// rowList.set(rowIndex, t.clone());
// return;
// }
// if(name_code_name.equals(nameCodeType)){
// t.put(colPrefix + colKey, dataDO.getSampleName());
// rowList.set(rowIndex, t.clone());
// return;
// }
// if(name_code_code.equals(nameCodeType)){
// t.put(colPrefix + colKey, dataDO.getSampleCode());
// rowList.set(rowIndex, t.clone());
// return;
// }
// for(ConfigReportFieldDO fieldDO : fieldList){
// String fieldName = fieldDO.getFieldName();
// String fieldType = fieldDO.getFieldType();
// String field = fieldDO.getField();
// if(FIELD_FIXED.equals(fieldType)){
// colKey = parseNumToString(index, 2);
// String val = "";
// if(sampleNameKey.equals( field))
// val = dataDO.getSampleName();
// else if(sampleCodeKey.equals( field))
// val = dataDO.getSampleCode();
// t.put(colPrefix + colKey, val);
// index++;
// }
// }
rowList.set(rowIndex, t.clone());
else if(sampleCodeKey.equals(col)){
t.put(colPrefix + colKey, dataDO.getSampleCode());
}
else if(sampleNameAndCodeKey.equals( col)){
t.put(colPrefix + colKey, dataDO.getSampleName() + " " + dataDO.getSampleCode());
}else if(entrustSampleNameKey.equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleName());
}else if(entrustSampleCodeKey.equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleCode());
}else if(entrustSampleNameCodeKey.equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleName() + " " + dataDO.getEntrustSampleCode());
}
index ++;
}
//添加入行数据
rowList.add(t.clone());
}
}
private String parseNumToString(int num, int len){
StringBuilder sb = new StringBuilder();
for(int i = 0; i < len - String.valueOf(num).length(); i++){
@@ -411,7 +519,7 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
/**
* 组装固定检测项的数据以检测项作为数据Key
* */
private List<JSONObject> assembleFixedFieldsData(List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, String customConfig){
private JSONArray assembleFixedFieldsData(JSONArray rowList, List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, String customConfig){
JSONObject jsonObject = JSONObject.parseObject(customConfig);
Integer maxRowCount = 3;
@@ -421,8 +529,6 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
String fixedFields = jsonObject.getString("fixedFields"); //固定检测项。如果固定检测项则以检测项作为数据Key
JSONArray fixedFieldsArray = JSONArray.parseArray(fixedFields);
if(!ObjectUtils.isEmpty(maxRowCountStr)) maxRowCount = Integer.parseInt(maxRowCountStr);
List<JSONObject> rowList = new ArrayList<>();
for(int i = 0; i < maxRowCount; i++){
JSONObject row = new JSONObject();
row.put("sampleNameCode", " ");
@@ -483,17 +589,15 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
* 组装纵表数据
* 第1列固定为元素 第2列方法检出限%);第三列开始为各个样品
* */
private List<JSONObject> assembleVerticalData(List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, String customConfig){
private JSONArray assembleVerticalData(JSONArray rowList, List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, String customConfig){
JSONObject jsonObject = JSONObject.parseObject(customConfig);
Integer dynamicColCount = 3;
Integer fixedColCount = 2;
Integer maxRowCount = 3;
String dynamicColCountStr = jsonObject.getString("dynamicColCount"); //动态列(检测项)数量
String fixedColCountStr = jsonObject.getString("fixedColCount"); //固定列(样品名称、样品编号等)数量
String maxRowCountStr = jsonObject.getString("maxRowCount"); //最大行数
String nameCodeType = jsonObject.getString("nameCodeType"); //名称、编号处理方式merge-合并, name-只显示名称, code-只显示编号, split-2列分开显示
Integer fixedColCount = 1;
Integer maxRowCount = 20;
String hasRemark = jsonObject.getString("hasRemark"); //是否有备注
String hasRange = jsonObject.getString("hasRange"); //是否有检出限
if("1".equals(hasRange))
fixedColCount ++;
//取数据第一行,用于处理方法检出限
String content = "";
if(!ObjectUtils.isEmpty(dataList))
@@ -502,11 +606,14 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
if(!ObjectUtils.isEmpty(content)){
firstData = JSONObject.parseObject(content);
}
List<JSONObject> rowList = new ArrayList<>();
//处理第一行-样品编号
int colIndex = fixedColCount + 1;
int rowIndex = 1;
JSONObject t = new JSONObject();
t.put(colPrefix + "01", "元素");
if("1".equals(hasRange)){
t.put(colPrefix + "02", "方法检出限");
}
for(ReportDocumentDataDO dataDO : dataList){
String colKey = parseNumToString(colIndex, 2);
t.put(colPrefix + colKey, dataDO.getSampleCode());
@@ -565,7 +672,7 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
public CommonResult<List<ReportDocumentDataDO>> listByMainDataId(Long mainDataId) {
QueryWrapper<ReportDocumentDataDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("MAIN_ID", mainDataId);
queryWrapper.orderByAsc("ID");
queryWrapper.orderByAsc("SRT");
List<ReportDocumentDataDO> list = reportDocumentDataMapper.selectList(queryWrapper);
return CommonResult.success(list);
}

View File

@@ -22,6 +22,8 @@ public interface ReportDocumentMainCorrelationService {
void deleteByMainId(Long mainId);
void insertBatch(List<ReportDocumentMainCorrelationDO> list);
/**
* 创建检测报告关系表
*

View File

@@ -59,6 +59,11 @@ public class ReportDocumentMainCorrelationServiceImpl implements ReportDocumentM
reportDocumentMainCorrelationMapper.delete(query);
}
@Override
public void insertBatch(List<ReportDocumentMainCorrelationDO> list) {
reportDocumentMainCorrelationMapper.insertBatch(list);
}
@Override
public void updateReportDocumentMainCorrelation(ReportDocumentMainCorrelationSaveReqVO updateReqVO) {
// 校验存在

View File

@@ -3,6 +3,7 @@ package com.zt.plat.module.qms.business.reportdoc.service;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayReportDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.*;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO;
import jakarta.validation.Valid;
@@ -23,7 +24,7 @@ public interface ReportDocumentMainService {
CommonResult<String> execAddDataByEntrust(ReportDocumentMainSaveReqVO reqVO);
//添加数据到报告-按表表数据
CommonResult<String> execAddByBusinessAssayReportData(List<BusinessAssayReportDataDO> assayReportDataList, Long id);
CommonResult<String> execAddByBusinessAssayReportData(List<BusinessAssayReportDataDO> assayReportDataList, Long id, List<BusinessSampleEntrustRegistrationDO> entrustList);
//移除数据
CommonResult<String> execRemoveData(ReportDocumentMainSaveReqVO reqVO);

View File

@@ -17,12 +17,15 @@ import com.zt.plat.module.qms.api.task.BMPCallbackInterface;
import com.zt.plat.module.qms.api.task.dto.QmsBpmDTO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayReportDataPageReqVO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayReportDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
import com.zt.plat.module.qms.business.bus.service.BusinessAssayReportDataService;
import com.zt.plat.module.qms.business.bus.service.BusinessSampleEntrustRegistrationService;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigUserSignatureDO;
import com.zt.plat.module.qms.business.config.service.ConfigUserSignatureService;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.*;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentDataDO;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainCorrelationDO;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentTypeDO;
import com.zt.plat.module.qms.business.reportdoc.dal.mapper.ReportDocumentMainMapper;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO;
import com.zt.plat.module.qms.enums.QmsBpmConstant;
@@ -35,10 +38,7 @@ import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0;
@@ -62,7 +62,10 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
@Resource private BpmProcessInstanceApi bpmProcessInstanceApi;
@Resource private BpmTaskApi bpmTaskApi;
@Resource private ReportDocumentMainCorrelationService reportDocumentMainCorrelationService;
@Resource private ReportDocumentTypeService reportDocumentTypeService;
@Resource private ConfigUserSignatureService configUserSignatureService;
@Resource private BusinessSampleEntrustRegistrationService businessSampleEntrustRegistrationService;
/***
* 增加报表数据(按样品)
* 传入报告id、 报表数据ids
@@ -93,14 +96,13 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
}
if(isExist)
return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "报表数据已在本报告使用,请勿重复添加");
// List<BusinessAssayReportDataDO> assayReportDataList = businessAssayReportDataService.listByIds(addReportDataIdList);
BusinessAssayReportDataPageReqVO reportDataQueryVo = new BusinessAssayReportDataPageReqVO();
reportDataQueryVo.setIdList(addReportDataIdList);
reportDataQueryVo.setPageNo(1);
reportDataQueryVo.setPageSize(9999);
PageResult<BusinessAssayReportDataDO> assayReportPage = businessAssayReportDataService.queryWaitingDataForReport( reportDataQueryVo);
List<BusinessAssayReportDataDO> assayReportDataList = assayReportPage.getList();
return execAddByBusinessAssayReportData(assayReportDataList, id);
return execAddByBusinessAssayReportData(assayReportDataList, id, new ArrayList<>());
}
@Override
@@ -108,39 +110,44 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
public CommonResult<String> execAddDataByEntrust(ReportDocumentMainSaveReqVO reqVO) {
Long id = reqVO.getId();
String businessSampleEntrustRegistrationIds = reqVO.getBusinessSampleEntrustRegistrationIds();
if(ObjectUtils.isEmpty(businessSampleEntrustRegistrationIds) || id == null)
if(id == null)
return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "缺少id参数请刷新后重试");
if(ObjectUtils.isEmpty(businessSampleEntrustRegistrationIds))
return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "缺少businessSampleEntrustRegistrationIds参数请刷新后重试");
List<ReportDocumentMainCorrelationDO> reportRelationList = reportDocumentMainCorrelationService.listByMainId(id);
//todo 判断修改的场景。处理方法删除reportRelation、ReportDocumentData
List<Long> businessSampleEntrustRegistrationIdList = new ArrayList<>();
String[] split = businessSampleEntrustRegistrationIds.split(",");
for (String s : split) {
Long aLong = Long.valueOf(s);
businessSampleEntrustRegistrationIdList.add(aLong);
}
List<BusinessSampleEntrustRegistrationDO> entrustList = businessSampleEntrustRegistrationService.listByIds(businessSampleEntrustRegistrationIdList);
BusinessAssayReportDataPageReqVO reportDataQueryVo = new BusinessAssayReportDataPageReqVO();
reportDataQueryVo.setBusinessSampleEntrustRegistrationIdList(businessSampleEntrustRegistrationIdList);
reportDataQueryVo.setPageNo(1);
reportDataQueryVo.setPageSize(9999);
PageResult<BusinessAssayReportDataDO> assayReportPage = businessAssayReportDataService.queryWaitingDataForReport( reportDataQueryVo);
List<BusinessAssayReportDataDO> assayReportDataList = assayReportPage.getList();
CommonResult<String> ret = execAddByBusinessAssayReportData(assayReportDataList, id);
CommonResult<String> ret = execAddByBusinessAssayReportData(assayReportDataList, id, entrustList);
if(!ret.isSuccess())
return ret;
//保存报告关系表
List<ReportDocumentMainCorrelationDO> correlationList = new ArrayList<>();
for(Long businessSampleEntrustRegistrationId : businessSampleEntrustRegistrationIdList){
ReportDocumentMainCorrelationSaveReqVO correlationEntity = new ReportDocumentMainCorrelationSaveReqVO();
ReportDocumentMainCorrelationDO correlationEntity = new ReportDocumentMainCorrelationDO();
correlationEntity.setMainId( id);
correlationEntity.setCorrelationId(businessSampleEntrustRegistrationId);
correlationEntity.setCorrelationType(ReportDocumentMainCorrelationService.CorrelationType_entrust);
reportDocumentMainCorrelationService.createReportDocumentMainCorrelation(correlationEntity);
correlationList.add(correlationEntity);
}
if(!correlationList.isEmpty())
reportDocumentMainCorrelationService.insertBatch(correlationList);
return CommonResult.success("操作成功");
}
@Override
public CommonResult<String> execAddByBusinessAssayReportData(List<BusinessAssayReportDataDO> assayReportDataList, Long id){
@Transactional(rollbackFor = Exception.class)
public CommonResult<String> execAddByBusinessAssayReportData(List<BusinessAssayReportDataDO> assayReportDataList, Long id, List<BusinessSampleEntrustRegistrationDO> entrustList){
if(ObjectUtils.isEmpty(assayReportDataList))
return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "您选择的委托还没产生可编制报告的数据,请稍后重试!");
List<ReportDocumentDataDO> insertList = new ArrayList<>();
@@ -152,16 +159,75 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
reportDocumentDataDO.setSampleName(assayReportData.getSampleName());
reportDocumentDataDO.setBaseSampleName(assayReportData.getBaseSampleName());
reportDocumentDataDO.setDocumentContent(assayReportData.getAssayData());
reportDocumentDataDO.setSampleTypeKey(assayReportData.getSampleTypeKey());
reportDocumentDataDO.setEntrustSampleCode(assayReportData.getEntrustSampleCode());
reportDocumentDataDO.setEntrustSampleName(assayReportData.getEntrustSampleName());
reportDocumentDataDO.setSort(assayReportData.getEntrustDetailSort());
insertList.add(reportDocumentDataDO);
}
if(!insertList.isEmpty())
reportDocumentDataService.insertBatch(insertList);
ReportDocumentMainDO reportDocumentMainDO = reportDocumentMainMapper.selectById(id);
updateCommonField(reportDocumentMainDO);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formData = reportDocumentMainDO.getFormData();
JSONObject formDataJson = new JSONObject();
if(!ObjectUtils.isEmpty(formData))
formDataJson = JSONObject.parseObject(formData);
ReportDocumentTypeDO typeDO = reportDocumentTypeService.getReportDocumentType(reportDocumentMainDO.getReportDocumentTypeId());
String customConfig = typeDO.getCustomConfig();
String defaultConclusion = "";
if(!ObjectUtils.isEmpty(customConfig)){
JSONObject config = JSONObject.parseObject(customConfig);
defaultConclusion = config.getString("defaultConclusion");
}
formDataJson.put("conclusion", defaultConclusion);
if(!assayReportDataList.isEmpty())
formDataJson.put("sampleName", assayReportDataList.get(0).getSampleName());
//处理检测标准
String standard = assembleStandard(assayReportDataList);
formDataJson.put("standard", standard);
formDataJson.put("reportTime", sdf.format(new Date()));
//委托单号
String entrustCode = "";
if(!ObjectUtils.isEmpty(entrustList)){
for(BusinessSampleEntrustRegistrationDO entrust : entrustList){
entrustCode += entrust.getEntrustNumber() + ",";
break;
}
}
if(!ObjectUtils.isEmpty(entrustCode))
entrustCode = entrustCode.substring(0, entrustCode.length() - 1);
formDataJson.put("entrustCode", entrustCode);
reportDocumentMainDO.setFormData(formDataJson.toJSONString());
reportDocumentMainMapper.updateById(reportDocumentMainDO);
return CommonResult.success("操作成功");
}
//组装检测标准
private String assembleStandard(List<BusinessAssayReportDataDO> dataList){
Set<String> standardSet = new HashSet<>();
for(BusinessAssayReportDataDO data : dataList){
String content = data.getAssayData();
if(ObjectUtils.isEmpty( content))
continue;
JSONObject json = JSONObject.parseObject(content);
for(String key : json.keySet()){
JSONObject obj = json.getJSONObject(key);
String methodName = obj.getString("methodName");
if(ObjectUtils.isEmpty(methodName))
continue;
standardSet.add(methodName);
}
}
if(standardSet.isEmpty())
return "";
return String.join(",", standardSet);
}
@Override
public void updateCommonField(ReportDocumentMainDO reportDocumentMainDO) {
if(reportDocumentMainDO == null)

Some files were not shown because too many files have changed in this diff Show More