feat:报告数据算法逻辑调整

This commit is contained in:
FCL
2025-12-08 17:50:15 +08:00
parent 000cfca842
commit b7f30012c8
14 changed files with 323 additions and 128 deletions

View File

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

View File

@@ -19,6 +19,8 @@ import com.zt.plat.framework.common.pojo.PageParam;
*/ */
public interface BusinessSampleEntrustRegistrationService { public interface BusinessSampleEntrustRegistrationService {
/** /**
* 创建委检登记业务 * 创建委检登记业务
* *
@@ -56,6 +58,8 @@ public interface BusinessSampleEntrustRegistrationService {
*/ */
BusinessSampleEntrustRegistrationDO getBusinessSampleEntrustRegistration(Long id); 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); return businessSampleEntrustRegistrationMapper.selectById(id);
} }
@Override
public List<BusinessSampleEntrustRegistrationDO> listByIds(List<Long> ids) {
return businessSampleEntrustRegistrationMapper.selectByIds(ids);
}
@Override @Override
public PageResult<BusinessSampleEntrustRegistrationExtendRespVO> getBusinessSampleEntrustRegistrationPage(BusinessSampleEntrustRegistrationPageReqVO pageReqVO) { public PageResult<BusinessSampleEntrustRegistrationExtendRespVO> getBusinessSampleEntrustRegistrationPage(BusinessSampleEntrustRegistrationPageReqVO pageReqVO) {
return businessSampleEntrustRegistrationMapper.selectPage(pageReqVO); return businessSampleEntrustRegistrationMapper.selectPage(pageReqVO);

View File

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

View File

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

View File

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

View File

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

View File

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

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_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.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_DYNAMIC;
import static com.zt.plat.module.qms.enums.QmsCommonConstant.FIELD_CALCULATED;
import static com.zt.plat.module.qms.enums.QmsCommonConstant.FIELD_FIXED; import static com.zt.plat.module.qms.enums.QmsCommonConstant.FIELD_FIXED;
/** /**
@@ -43,10 +44,6 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
private final String colPrefix = "col"; private final String colPrefix = "col";
private final String sampleCodeKey = "SMP_CD"; private final String sampleCodeKey = "SMP_CD";
private final String sampleNameKey = "SMP_NAME"; 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 rangeKey = "minLimitValue"; private final String rangeKey = "minLimitValue";
private final String emptyText = "以下为空白"; private final String emptyText = "以下为空白";
@@ -59,6 +56,11 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
if(typeDO == null || typeDO.getConfigReportTypeId() == null) if(typeDO == null || typeDO.getConfigReportTypeId() == null)
return CommonResult.error(REPORT_DOCUMENT_TYPE_NOT_EXISTS.getCode(), "报告配置为空,或未配置报表类型,请联系管理员处理!"); return CommonResult.error(REPORT_DOCUMENT_TYPE_NOT_EXISTS.getCode(), "报告配置为空,或未配置报表类型,请联系管理员处理!");
String customConfig = typeDO.getCustomConfig(); String customConfig = typeDO.getCustomConfig();
JSONObject configJson = JSONObject.parseObject(customConfig);
String maxRowCountStr = configJson.getString("maxRowCount"); //最大行数
Integer maxRowCount = 3;
if(!ObjectUtils.isEmpty(maxRowCountStr))
maxRowCount = Integer.parseInt(maxRowCountStr);
//查询报表字段配置 //查询报表字段配置
ConfigReportFieldPageReqVO fieldParam = new ConfigReportFieldPageReqVO(); ConfigReportFieldPageReqVO fieldParam = new ConfigReportFieldPageReqVO();
fieldParam.setConfigReportTypeId(typeDO.getConfigReportTypeId()); fieldParam.setConfigReportTypeId(typeDO.getConfigReportTypeId());
@@ -78,7 +80,8 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
dataListByKey.add(dataDO); dataListByKey.add(dataDO);
} }
} }
dataListGroup.add(dataListByKey); if(!dataListByKey.isEmpty())
dataListGroup.add(dataListByKey);
} }
if(dataListGroup.isEmpty()) if(dataListGroup.isEmpty())
dataListGroup.add(dataList); dataListGroup.add(dataList);
@@ -115,20 +118,52 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
} }
assembleStep1(rowList, fieldList, dataListByKey, customConfig, i); //处理后的组数对象 assembleStep1(rowList, fieldList, dataListByKey, customConfig, i); //处理后的组数对象
} }
//处理空数据,填充/
rowList = assembleEmpty(configJson, rowList);
//todo 处理数据分页 //todo 处理数据分页
//todo 以下为空白 //以下为空白
// JSONObject t = new JSONObject(); if(rowList.size() < maxRowCount){
// t.put(colPrefix + "01", emptyText); JSONObject t = new JSONObject();
// rowList.add(t.clone()); t.put(colPrefix + "01", emptyText);
rowList.add(t.clone());
//todo 检出限 }
while(rowList.size() < maxRowCount){
JSONObject t = new JSONObject();
t.put(colPrefix + "01", " ");
rowList.add(t.clone());
}
return CommonResult.success(rowList); return CommonResult.success(rowList);
} }
private List<JSONObject> assembleEmpty(JSONObject configJson, List<JSONObject> rowList){
JSONArray fixedCol = configJson.getJSONArray("fixedCol"); //固定列,举例:["sampleName", "sampleCode"]
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(JSONObject row : rowList){
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;
}
/** /**
* 将数据按colCount分组。返回2维数组 * 将数据按colCount分组。返回2维数组
* @param fieldList 要显示的字段列表。固定字段在最前 * @param fieldList 要显示的字段列表。固定字段在最前
@@ -139,11 +174,13 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
return new ArrayList<>(); return new ArrayList<>();
JSONObject jsonObject = JSONObject.parseObject(customConfig); JSONObject jsonObject = JSONObject.parseObject(customConfig);
Integer dynamicColCount = 3; Integer dynamicColCount = 3;
Integer fixedColCount = 0; Integer fixedColCount_left = 0;
Integer maxRowCount = 3;
String dynamicColCountStr = jsonObject.getString("dynamicColCount"); //动态列(检测项)数量 String dynamicColCountStr = jsonObject.getString("dynamicColCount"); //动态列(检测项)数量
JSONArray fixedCol = jsonObject.getJSONArray("fixedCol"); //固定列,举例:["sampleName", "sampleCode"] JSONArray fixedCol = jsonObject.getJSONArray("fixedCol"); //固定列,举例:["sampleName", "sampleCode"]
String maxRowCountStr = jsonObject.getString("maxRowCount"); //最大行数 if(fixedCol == null) fixedCol = new JSONArray();
JSONArray fixedColRight = jsonObject.getJSONArray("fixedColRight"); //右侧固定列
if(fixedColRight == null) fixedColRight = new JSONArray();
String hasRemark = jsonObject.getString("hasRemark"); //是否有备注 String hasRemark = jsonObject.getString("hasRemark"); //是否有备注
String hasRange = jsonObject.getString("hasRange"); //是否有检出限 String hasRange = jsonObject.getString("hasRange"); //是否有检出限
String verticalFlag = jsonObject.getString("verticalFlag"); //vertical-纵表, 否则为横表 String verticalFlag = jsonObject.getString("verticalFlag"); //vertical-纵表, 否则为横表
@@ -155,11 +192,8 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
return assembleFixedFieldsData(fieldList, dataList, customConfig); return assembleFixedFieldsData(fieldList, dataList, customConfig);
} }
if(!ObjectUtils.isEmpty(dynamicColCountStr)) dynamicColCount = Integer.parseInt(dynamicColCountStr); if(!ObjectUtils.isEmpty(dynamicColCountStr)) dynamicColCount = Integer.parseInt(dynamicColCountStr);
if(fixedCol != null) fixedColCount = fixedCol.size(); fixedColCount_left = fixedCol.size();
Integer colCountOneSample = fixedColCount_left + dynamicColCount; //每个样品要占的列数
if(!ObjectUtils.isEmpty(maxRowCountStr)) maxRowCount = Integer.parseInt(maxRowCountStr);
Integer colCountOneSample = fixedColCount + dynamicColCount; //每个样品要占的列数
Integer dataLength = dataList.size();
//=============处理表头============ //=============处理表头============
JSONObject t = new JSONObject(); JSONObject t = new JSONObject();
JSONObject r = new JSONObject(); //检出限 JSONObject r = new JSONObject(); //检出限
@@ -185,12 +219,14 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
} }
fieldIndex ++; fieldIndex ++;
} }
if(!list.isEmpty())
dynamicFieldListGroup.add(list);
int colIndex = 1; int colIndex = 1;
for(int i = 0; i < dynamicFieldListGroup.size(); i++){ for(int i = 0; i < dynamicFieldListGroup.size(); i++){
List<ConfigReportFieldDO> dynamicFieldList = dynamicFieldListGroup.get(i); List<ConfigReportFieldDO> dynamicFieldList = dynamicFieldListGroup.get(i);
t = new JSONObject(); t = new JSONObject();
r = new JSONObject(); r = new JSONObject();
colIndex = fixedColCount + 1; //第二组以后,从固定列数开始 colIndex = fixedColCount_left + 1; //第二组以后,从固定列数开始
for(ConfigReportFieldDO fieldDO : dynamicFieldList) { for(ConfigReportFieldDO fieldDO : dynamicFieldList) {
String field = fieldDO.getField(); String field = fieldDO.getField();
String fieldName = fieldDO.getFieldName(); String fieldName = fieldDO.getFieldName();
@@ -216,13 +252,13 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
emptyRow.put(colPrefix + "01", " "); emptyRow.put(colPrefix + "01", " ");
rowList.add(emptyRow); rowList.add(emptyRow);
} }
addTitleToRowList(fixedCol, t, rowList, fieldList); addTitleToRowList(fixedCol, fixedColRight, dynamicColCount, t, rowList, fieldList);
//插入样品数据 //插入样品数据
addDataToRowList(fixedCol, dynamicFieldList, dataList, rowList, fixedColCount, colCountOneSample, hasRemark); addDataToRowList(fixedCol, fixedColRight, dynamicFieldList, dataList, rowList, fixedColCount_left, dynamicColCount, hasRemark);
} //检出限
//todo 方法检出限 if("1".equals(hasRange)){
if("1".equals(hasRange)){ rowList.add(r);
rowList.add(r); }
} }
return rowList; return rowList;
} }
@@ -231,46 +267,64 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
* @param * @param
* *
* */ * */
private void addTitleToRowList(JSONArray fixedCol, JSONObject t, List<JSONObject> rowList, List<ConfigReportFieldDO> fieldList){ private void addTitleToRowList(JSONArray fixedCol, JSONArray fixedColRight, Integer dynamicColCount, JSONObject t, List<JSONObject> rowList, List<ConfigReportFieldDO> fieldList){
// int rowIndex = (1 + dataLength + emptyRowCount) * (rowAssist - 1) + 1; //(标题 + 数据行 + 空行)
//处理固定列 //处理固定列
//todo 来样名称、来样编号、来样名称编号
int index = 1; int index = 1;
String colKey = ""; String colKey = "";
//固定列-左
for(int i=0;i<fixedCol.size();i++) { for(int i=0;i<fixedCol.size();i++) {
String col = fixedCol.getString(i); String col = fixedCol.getString(i);
for(ConfigReportFieldDO fieldDO : fieldList) { for(ConfigReportFieldDO fieldDO : fieldList) {
colKey = "";
String fieldName = fieldDO.getFieldName(); String fieldName = fieldDO.getFieldName();
String fieldType = fieldDO.getFieldType(); String fieldType = fieldDO.getFieldType();
String field = fieldDO.getField(); String field = fieldDO.getField();
if (FIELD_DYNAMIC.equals(fieldType)) if (FIELD_DYNAMIC.equals(fieldType) || FIELD_CALCULATED.equals(fieldType))
continue; continue;
if("sampleNameCode".equals( col) && "SMP_NAME_CD".equals(field)){ if("sampleNameCode".equals( col) && "SMP_NAME_CD".equals(field)
|| "sampleName".equals( col) && "SMP_NAME".equals(field)
|| "sampleCode".equals( col) && "SMP_CD".equals(field)
|| "entrustSampleName".equals( col) && "ENTT_SMP_NAME".equals(field)
|| "entrustSampleCode".equals( col) && "ENTT_SMP_CD".equals(field)
|| "entrustSampleNameCode".equals( col) && "ENTT_SMP_NAME_CD".equals(field)){
colKey = parseNumToString(index, 2); colKey = parseNumToString(index, 2);
t.put(colPrefix + colKey, fieldName);
index++;
continue;
} }
if("sampleName".equals( col) && "SMP_NAME".equals(field)){ if(!ObjectUtils.isEmpty(colKey)){
colKey = parseNumToString(index, 2); 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("sampleNameCode".equals( col) && "SMP_NAME_CD".equals(field)
|| "sampleName".equals( col) && "SMP_NAME".equals(field)
|| "sampleCode".equals( col) && "SMP_CD".equals(field)
|| "entrustSampleName".equals( col) && "ENTT_SMP_NAME".equals(field)
|| "entrustSampleCode".equals( col) && "ENTT_SMP_CD".equals(field)
|| "entrustSampleNameCode".equals( col) && "ENTT_SMP_NAME_CD".equals(field)){
colKey = parseNumToString(index, 2);
}
if(!ObjectUtils.isEmpty(colKey)){
t.put(colPrefix + colKey, fieldName); t.put(colPrefix + colKey, fieldName);
index++; index++;
continue;
}
if("sampleCode".equals( col) && "SMP_CD".equals(field)){
colKey = parseNumToString(index, 2);
t.put(colPrefix + colKey, fieldName);
index++;
continue;
} }
} }
} }
rowList.add(t.clone()); rowList.add(t.clone());
} }
//添加行数据 //添加行数据
private void addDataToRowList(JSONArray fixedCol, List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, List<JSONObject> rowList, int fixedColCount, int colCountOneSample, String hasRemark){ private void addDataToRowList(JSONArray fixedCol, JSONArray fixedColRight, List<ConfigReportFieldDO> fieldList, List<ReportDocumentDataDO> dataList, List<JSONObject> rowList, int fixedColCount, int dynamicColCount, String hasRemark){
int colIndex = 0; int colIndex = 0;
JSONObject t = new JSONObject(); JSONObject t = new JSONObject();
for(ReportDocumentDataDO dataDO : dataList){ for(ReportDocumentDataDO dataDO : dataList){
@@ -299,6 +353,7 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
String remark = e.getString("remark"); String remark = e.getString("remark");
colIndex = fixedColCount + 1; colIndex = fixedColCount + 1;
t = new JSONObject(); t = new JSONObject();
int colCountOneSample = fixedColCount + dynamicColCount;
if("1".equals(hasRemark)){ if("1".equals(hasRemark)){
t.put(colPrefix + parseNumToString(colCountOneSample + 1, 2), remark); t.put(colPrefix + parseNumToString(colCountOneSample + 1, 2), remark);
} }
@@ -323,28 +378,51 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
t.put(colPrefix + colKey, fieldValue); t.put(colPrefix + colKey, fieldValue);
colIndex++; colIndex++;
} }
//处理固定列
t.put("id", dataDO.getId()); t.put("id", dataDO.getId());
//处理固定列 //处理固定列-左
int index = 1; int index = 1;
//处理固定列
String colKey = ""; String colKey = "";
if(fixedCol != null && !fixedCol.isEmpty()){ for(int i=0;i<fixedCol.size();i++){
for(int i=0;i<fixedCol.size();i++){ String col = fixedCol.getString(i);
String col = fixedCol.getString(i); colKey = parseNumToString(index, 2);
colKey = parseNumToString(index, 2); if("sampleName".equals(col)){
if("sampleName".equals(col)){ t.put(colPrefix + colKey, dataDO.getSampleName());
t.put(colPrefix + colKey, dataDO.getSampleName());
}
else if("sampleCode".equals(col)){
t.put(colPrefix + colKey, dataDO.getSampleCode());
}
else if("sampleNameCode".equals( col)){
t.put(colPrefix + colKey, dataDO.getSampleName() + " " + dataDO.getSampleCode());
}
//todo 来样名称、来样编号、来样名称编号
index ++;
} }
else if("sampleCode".equals(col)){
t.put(colPrefix + colKey, dataDO.getSampleCode());
}
else if("sampleNameCode".equals( col)){
t.put(colPrefix + colKey, dataDO.getSampleName() + " " + dataDO.getSampleCode());
}else if("entrustSampleName".equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleName());
}else if("entrustSampleCode".equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleCode());
}else if("entrustSampleNameCode".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("sampleName".equals(col)){
t.put(colPrefix + colKey, dataDO.getSampleName());
}
else if("sampleCode".equals(col)){
t.put(colPrefix + colKey, dataDO.getSampleCode());
}
else if("sampleNameCode".equals( col)){
t.put(colPrefix + colKey, dataDO.getSampleName() + " " + dataDO.getSampleCode());
}else if("entrustSampleName".equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleName());
}else if("entrustSampleCode".equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleCode());
}else if("entrustSampleNameCode".equals( col)){
t.put(colPrefix + colKey, dataDO.getEntrustSampleName() + " " + dataDO.getEntrustSampleCode());
}
index ++;
} }
//添加入行数据 //添加入行数据
rowList.add(t.clone()); rowList.add(t.clone());
@@ -524,7 +602,7 @@ public class ReportDocumentDataServiceImpl implements ReportDocumentDataService
public CommonResult<List<ReportDocumentDataDO>> listByMainDataId(Long mainDataId) { public CommonResult<List<ReportDocumentDataDO>> listByMainDataId(Long mainDataId) {
QueryWrapper<ReportDocumentDataDO> queryWrapper = new QueryWrapper<>(); QueryWrapper<ReportDocumentDataDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("MAIN_ID", mainDataId); queryWrapper.eq("MAIN_ID", mainDataId);
queryWrapper.orderByAsc("ID"); queryWrapper.orderByAsc("SRT");
List<ReportDocumentDataDO> list = reportDocumentDataMapper.selectList(queryWrapper); List<ReportDocumentDataDO> list = reportDocumentDataMapper.selectList(queryWrapper);
return CommonResult.success(list); return CommonResult.success(list);
} }

View File

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

View File

@@ -59,6 +59,11 @@ public class ReportDocumentMainCorrelationServiceImpl implements ReportDocumentM
reportDocumentMainCorrelationMapper.delete(query); reportDocumentMainCorrelationMapper.delete(query);
} }
@Override
public void insertBatch(List<ReportDocumentMainCorrelationDO> list) {
reportDocumentMainCorrelationMapper.insertBatch(list);
}
@Override @Override
public void updateReportDocumentMainCorrelation(ReportDocumentMainCorrelationSaveReqVO updateReqVO) { 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.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult; 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.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.controller.vo.*;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO; import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@@ -23,7 +24,7 @@ public interface ReportDocumentMainService {
CommonResult<String> execAddDataByEntrust(ReportDocumentMainSaveReqVO reqVO); 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); 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.api.task.dto.QmsBpmDTO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayReportDataPageReqVO; 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.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.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.dal.dataobject.ConfigUserSignatureDO;
import com.zt.plat.module.qms.business.config.service.ConfigUserSignatureService; 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.controller.vo.*;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentDataDO; 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.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.mapper.ReportDocumentMainMapper;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO; import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO;
import com.zt.plat.module.qms.enums.QmsBpmConstant; import com.zt.plat.module.qms.enums.QmsBpmConstant;
@@ -35,10 +38,7 @@ import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0; 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 BpmProcessInstanceApi bpmProcessInstanceApi;
@Resource private BpmTaskApi bpmTaskApi; @Resource private BpmTaskApi bpmTaskApi;
@Resource private ReportDocumentMainCorrelationService reportDocumentMainCorrelationService; @Resource private ReportDocumentMainCorrelationService reportDocumentMainCorrelationService;
@Resource private ReportDocumentTypeService reportDocumentTypeService;
@Resource private ConfigUserSignatureService configUserSignatureService; @Resource private ConfigUserSignatureService configUserSignatureService;
@Resource private BusinessSampleEntrustRegistrationService businessSampleEntrustRegistrationService;
/*** /***
* 增加报表数据(按样品) * 增加报表数据(按样品)
* 传入报告id、 报表数据ids * 传入报告id、 报表数据ids
@@ -93,14 +96,13 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
} }
if(isExist) if(isExist)
return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "报表数据已在本报告使用,请勿重复添加"); return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "报表数据已在本报告使用,请勿重复添加");
// List<BusinessAssayReportDataDO> assayReportDataList = businessAssayReportDataService.listByIds(addReportDataIdList);
BusinessAssayReportDataPageReqVO reportDataQueryVo = new BusinessAssayReportDataPageReqVO(); BusinessAssayReportDataPageReqVO reportDataQueryVo = new BusinessAssayReportDataPageReqVO();
reportDataQueryVo.setIdList(addReportDataIdList); reportDataQueryVo.setIdList(addReportDataIdList);
reportDataQueryVo.setPageNo(1); reportDataQueryVo.setPageNo(1);
reportDataQueryVo.setPageSize(9999); reportDataQueryVo.setPageSize(9999);
PageResult<BusinessAssayReportDataDO> assayReportPage = businessAssayReportDataService.queryWaitingDataForReport( reportDataQueryVo); PageResult<BusinessAssayReportDataDO> assayReportPage = businessAssayReportDataService.queryWaitingDataForReport( reportDataQueryVo);
List<BusinessAssayReportDataDO> assayReportDataList = assayReportPage.getList(); List<BusinessAssayReportDataDO> assayReportDataList = assayReportPage.getList();
return execAddByBusinessAssayReportData(assayReportDataList, id); return execAddByBusinessAssayReportData(assayReportDataList, id, new ArrayList<>());
} }
@Override @Override
@@ -112,37 +114,40 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "缺少id参数请刷新后重试"); return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "缺少id参数请刷新后重试");
if(ObjectUtils.isEmpty(businessSampleEntrustRegistrationIds)) if(ObjectUtils.isEmpty(businessSampleEntrustRegistrationIds))
return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "缺少businessSampleEntrustRegistrationIds参数请刷新后重试"); return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "缺少businessSampleEntrustRegistrationIds参数请刷新后重试");
List<ReportDocumentMainCorrelationDO> reportRelationList = reportDocumentMainCorrelationService.listByMainId(id);
//todo 判断修改的场景。处理方法删除reportRelation、ReportDocumentData
List<Long> businessSampleEntrustRegistrationIdList = new ArrayList<>(); List<Long> businessSampleEntrustRegistrationIdList = new ArrayList<>();
String[] split = businessSampleEntrustRegistrationIds.split(","); String[] split = businessSampleEntrustRegistrationIds.split(",");
for (String s : split) { for (String s : split) {
Long aLong = Long.valueOf(s); Long aLong = Long.valueOf(s);
businessSampleEntrustRegistrationIdList.add(aLong); businessSampleEntrustRegistrationIdList.add(aLong);
} }
List<BusinessSampleEntrustRegistrationDO> entrustList = businessSampleEntrustRegistrationService.listByIds(businessSampleEntrustRegistrationIdList);
BusinessAssayReportDataPageReqVO reportDataQueryVo = new BusinessAssayReportDataPageReqVO(); BusinessAssayReportDataPageReqVO reportDataQueryVo = new BusinessAssayReportDataPageReqVO();
reportDataQueryVo.setBusinessSampleEntrustRegistrationIdList(businessSampleEntrustRegistrationIdList); reportDataQueryVo.setBusinessSampleEntrustRegistrationIdList(businessSampleEntrustRegistrationIdList);
reportDataQueryVo.setPageNo(1); reportDataQueryVo.setPageNo(1);
reportDataQueryVo.setPageSize(9999); reportDataQueryVo.setPageSize(9999);
PageResult<BusinessAssayReportDataDO> assayReportPage = businessAssayReportDataService.queryWaitingDataForReport( reportDataQueryVo); PageResult<BusinessAssayReportDataDO> assayReportPage = businessAssayReportDataService.queryWaitingDataForReport( reportDataQueryVo);
List<BusinessAssayReportDataDO> assayReportDataList = assayReportPage.getList(); List<BusinessAssayReportDataDO> assayReportDataList = assayReportPage.getList();
CommonResult<String> ret = execAddByBusinessAssayReportData(assayReportDataList, id); CommonResult<String> ret = execAddByBusinessAssayReportData(assayReportDataList, id, entrustList);
if(!ret.isSuccess()) if(!ret.isSuccess())
return ret; return ret;
//保存报告关系表 //保存报告关系表
List<ReportDocumentMainCorrelationDO> correlationList = new ArrayList<>();
for(Long businessSampleEntrustRegistrationId : businessSampleEntrustRegistrationIdList){ for(Long businessSampleEntrustRegistrationId : businessSampleEntrustRegistrationIdList){
ReportDocumentMainCorrelationSaveReqVO correlationEntity = new ReportDocumentMainCorrelationSaveReqVO(); ReportDocumentMainCorrelationDO correlationEntity = new ReportDocumentMainCorrelationDO();
correlationEntity.setMainId( id); correlationEntity.setMainId( id);
correlationEntity.setCorrelationId(businessSampleEntrustRegistrationId); correlationEntity.setCorrelationId(businessSampleEntrustRegistrationId);
correlationEntity.setCorrelationType(ReportDocumentMainCorrelationService.CorrelationType_entrust); correlationEntity.setCorrelationType(ReportDocumentMainCorrelationService.CorrelationType_entrust);
reportDocumentMainCorrelationService.createReportDocumentMainCorrelation(correlationEntity); correlationList.add(correlationEntity);
} }
if(!correlationList.isEmpty())
reportDocumentMainCorrelationService.insertBatch(correlationList);
return CommonResult.success("操作成功"); return CommonResult.success("操作成功");
} }
@Override @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)) if(ObjectUtils.isEmpty(assayReportDataList))
return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "您选择的委托还没产生可编制报告的数据,请稍后重试!"); return error(REPORT_DOCUMENT_DATA_NOT_EXISTS.getCode(), "您选择的委托还没产生可编制报告的数据,请稍后重试!");
List<ReportDocumentDataDO> insertList = new ArrayList<>(); List<ReportDocumentDataDO> insertList = new ArrayList<>();
@@ -155,16 +160,74 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
reportDocumentDataDO.setBaseSampleName(assayReportData.getBaseSampleName()); reportDocumentDataDO.setBaseSampleName(assayReportData.getBaseSampleName());
reportDocumentDataDO.setDocumentContent(assayReportData.getAssayData()); reportDocumentDataDO.setDocumentContent(assayReportData.getAssayData());
reportDocumentDataDO.setSampleTypeKey(assayReportData.getSampleTypeKey()); reportDocumentDataDO.setSampleTypeKey(assayReportData.getSampleTypeKey());
reportDocumentDataDO.setEntrustSampleCode(assayReportData.getEntrustSampleCode());
reportDocumentDataDO.setEntrustSampleName(assayReportData.getEntrustSampleName());
reportDocumentDataDO.setSort(assayReportData.getEntrustDetailSort());
insertList.add(reportDocumentDataDO); insertList.add(reportDocumentDataDO);
} }
if(!insertList.isEmpty()) if(!insertList.isEmpty())
reportDocumentDataService.insertBatch(insertList); reportDocumentDataService.insertBatch(insertList);
ReportDocumentMainDO reportDocumentMainDO = reportDocumentMainMapper.selectById(id); ReportDocumentMainDO reportDocumentMainDO = reportDocumentMainMapper.selectById(id);
updateCommonField(reportDocumentMainDO); 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); reportDocumentMainMapper.updateById(reportDocumentMainDO);
return CommonResult.success("操作成功"); 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 @Override
public void updateCommonField(ReportDocumentMainDO reportDocumentMainDO) { public void updateCommonField(ReportDocumentMainDO reportDocumentMainDO) {
if(reportDocumentMainDO == null) if(reportDocumentMainDO == null)

View File

@@ -31,9 +31,13 @@
s.CREATE_TIME as baseSampleCreateTime, s.CREATE_TIME as baseSampleCreateTime,
s.SMP_NAME as sampleName, s.SMP_NAME as sampleName,
s.BSE_SMP_NAME as baseSampleName, s.BSE_SMP_NAME as baseSampleName,
ed.ENTT_SMP_NAME as entrustSampleName,
ed.ENTT_SMP_CD as entrustSampleCode,
ed.SRT as entrustDetailSort,
(select KY from T_DIC_BSN dic where dic.id = s.DIC_BSN_ID) as sampleTypeKey (select KY from T_DIC_BSN dic where dic.id = s.DIC_BSN_ID) as sampleTypeKey
FROM T_BSN_ASY_RPT_DAT d FROM T_BSN_ASY_RPT_DAT d
inner join T_BSN_BSE_SMP s on d.BSN_BSE_SMP_ID = s.id inner join T_BSN_BSE_SMP s on d.BSN_BSE_SMP_ID = s.id
inner join T_BSN_SMP_ENTT_DTL ed on ed.BSN_BSE_SMP_ID = s.id
<where> <where>
<if test="param.idList != null and param.idList.size > 0"> <if test="param.idList != null and param.idList.size > 0">
and d.id in ( and d.id in (