diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 461a51b..019d91f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -497,7 +497,6 @@ /** * 审批通过的证书报告,生成相应的证书打印信息 - * * @param certificateReport * @return */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java index 5456773..261d41d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java @@ -125,6 +125,7 @@ wrapper.apply(StringUtils.isNotBlank(request.getEndTime()), "{0} >= DATE_FORMAT(record_time,'%Y-%m-%d %H:%i:%s')", request.getEndTime()); wrapper.eq("is_del", MeterDictEnum.DELETE_FALSE); + wrapper.orderByDesc("record_time"); return wrapper; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 461a51b..019d91f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -497,7 +497,6 @@ /** * 审批通过的证书报告,生成相应的证书打印信息 - * * @param certificateReport * @return */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java index 5456773..261d41d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java @@ -125,6 +125,7 @@ wrapper.apply(StringUtils.isNotBlank(request.getEndTime()), "{0} >= DATE_FORMAT(record_time,'%Y-%m-%d %H:%i:%s')", request.getEndTime()); wrapper.eq("is_del", MeterDictEnum.DELETE_FALSE); + wrapper.orderByDesc("record_time"); return wrapper; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index fea431c..c54129d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -304,7 +304,10 @@ //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 case MeasureStatusEnum.TO_MEASURE: - resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, MeasureStatusEnum.TO_ALLOCATE, null); + List statusOneList = new ArrayList<>(); + statusOneList.add(MeasureStatusEnum.TO_ALLOCATE); + statusOneList.add(SampleStatusEnum.NO_NEED_MEASURE);//保证我的检测中退回的能查到 + resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, null, statusOneList); resultPage.getRecords().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -362,7 +365,7 @@ String deptName = (String) resultMap.get("deptName"); //获取部门下的各检测状态列表 String measureStatus = labExecutiveListRequest.getMeasureStatus(); - List resultList=new ArrayList<>(); + List resultList = new ArrayList<>(); switch (measureStatus) { //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 @@ -380,7 +383,7 @@ List statusList = new ArrayList<>(); statusList.add(MeasureStatusEnum.TO_MEASURE); statusList.add(MeasureStatusEnum.IN_MEASURE); - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, null, statusList); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, null, statusList); resultList.parallelStream().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -394,7 +397,7 @@ //检测完,查询检测完,当前检定环节:其他实验室/检测完,已出具证书:查询证书报告表/无,证书总数:具体实验室/无 case MeasureStatusEnum.MEASURE_COMPLETE: - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); //查询样品检定到的其他实验室或样品检测完成 enrichLabExecutiveRecords(resultList); break; @@ -858,6 +861,52 @@ return ReturnUtil.success(); } + @Override + public ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request) { + String operateReason = request.getOperateReason(); + Long labExecutiveId = request.getId(); + BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); + executiveInfo.setId(labExecutiveId); + executiveInfo.setRemark(operateReason); + //状态置为无需检测,前端根据该状态在部门检测展示退检确认按钮 + executiveInfo.setMeasureStatus(SampleStatusEnum.NO_NEED_MEASURE); + labExecutiveInfoMapper.updateById(executiveInfo); + return ReturnUtil.success(); + } + + @Override + @Transactional + public ReturnDTO executiveNoMeasureConfirm(List requestList) { + //查询是否在该用户的检测中有该样品,没有则返回提示信息,有则更新检测状态、更新样品状态(判断是否全部实验室检测完成) + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + SampleOperateRequest sampleOperateRequest = requestList.get(0); + Long userId = sampleOperateRequest.getMeasurePersonId(); + + //查询扫描样品中为该用户待检测和检测中的样品列表 + List preList = new ArrayList<>(); + List inList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); + List toList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); + preList.addAll(inList); + preList.addAll(toList); + if (CollectionUtils.isEmpty(preList)) { + //throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + return ReturnUtil.success(); + } + int updateFlag = labExecutiveInfoMapper.updateForSampleMeasureCompleteOperate(preList, userId, MeasureStatusEnum.MEASURE_COMPLETE); + if (updateFlag > 0) { + preList.forEach(pre -> { + orderSampleRelationMapper.updateByOrderIdAndSampleId(pre.getOrderId(), pre.getSampleId(), SampleStatusEnum.MEASURE_COMPLETE); + //委托书中所有样品检测完更新委托书接收状态为检测完成,未检测完的数量为0则表示全部检完 + updateOrderStatusComplete(pre); + }); + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + } + private Page getSampleHandOutListResponsePage() { Page page = PageFactory.defaultPage(); page.setCurrent(1); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ba6ab23..715f549 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -44,6 +46,7 @@ import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -111,6 +114,15 @@ return businessOrder; } + @Override + public ReturnDTO orderDelete(Long id) { + int flag = this.baseMapper.deleteById(id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", id); + int dFlag = sampleRelationMapper.delete(queryWrapper); + return ReturnUtil.success(); + } + /** * 1、删除样品和委托书的明细关系,填充传输的明细样品数据 * 2、对样品进行是否在库的判断,如果不存在则入库, 入库操作完成,进行委托书样品关系的绑定 @@ -330,8 +342,16 @@ } private void initOrderInfo(BusinessOrder businessOrder) { - Long maxNo = this.baseMapper.selectMaxCOrderNo(); - String orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + Long maxNo = this.baseMapper.selectMaxOrderNo(); + String orderNo; + if (StringUtils.isNotEmpty(businessOrder.getPlanDeliverTime())) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + DateTime planDeliverTime = DateUtil.parse(businessOrder.getPlanDeliverTime()); + String datePrefix = format.format(planDeliverTime); + orderNo = NumberGeneratorUtil.getOrderContactNo(ORDER_PREFIX, datePrefix, maxNo); + } else { + orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + } AuthUser authUser = ShiroKit.getUser(); businessOrder.setCreateUser(authUser.getId()); businessOrder.setUpdateUser(authUser.getId()); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 461a51b..019d91f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -497,7 +497,6 @@ /** * 审批通过的证书报告,生成相应的证书打印信息 - * * @param certificateReport * @return */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java index 5456773..261d41d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java @@ -125,6 +125,7 @@ wrapper.apply(StringUtils.isNotBlank(request.getEndTime()), "{0} >= DATE_FORMAT(record_time,'%Y-%m-%d %H:%i:%s')", request.getEndTime()); wrapper.eq("is_del", MeterDictEnum.DELETE_FALSE); + wrapper.orderByDesc("record_time"); return wrapper; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index fea431c..c54129d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -304,7 +304,10 @@ //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 case MeasureStatusEnum.TO_MEASURE: - resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, MeasureStatusEnum.TO_ALLOCATE, null); + List statusOneList = new ArrayList<>(); + statusOneList.add(MeasureStatusEnum.TO_ALLOCATE); + statusOneList.add(SampleStatusEnum.NO_NEED_MEASURE);//保证我的检测中退回的能查到 + resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, null, statusOneList); resultPage.getRecords().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -362,7 +365,7 @@ String deptName = (String) resultMap.get("deptName"); //获取部门下的各检测状态列表 String measureStatus = labExecutiveListRequest.getMeasureStatus(); - List resultList=new ArrayList<>(); + List resultList = new ArrayList<>(); switch (measureStatus) { //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 @@ -380,7 +383,7 @@ List statusList = new ArrayList<>(); statusList.add(MeasureStatusEnum.TO_MEASURE); statusList.add(MeasureStatusEnum.IN_MEASURE); - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, null, statusList); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, null, statusList); resultList.parallelStream().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -394,7 +397,7 @@ //检测完,查询检测完,当前检定环节:其他实验室/检测完,已出具证书:查询证书报告表/无,证书总数:具体实验室/无 case MeasureStatusEnum.MEASURE_COMPLETE: - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); //查询样品检定到的其他实验室或样品检测完成 enrichLabExecutiveRecords(resultList); break; @@ -858,6 +861,52 @@ return ReturnUtil.success(); } + @Override + public ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request) { + String operateReason = request.getOperateReason(); + Long labExecutiveId = request.getId(); + BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); + executiveInfo.setId(labExecutiveId); + executiveInfo.setRemark(operateReason); + //状态置为无需检测,前端根据该状态在部门检测展示退检确认按钮 + executiveInfo.setMeasureStatus(SampleStatusEnum.NO_NEED_MEASURE); + labExecutiveInfoMapper.updateById(executiveInfo); + return ReturnUtil.success(); + } + + @Override + @Transactional + public ReturnDTO executiveNoMeasureConfirm(List requestList) { + //查询是否在该用户的检测中有该样品,没有则返回提示信息,有则更新检测状态、更新样品状态(判断是否全部实验室检测完成) + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + SampleOperateRequest sampleOperateRequest = requestList.get(0); + Long userId = sampleOperateRequest.getMeasurePersonId(); + + //查询扫描样品中为该用户待检测和检测中的样品列表 + List preList = new ArrayList<>(); + List inList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); + List toList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); + preList.addAll(inList); + preList.addAll(toList); + if (CollectionUtils.isEmpty(preList)) { + //throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + return ReturnUtil.success(); + } + int updateFlag = labExecutiveInfoMapper.updateForSampleMeasureCompleteOperate(preList, userId, MeasureStatusEnum.MEASURE_COMPLETE); + if (updateFlag > 0) { + preList.forEach(pre -> { + orderSampleRelationMapper.updateByOrderIdAndSampleId(pre.getOrderId(), pre.getSampleId(), SampleStatusEnum.MEASURE_COMPLETE); + //委托书中所有样品检测完更新委托书接收状态为检测完成,未检测完的数量为0则表示全部检完 + updateOrderStatusComplete(pre); + }); + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + } + private Page getSampleHandOutListResponsePage() { Page page = PageFactory.defaultPage(); page.setCurrent(1); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ba6ab23..715f549 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -44,6 +46,7 @@ import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -111,6 +114,15 @@ return businessOrder; } + @Override + public ReturnDTO orderDelete(Long id) { + int flag = this.baseMapper.deleteById(id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", id); + int dFlag = sampleRelationMapper.delete(queryWrapper); + return ReturnUtil.success(); + } + /** * 1、删除样品和委托书的明细关系,填充传输的明细样品数据 * 2、对样品进行是否在库的判断,如果不存在则入库, 入库操作完成,进行委托书样品关系的绑定 @@ -330,8 +342,16 @@ } private void initOrderInfo(BusinessOrder businessOrder) { - Long maxNo = this.baseMapper.selectMaxCOrderNo(); - String orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + Long maxNo = this.baseMapper.selectMaxOrderNo(); + String orderNo; + if (StringUtils.isNotEmpty(businessOrder.getPlanDeliverTime())) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + DateTime planDeliverTime = DateUtil.parse(businessOrder.getPlanDeliverTime()); + String datePrefix = format.format(planDeliverTime); + orderNo = NumberGeneratorUtil.getOrderContactNo(ORDER_PREFIX, datePrefix, maxNo); + } else { + orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + } AuthUser authUser = ShiroKit.getUser(); businessOrder.setCreateUser(authUser.getId()); businessOrder.setUpdateUser(authUser.getId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java index 086eaa8..bf084c3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java @@ -33,7 +33,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -108,10 +108,10 @@ public ReturnDTO batchImport(MultipartFile file) throws IOException { //获取文件输入流,压缩文件直接读取 InputStream in = new BufferedInputStream(file.getInputStream()); - ZipInputStream zin = new ZipInputStream(in, Charset.forName("GBK")); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); //MultipartFile转File,外层zip File realFile = FileUtil.multipartFileToFile(file); - ZipFile zipFile = new ZipFile(realFile, Charset.forName("GBK")); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); BufferedInputStream bs = new BufferedInputStream(zin); ZipEntry ze; ZipEntry eze = null; @@ -153,14 +153,14 @@ .headRowNumber(1).autoTrim(true).sheet(0).doRead(); List certificateImportList = listener.getList(); if(CollectionUtils.isEmpty(certificateImportList)){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); } List resultList = new ArrayList<>(); certificateImportList.forEach(cert -> { if(StringUtils.isEmpty(cert.getCertificateCode()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getSampleNo()) || StringUtils.isEmpty(cert.getOutsourcerNo()) || StringUtils.isEmpty(cert.getCertificateFileStrings())){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA_ITEM); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); } //样品编号获取样品id、分包方编号获取分包方id OrderSampleDTO orderSampleDTO = orderSampleRelationMapper.selectIdBySampleNo(cert.getSampleNo()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java index f2303e3..4df9dc0 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java @@ -450,9 +450,9 @@ } break; //全部 - //区分管理员和普通用户 - //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + //不区分管理员和普通用户,全部可见已通过的 case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List allApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(allApproveList)) { businessKeys = allApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 461a51b..019d91f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -497,7 +497,6 @@ /** * 审批通过的证书报告,生成相应的证书打印信息 - * * @param certificateReport * @return */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java index 5456773..261d41d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java @@ -125,6 +125,7 @@ wrapper.apply(StringUtils.isNotBlank(request.getEndTime()), "{0} >= DATE_FORMAT(record_time,'%Y-%m-%d %H:%i:%s')", request.getEndTime()); wrapper.eq("is_del", MeterDictEnum.DELETE_FALSE); + wrapper.orderByDesc("record_time"); return wrapper; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index fea431c..c54129d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -304,7 +304,10 @@ //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 case MeasureStatusEnum.TO_MEASURE: - resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, MeasureStatusEnum.TO_ALLOCATE, null); + List statusOneList = new ArrayList<>(); + statusOneList.add(MeasureStatusEnum.TO_ALLOCATE); + statusOneList.add(SampleStatusEnum.NO_NEED_MEASURE);//保证我的检测中退回的能查到 + resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, null, statusOneList); resultPage.getRecords().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -362,7 +365,7 @@ String deptName = (String) resultMap.get("deptName"); //获取部门下的各检测状态列表 String measureStatus = labExecutiveListRequest.getMeasureStatus(); - List resultList=new ArrayList<>(); + List resultList = new ArrayList<>(); switch (measureStatus) { //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 @@ -380,7 +383,7 @@ List statusList = new ArrayList<>(); statusList.add(MeasureStatusEnum.TO_MEASURE); statusList.add(MeasureStatusEnum.IN_MEASURE); - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, null, statusList); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, null, statusList); resultList.parallelStream().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -394,7 +397,7 @@ //检测完,查询检测完,当前检定环节:其他实验室/检测完,已出具证书:查询证书报告表/无,证书总数:具体实验室/无 case MeasureStatusEnum.MEASURE_COMPLETE: - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); //查询样品检定到的其他实验室或样品检测完成 enrichLabExecutiveRecords(resultList); break; @@ -858,6 +861,52 @@ return ReturnUtil.success(); } + @Override + public ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request) { + String operateReason = request.getOperateReason(); + Long labExecutiveId = request.getId(); + BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); + executiveInfo.setId(labExecutiveId); + executiveInfo.setRemark(operateReason); + //状态置为无需检测,前端根据该状态在部门检测展示退检确认按钮 + executiveInfo.setMeasureStatus(SampleStatusEnum.NO_NEED_MEASURE); + labExecutiveInfoMapper.updateById(executiveInfo); + return ReturnUtil.success(); + } + + @Override + @Transactional + public ReturnDTO executiveNoMeasureConfirm(List requestList) { + //查询是否在该用户的检测中有该样品,没有则返回提示信息,有则更新检测状态、更新样品状态(判断是否全部实验室检测完成) + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + SampleOperateRequest sampleOperateRequest = requestList.get(0); + Long userId = sampleOperateRequest.getMeasurePersonId(); + + //查询扫描样品中为该用户待检测和检测中的样品列表 + List preList = new ArrayList<>(); + List inList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); + List toList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); + preList.addAll(inList); + preList.addAll(toList); + if (CollectionUtils.isEmpty(preList)) { + //throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + return ReturnUtil.success(); + } + int updateFlag = labExecutiveInfoMapper.updateForSampleMeasureCompleteOperate(preList, userId, MeasureStatusEnum.MEASURE_COMPLETE); + if (updateFlag > 0) { + preList.forEach(pre -> { + orderSampleRelationMapper.updateByOrderIdAndSampleId(pre.getOrderId(), pre.getSampleId(), SampleStatusEnum.MEASURE_COMPLETE); + //委托书中所有样品检测完更新委托书接收状态为检测完成,未检测完的数量为0则表示全部检完 + updateOrderStatusComplete(pre); + }); + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + } + private Page getSampleHandOutListResponsePage() { Page page = PageFactory.defaultPage(); page.setCurrent(1); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ba6ab23..715f549 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -44,6 +46,7 @@ import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -111,6 +114,15 @@ return businessOrder; } + @Override + public ReturnDTO orderDelete(Long id) { + int flag = this.baseMapper.deleteById(id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", id); + int dFlag = sampleRelationMapper.delete(queryWrapper); + return ReturnUtil.success(); + } + /** * 1、删除样品和委托书的明细关系,填充传输的明细样品数据 * 2、对样品进行是否在库的判断,如果不存在则入库, 入库操作完成,进行委托书样品关系的绑定 @@ -330,8 +342,16 @@ } private void initOrderInfo(BusinessOrder businessOrder) { - Long maxNo = this.baseMapper.selectMaxCOrderNo(); - String orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + Long maxNo = this.baseMapper.selectMaxOrderNo(); + String orderNo; + if (StringUtils.isNotEmpty(businessOrder.getPlanDeliverTime())) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + DateTime planDeliverTime = DateUtil.parse(businessOrder.getPlanDeliverTime()); + String datePrefix = format.format(planDeliverTime); + orderNo = NumberGeneratorUtil.getOrderContactNo(ORDER_PREFIX, datePrefix, maxNo); + } else { + orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + } AuthUser authUser = ShiroKit.getUser(); businessOrder.setCreateUser(authUser.getId()); businessOrder.setUpdateUser(authUser.getId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java index 086eaa8..bf084c3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java @@ -33,7 +33,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -108,10 +108,10 @@ public ReturnDTO batchImport(MultipartFile file) throws IOException { //获取文件输入流,压缩文件直接读取 InputStream in = new BufferedInputStream(file.getInputStream()); - ZipInputStream zin = new ZipInputStream(in, Charset.forName("GBK")); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); //MultipartFile转File,外层zip File realFile = FileUtil.multipartFileToFile(file); - ZipFile zipFile = new ZipFile(realFile, Charset.forName("GBK")); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); BufferedInputStream bs = new BufferedInputStream(zin); ZipEntry ze; ZipEntry eze = null; @@ -153,14 +153,14 @@ .headRowNumber(1).autoTrim(true).sheet(0).doRead(); List certificateImportList = listener.getList(); if(CollectionUtils.isEmpty(certificateImportList)){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); } List resultList = new ArrayList<>(); certificateImportList.forEach(cert -> { if(StringUtils.isEmpty(cert.getCertificateCode()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getSampleNo()) || StringUtils.isEmpty(cert.getOutsourcerNo()) || StringUtils.isEmpty(cert.getCertificateFileStrings())){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA_ITEM); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); } //样品编号获取样品id、分包方编号获取分包方id OrderSampleDTO orderSampleDTO = orderSampleRelationMapper.selectIdBySampleNo(cert.getSampleNo()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java index f2303e3..4df9dc0 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java @@ -450,9 +450,9 @@ } break; //全部 - //区分管理员和普通用户 - //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + //不区分管理员和普通用户,全部可见已通过的 case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List allApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(allApproveList)) { businessKeys = allApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java index 372e9c3..fe9e14a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java @@ -236,6 +236,8 @@ } private QueryWrapper getWrapper(OutsourcerListRequest request) { + //不做权限限制任何人可查询全部 + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); //flowable中已通过状态的业务id列表 List passedList = baseApprovalService.getPassedList(request.getFormId()); @@ -336,6 +338,7 @@ //区分管理员和普通用户 //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List AllApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(AllApproveList)) { businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a4f8bb9..9ca79f7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -223,10 +223,20 @@ @Transactional public ReturnDTO forcedTerminate(List deviceReceiveDTO) { boolean batchUpdateFlag = true; - for (DeviceStatusChangeDTO deviceStatusChangeDTO : deviceReceiveDTO) { - Integer updateFlag = this.statusChangeUpdator(deviceStatusChangeDTO, true); + for (DeviceStatusChangeDTO changeDTO : deviceReceiveDTO) { + Integer updateFlag = 0; + if (MEASURE_COMPLETE.equals(changeDTO.getStatus())) { + //完成按钮 + changeDTO.setStatus(TO_GIVE_BACK); + updateFlag = this.statusChangeUpdator(changeDTO, false); + } else if (TO_GIVE_BACK.equals(changeDTO.getStatus())) { + //终止按钮 + updateFlag = this.statusChangeUpdator(changeDTO, true); + //删除关联证书报告 + deleteCertificateReport(changeDTO); + } //实验室状态数据的更新 - updateLabExecutiveInfo(deviceStatusChangeDTO, MeasureStatusEnum.TERMINATED); + updateLabExecutiveInfo(changeDTO, changeDTO.getStatus()); batchUpdateFlag &= updateFlag > 0; } if (batchUpdateFlag) { @@ -235,6 +245,13 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + private void deleteCertificateReport(DeviceStatusChangeDTO deviceStatusChangeDTO) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + wrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); + certificateReportMapper.delete(wrapper); + } + /** * 1、查询是否绑定 @@ -299,6 +316,7 @@ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + //即使终止,实验室已完成的检定也不会变成终止,因为已完成了,所以这里不加检测完成的条件 queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) .or().eq("measure_status", MeasureStatusEnum.IN_MEASURE)); @@ -434,7 +452,7 @@ BusinessOrderSampleRelation businessOrderSampleRelation = new BusinessOrderSampleRelation(); businessOrderSampleRelation.setSampleStatus(statusChangeDTO.getStatus()); //从已收入回退到待收入,删除历史分发检测的实验室数据 - if ("1".equals(statusChangeDTO.getStatus())) { + if (TO_RECEIVE.equals(statusChangeDTO.getStatus())) { deleteLabExecutiveInfo(statusChangeDTO); } if (TO_GIVE_BACK.equals(statusChangeDTO.getStatus())) { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 461a51b..019d91f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -497,7 +497,6 @@ /** * 审批通过的证书报告,生成相应的证书打印信息 - * * @param certificateReport * @return */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java index 5456773..261d41d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java @@ -125,6 +125,7 @@ wrapper.apply(StringUtils.isNotBlank(request.getEndTime()), "{0} >= DATE_FORMAT(record_time,'%Y-%m-%d %H:%i:%s')", request.getEndTime()); wrapper.eq("is_del", MeterDictEnum.DELETE_FALSE); + wrapper.orderByDesc("record_time"); return wrapper; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index fea431c..c54129d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -304,7 +304,10 @@ //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 case MeasureStatusEnum.TO_MEASURE: - resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, MeasureStatusEnum.TO_ALLOCATE, null); + List statusOneList = new ArrayList<>(); + statusOneList.add(MeasureStatusEnum.TO_ALLOCATE); + statusOneList.add(SampleStatusEnum.NO_NEED_MEASURE);//保证我的检测中退回的能查到 + resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, null, statusOneList); resultPage.getRecords().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -362,7 +365,7 @@ String deptName = (String) resultMap.get("deptName"); //获取部门下的各检测状态列表 String measureStatus = labExecutiveListRequest.getMeasureStatus(); - List resultList=new ArrayList<>(); + List resultList = new ArrayList<>(); switch (measureStatus) { //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 @@ -380,7 +383,7 @@ List statusList = new ArrayList<>(); statusList.add(MeasureStatusEnum.TO_MEASURE); statusList.add(MeasureStatusEnum.IN_MEASURE); - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, null, statusList); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, null, statusList); resultList.parallelStream().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -394,7 +397,7 @@ //检测完,查询检测完,当前检定环节:其他实验室/检测完,已出具证书:查询证书报告表/无,证书总数:具体实验室/无 case MeasureStatusEnum.MEASURE_COMPLETE: - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); //查询样品检定到的其他实验室或样品检测完成 enrichLabExecutiveRecords(resultList); break; @@ -858,6 +861,52 @@ return ReturnUtil.success(); } + @Override + public ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request) { + String operateReason = request.getOperateReason(); + Long labExecutiveId = request.getId(); + BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); + executiveInfo.setId(labExecutiveId); + executiveInfo.setRemark(operateReason); + //状态置为无需检测,前端根据该状态在部门检测展示退检确认按钮 + executiveInfo.setMeasureStatus(SampleStatusEnum.NO_NEED_MEASURE); + labExecutiveInfoMapper.updateById(executiveInfo); + return ReturnUtil.success(); + } + + @Override + @Transactional + public ReturnDTO executiveNoMeasureConfirm(List requestList) { + //查询是否在该用户的检测中有该样品,没有则返回提示信息,有则更新检测状态、更新样品状态(判断是否全部实验室检测完成) + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + SampleOperateRequest sampleOperateRequest = requestList.get(0); + Long userId = sampleOperateRequest.getMeasurePersonId(); + + //查询扫描样品中为该用户待检测和检测中的样品列表 + List preList = new ArrayList<>(); + List inList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); + List toList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); + preList.addAll(inList); + preList.addAll(toList); + if (CollectionUtils.isEmpty(preList)) { + //throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + return ReturnUtil.success(); + } + int updateFlag = labExecutiveInfoMapper.updateForSampleMeasureCompleteOperate(preList, userId, MeasureStatusEnum.MEASURE_COMPLETE); + if (updateFlag > 0) { + preList.forEach(pre -> { + orderSampleRelationMapper.updateByOrderIdAndSampleId(pre.getOrderId(), pre.getSampleId(), SampleStatusEnum.MEASURE_COMPLETE); + //委托书中所有样品检测完更新委托书接收状态为检测完成,未检测完的数量为0则表示全部检完 + updateOrderStatusComplete(pre); + }); + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + } + private Page getSampleHandOutListResponsePage() { Page page = PageFactory.defaultPage(); page.setCurrent(1); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ba6ab23..715f549 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -44,6 +46,7 @@ import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -111,6 +114,15 @@ return businessOrder; } + @Override + public ReturnDTO orderDelete(Long id) { + int flag = this.baseMapper.deleteById(id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", id); + int dFlag = sampleRelationMapper.delete(queryWrapper); + return ReturnUtil.success(); + } + /** * 1、删除样品和委托书的明细关系,填充传输的明细样品数据 * 2、对样品进行是否在库的判断,如果不存在则入库, 入库操作完成,进行委托书样品关系的绑定 @@ -330,8 +342,16 @@ } private void initOrderInfo(BusinessOrder businessOrder) { - Long maxNo = this.baseMapper.selectMaxCOrderNo(); - String orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + Long maxNo = this.baseMapper.selectMaxOrderNo(); + String orderNo; + if (StringUtils.isNotEmpty(businessOrder.getPlanDeliverTime())) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + DateTime planDeliverTime = DateUtil.parse(businessOrder.getPlanDeliverTime()); + String datePrefix = format.format(planDeliverTime); + orderNo = NumberGeneratorUtil.getOrderContactNo(ORDER_PREFIX, datePrefix, maxNo); + } else { + orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + } AuthUser authUser = ShiroKit.getUser(); businessOrder.setCreateUser(authUser.getId()); businessOrder.setUpdateUser(authUser.getId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java index 086eaa8..bf084c3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java @@ -33,7 +33,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -108,10 +108,10 @@ public ReturnDTO batchImport(MultipartFile file) throws IOException { //获取文件输入流,压缩文件直接读取 InputStream in = new BufferedInputStream(file.getInputStream()); - ZipInputStream zin = new ZipInputStream(in, Charset.forName("GBK")); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); //MultipartFile转File,外层zip File realFile = FileUtil.multipartFileToFile(file); - ZipFile zipFile = new ZipFile(realFile, Charset.forName("GBK")); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); BufferedInputStream bs = new BufferedInputStream(zin); ZipEntry ze; ZipEntry eze = null; @@ -153,14 +153,14 @@ .headRowNumber(1).autoTrim(true).sheet(0).doRead(); List certificateImportList = listener.getList(); if(CollectionUtils.isEmpty(certificateImportList)){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); } List resultList = new ArrayList<>(); certificateImportList.forEach(cert -> { if(StringUtils.isEmpty(cert.getCertificateCode()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getSampleNo()) || StringUtils.isEmpty(cert.getOutsourcerNo()) || StringUtils.isEmpty(cert.getCertificateFileStrings())){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA_ITEM); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); } //样品编号获取样品id、分包方编号获取分包方id OrderSampleDTO orderSampleDTO = orderSampleRelationMapper.selectIdBySampleNo(cert.getSampleNo()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java index f2303e3..4df9dc0 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java @@ -450,9 +450,9 @@ } break; //全部 - //区分管理员和普通用户 - //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + //不区分管理员和普通用户,全部可见已通过的 case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List allApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(allApproveList)) { businessKeys = allApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java index 372e9c3..fe9e14a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java @@ -236,6 +236,8 @@ } private QueryWrapper getWrapper(OutsourcerListRequest request) { + //不做权限限制任何人可查询全部 + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); //flowable中已通过状态的业务id列表 List passedList = baseApprovalService.getPassedList(request.getFormId()); @@ -336,6 +338,7 @@ //区分管理员和普通用户 //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List AllApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(AllApproveList)) { businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a4f8bb9..9ca79f7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -223,10 +223,20 @@ @Transactional public ReturnDTO forcedTerminate(List deviceReceiveDTO) { boolean batchUpdateFlag = true; - for (DeviceStatusChangeDTO deviceStatusChangeDTO : deviceReceiveDTO) { - Integer updateFlag = this.statusChangeUpdator(deviceStatusChangeDTO, true); + for (DeviceStatusChangeDTO changeDTO : deviceReceiveDTO) { + Integer updateFlag = 0; + if (MEASURE_COMPLETE.equals(changeDTO.getStatus())) { + //完成按钮 + changeDTO.setStatus(TO_GIVE_BACK); + updateFlag = this.statusChangeUpdator(changeDTO, false); + } else if (TO_GIVE_BACK.equals(changeDTO.getStatus())) { + //终止按钮 + updateFlag = this.statusChangeUpdator(changeDTO, true); + //删除关联证书报告 + deleteCertificateReport(changeDTO); + } //实验室状态数据的更新 - updateLabExecutiveInfo(deviceStatusChangeDTO, MeasureStatusEnum.TERMINATED); + updateLabExecutiveInfo(changeDTO, changeDTO.getStatus()); batchUpdateFlag &= updateFlag > 0; } if (batchUpdateFlag) { @@ -235,6 +245,13 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + private void deleteCertificateReport(DeviceStatusChangeDTO deviceStatusChangeDTO) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + wrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); + certificateReportMapper.delete(wrapper); + } + /** * 1、查询是否绑定 @@ -299,6 +316,7 @@ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + //即使终止,实验室已完成的检定也不会变成终止,因为已完成了,所以这里不加检测完成的条件 queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) .or().eq("measure_status", MeasureStatusEnum.IN_MEASURE)); @@ -434,7 +452,7 @@ BusinessOrderSampleRelation businessOrderSampleRelation = new BusinessOrderSampleRelation(); businessOrderSampleRelation.setSampleStatus(statusChangeDTO.getStatus()); //从已收入回退到待收入,删除历史分发检测的实验室数据 - if ("1".equals(statusChangeDTO.getStatus())) { + if (TO_RECEIVE.equals(statusChangeDTO.getStatus())) { deleteLabExecutiveInfo(statusChangeDTO); } if (TO_GIVE_BACK.equals(statusChangeDTO.getStatus())) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java index 369b77c..733c365 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java @@ -210,7 +210,7 @@ } @Override - public Page listPageByOrder(Page page, OrderSampleListRequest request) throws Exception{ + public Page listPageByOrder(Page page, OrderSampleListRequest request) throws Exception{ page.setRecords(this.baseMapper.listPageByOrder(page, request)); for (MultiItemSampleListResponse multiItemSampleResponse : page.getRecords()) { DictCodeUtils.convertDictCodeToName(multiItemSampleResponse); @@ -263,7 +263,7 @@ AuthUser authUser = ShiroKit.getUser(); customerSampleInfo.setSampleNo(sampleNo); customerSampleInfo.setCreateUser(authUser.getId()); - customerSampleInfo.setSampleBelong("1"); + //customerSampleInfo.setSampleBelong("1"); customerSampleInfo.setUpdateUser(authUser.getId()); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java index 0f6fe47..496be74 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java @@ -143,6 +143,7 @@ } wrapper.like(StringUtils.isNotBlank(request.getTemplateNo()), "template_no", request.getTemplateNo()); wrapper.like(StringUtils.isNotBlank(request.getTemplateName()), "template_name", request.getTemplateName()); + wrapper.like(StringUtils.isNotBlank(request.getTemplateDesc()), "template_desc", request.getTemplateDesc()); wrapper.like(StringUtils.isNotBlank(request.getTemplateCreator()), "template_creator", request.getTemplateCreator()); wrapper.apply(StringUtils.isNotBlank(request.getCreateStartTime()), "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 461a51b..019d91f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -497,7 +497,6 @@ /** * 审批通过的证书报告,生成相应的证书打印信息 - * * @param certificateReport * @return */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java index 5456773..261d41d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java @@ -125,6 +125,7 @@ wrapper.apply(StringUtils.isNotBlank(request.getEndTime()), "{0} >= DATE_FORMAT(record_time,'%Y-%m-%d %H:%i:%s')", request.getEndTime()); wrapper.eq("is_del", MeterDictEnum.DELETE_FALSE); + wrapper.orderByDesc("record_time"); return wrapper; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index fea431c..c54129d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -304,7 +304,10 @@ //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 case MeasureStatusEnum.TO_MEASURE: - resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, MeasureStatusEnum.TO_ALLOCATE, null); + List statusOneList = new ArrayList<>(); + statusOneList.add(MeasureStatusEnum.TO_ALLOCATE); + statusOneList.add(SampleStatusEnum.NO_NEED_MEASURE);//保证我的检测中退回的能查到 + resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, null, statusOneList); resultPage.getRecords().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -362,7 +365,7 @@ String deptName = (String) resultMap.get("deptName"); //获取部门下的各检测状态列表 String measureStatus = labExecutiveListRequest.getMeasureStatus(); - List resultList=new ArrayList<>(); + List resultList = new ArrayList<>(); switch (measureStatus) { //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 @@ -380,7 +383,7 @@ List statusList = new ArrayList<>(); statusList.add(MeasureStatusEnum.TO_MEASURE); statusList.add(MeasureStatusEnum.IN_MEASURE); - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, null, statusList); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, null, statusList); resultList.parallelStream().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -394,7 +397,7 @@ //检测完,查询检测完,当前检定环节:其他实验室/检测完,已出具证书:查询证书报告表/无,证书总数:具体实验室/无 case MeasureStatusEnum.MEASURE_COMPLETE: - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); //查询样品检定到的其他实验室或样品检测完成 enrichLabExecutiveRecords(resultList); break; @@ -858,6 +861,52 @@ return ReturnUtil.success(); } + @Override + public ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request) { + String operateReason = request.getOperateReason(); + Long labExecutiveId = request.getId(); + BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); + executiveInfo.setId(labExecutiveId); + executiveInfo.setRemark(operateReason); + //状态置为无需检测,前端根据该状态在部门检测展示退检确认按钮 + executiveInfo.setMeasureStatus(SampleStatusEnum.NO_NEED_MEASURE); + labExecutiveInfoMapper.updateById(executiveInfo); + return ReturnUtil.success(); + } + + @Override + @Transactional + public ReturnDTO executiveNoMeasureConfirm(List requestList) { + //查询是否在该用户的检测中有该样品,没有则返回提示信息,有则更新检测状态、更新样品状态(判断是否全部实验室检测完成) + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + SampleOperateRequest sampleOperateRequest = requestList.get(0); + Long userId = sampleOperateRequest.getMeasurePersonId(); + + //查询扫描样品中为该用户待检测和检测中的样品列表 + List preList = new ArrayList<>(); + List inList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); + List toList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); + preList.addAll(inList); + preList.addAll(toList); + if (CollectionUtils.isEmpty(preList)) { + //throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + return ReturnUtil.success(); + } + int updateFlag = labExecutiveInfoMapper.updateForSampleMeasureCompleteOperate(preList, userId, MeasureStatusEnum.MEASURE_COMPLETE); + if (updateFlag > 0) { + preList.forEach(pre -> { + orderSampleRelationMapper.updateByOrderIdAndSampleId(pre.getOrderId(), pre.getSampleId(), SampleStatusEnum.MEASURE_COMPLETE); + //委托书中所有样品检测完更新委托书接收状态为检测完成,未检测完的数量为0则表示全部检完 + updateOrderStatusComplete(pre); + }); + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + } + private Page getSampleHandOutListResponsePage() { Page page = PageFactory.defaultPage(); page.setCurrent(1); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ba6ab23..715f549 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -44,6 +46,7 @@ import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -111,6 +114,15 @@ return businessOrder; } + @Override + public ReturnDTO orderDelete(Long id) { + int flag = this.baseMapper.deleteById(id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", id); + int dFlag = sampleRelationMapper.delete(queryWrapper); + return ReturnUtil.success(); + } + /** * 1、删除样品和委托书的明细关系,填充传输的明细样品数据 * 2、对样品进行是否在库的判断,如果不存在则入库, 入库操作完成,进行委托书样品关系的绑定 @@ -330,8 +342,16 @@ } private void initOrderInfo(BusinessOrder businessOrder) { - Long maxNo = this.baseMapper.selectMaxCOrderNo(); - String orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + Long maxNo = this.baseMapper.selectMaxOrderNo(); + String orderNo; + if (StringUtils.isNotEmpty(businessOrder.getPlanDeliverTime())) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + DateTime planDeliverTime = DateUtil.parse(businessOrder.getPlanDeliverTime()); + String datePrefix = format.format(planDeliverTime); + orderNo = NumberGeneratorUtil.getOrderContactNo(ORDER_PREFIX, datePrefix, maxNo); + } else { + orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + } AuthUser authUser = ShiroKit.getUser(); businessOrder.setCreateUser(authUser.getId()); businessOrder.setUpdateUser(authUser.getId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java index 086eaa8..bf084c3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java @@ -33,7 +33,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -108,10 +108,10 @@ public ReturnDTO batchImport(MultipartFile file) throws IOException { //获取文件输入流,压缩文件直接读取 InputStream in = new BufferedInputStream(file.getInputStream()); - ZipInputStream zin = new ZipInputStream(in, Charset.forName("GBK")); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); //MultipartFile转File,外层zip File realFile = FileUtil.multipartFileToFile(file); - ZipFile zipFile = new ZipFile(realFile, Charset.forName("GBK")); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); BufferedInputStream bs = new BufferedInputStream(zin); ZipEntry ze; ZipEntry eze = null; @@ -153,14 +153,14 @@ .headRowNumber(1).autoTrim(true).sheet(0).doRead(); List certificateImportList = listener.getList(); if(CollectionUtils.isEmpty(certificateImportList)){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); } List resultList = new ArrayList<>(); certificateImportList.forEach(cert -> { if(StringUtils.isEmpty(cert.getCertificateCode()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getSampleNo()) || StringUtils.isEmpty(cert.getOutsourcerNo()) || StringUtils.isEmpty(cert.getCertificateFileStrings())){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA_ITEM); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); } //样品编号获取样品id、分包方编号获取分包方id OrderSampleDTO orderSampleDTO = orderSampleRelationMapper.selectIdBySampleNo(cert.getSampleNo()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java index f2303e3..4df9dc0 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java @@ -450,9 +450,9 @@ } break; //全部 - //区分管理员和普通用户 - //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + //不区分管理员和普通用户,全部可见已通过的 case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List allApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(allApproveList)) { businessKeys = allApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java index 372e9c3..fe9e14a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java @@ -236,6 +236,8 @@ } private QueryWrapper getWrapper(OutsourcerListRequest request) { + //不做权限限制任何人可查询全部 + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); //flowable中已通过状态的业务id列表 List passedList = baseApprovalService.getPassedList(request.getFormId()); @@ -336,6 +338,7 @@ //区分管理员和普通用户 //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List AllApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(AllApproveList)) { businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a4f8bb9..9ca79f7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -223,10 +223,20 @@ @Transactional public ReturnDTO forcedTerminate(List deviceReceiveDTO) { boolean batchUpdateFlag = true; - for (DeviceStatusChangeDTO deviceStatusChangeDTO : deviceReceiveDTO) { - Integer updateFlag = this.statusChangeUpdator(deviceStatusChangeDTO, true); + for (DeviceStatusChangeDTO changeDTO : deviceReceiveDTO) { + Integer updateFlag = 0; + if (MEASURE_COMPLETE.equals(changeDTO.getStatus())) { + //完成按钮 + changeDTO.setStatus(TO_GIVE_BACK); + updateFlag = this.statusChangeUpdator(changeDTO, false); + } else if (TO_GIVE_BACK.equals(changeDTO.getStatus())) { + //终止按钮 + updateFlag = this.statusChangeUpdator(changeDTO, true); + //删除关联证书报告 + deleteCertificateReport(changeDTO); + } //实验室状态数据的更新 - updateLabExecutiveInfo(deviceStatusChangeDTO, MeasureStatusEnum.TERMINATED); + updateLabExecutiveInfo(changeDTO, changeDTO.getStatus()); batchUpdateFlag &= updateFlag > 0; } if (batchUpdateFlag) { @@ -235,6 +245,13 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + private void deleteCertificateReport(DeviceStatusChangeDTO deviceStatusChangeDTO) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + wrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); + certificateReportMapper.delete(wrapper); + } + /** * 1、查询是否绑定 @@ -299,6 +316,7 @@ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + //即使终止,实验室已完成的检定也不会变成终止,因为已完成了,所以这里不加检测完成的条件 queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) .or().eq("measure_status", MeasureStatusEnum.IN_MEASURE)); @@ -434,7 +452,7 @@ BusinessOrderSampleRelation businessOrderSampleRelation = new BusinessOrderSampleRelation(); businessOrderSampleRelation.setSampleStatus(statusChangeDTO.getStatus()); //从已收入回退到待收入,删除历史分发检测的实验室数据 - if ("1".equals(statusChangeDTO.getStatus())) { + if (TO_RECEIVE.equals(statusChangeDTO.getStatus())) { deleteLabExecutiveInfo(statusChangeDTO); } if (TO_GIVE_BACK.equals(statusChangeDTO.getStatus())) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java index 369b77c..733c365 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java @@ -210,7 +210,7 @@ } @Override - public Page listPageByOrder(Page page, OrderSampleListRequest request) throws Exception{ + public Page listPageByOrder(Page page, OrderSampleListRequest request) throws Exception{ page.setRecords(this.baseMapper.listPageByOrder(page, request)); for (MultiItemSampleListResponse multiItemSampleResponse : page.getRecords()) { DictCodeUtils.convertDictCodeToName(multiItemSampleResponse); @@ -263,7 +263,7 @@ AuthUser authUser = ShiroKit.getUser(); customerSampleInfo.setSampleNo(sampleNo); customerSampleInfo.setCreateUser(authUser.getId()); - customerSampleInfo.setSampleBelong("1"); + //customerSampleInfo.setSampleBelong("1"); customerSampleInfo.setUpdateUser(authUser.getId()); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java index 0f6fe47..496be74 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java @@ -143,6 +143,7 @@ } wrapper.like(StringUtils.isNotBlank(request.getTemplateNo()), "template_no", request.getTemplateNo()); wrapper.like(StringUtils.isNotBlank(request.getTemplateName()), "template_name", request.getTemplateName()); + wrapper.like(StringUtils.isNotBlank(request.getTemplateDesc()), "template_desc", request.getTemplateDesc()); wrapper.like(StringUtils.isNotBlank(request.getTemplateCreator()), "template_creator", request.getTemplateCreator()); wrapper.apply(StringUtils.isNotBlank(request.getCreateStartTime()), "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java index cee88ef..92af66d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java @@ -5,8 +5,10 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.print.*; import com.casic.missiles.dto.flowable.ApprovalAgreeRequest; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; public interface IBusinessCertificatePrintService { @@ -29,4 +31,6 @@ ReturnDTO submitAgainPrint(BaseApprovalSubmitRequest request); ReturnDTO change(ChangeCertificateRequest changeCertificateRequest); + + ReturnDTO batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java index 2da6613..a1b4cae 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java @@ -55,4 +55,8 @@ ReturnDTO allocateStaff(SampleAllocateRequest sampleAllocateRequest); ReturnDTO batchAllocate(List allocateBatchRequest); + + ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request); + + ReturnDTO executiveNoMeasureConfirm(List requestList); } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 461a51b..019d91f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -497,7 +497,6 @@ /** * 审批通过的证书报告,生成相应的证书打印信息 - * * @param certificateReport * @return */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java index 5456773..261d41d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java @@ -125,6 +125,7 @@ wrapper.apply(StringUtils.isNotBlank(request.getEndTime()), "{0} >= DATE_FORMAT(record_time,'%Y-%m-%d %H:%i:%s')", request.getEndTime()); wrapper.eq("is_del", MeterDictEnum.DELETE_FALSE); + wrapper.orderByDesc("record_time"); return wrapper; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index fea431c..c54129d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -304,7 +304,10 @@ //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 case MeasureStatusEnum.TO_MEASURE: - resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, MeasureStatusEnum.TO_ALLOCATE, null); + List statusOneList = new ArrayList<>(); + statusOneList.add(MeasureStatusEnum.TO_ALLOCATE); + statusOneList.add(SampleStatusEnum.NO_NEED_MEASURE);//保证我的检测中退回的能查到 + resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, null, statusOneList); resultPage.getRecords().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -362,7 +365,7 @@ String deptName = (String) resultMap.get("deptName"); //获取部门下的各检测状态列表 String measureStatus = labExecutiveListRequest.getMeasureStatus(); - List resultList=new ArrayList<>(); + List resultList = new ArrayList<>(); switch (measureStatus) { //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 @@ -380,7 +383,7 @@ List statusList = new ArrayList<>(); statusList.add(MeasureStatusEnum.TO_MEASURE); statusList.add(MeasureStatusEnum.IN_MEASURE); - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, null, statusList); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, null, statusList); resultList.parallelStream().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -394,7 +397,7 @@ //检测完,查询检测完,当前检定环节:其他实验室/检测完,已出具证书:查询证书报告表/无,证书总数:具体实验室/无 case MeasureStatusEnum.MEASURE_COMPLETE: - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); //查询样品检定到的其他实验室或样品检测完成 enrichLabExecutiveRecords(resultList); break; @@ -858,6 +861,52 @@ return ReturnUtil.success(); } + @Override + public ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request) { + String operateReason = request.getOperateReason(); + Long labExecutiveId = request.getId(); + BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); + executiveInfo.setId(labExecutiveId); + executiveInfo.setRemark(operateReason); + //状态置为无需检测,前端根据该状态在部门检测展示退检确认按钮 + executiveInfo.setMeasureStatus(SampleStatusEnum.NO_NEED_MEASURE); + labExecutiveInfoMapper.updateById(executiveInfo); + return ReturnUtil.success(); + } + + @Override + @Transactional + public ReturnDTO executiveNoMeasureConfirm(List requestList) { + //查询是否在该用户的检测中有该样品,没有则返回提示信息,有则更新检测状态、更新样品状态(判断是否全部实验室检测完成) + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + SampleOperateRequest sampleOperateRequest = requestList.get(0); + Long userId = sampleOperateRequest.getMeasurePersonId(); + + //查询扫描样品中为该用户待检测和检测中的样品列表 + List preList = new ArrayList<>(); + List inList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); + List toList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); + preList.addAll(inList); + preList.addAll(toList); + if (CollectionUtils.isEmpty(preList)) { + //throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + return ReturnUtil.success(); + } + int updateFlag = labExecutiveInfoMapper.updateForSampleMeasureCompleteOperate(preList, userId, MeasureStatusEnum.MEASURE_COMPLETE); + if (updateFlag > 0) { + preList.forEach(pre -> { + orderSampleRelationMapper.updateByOrderIdAndSampleId(pre.getOrderId(), pre.getSampleId(), SampleStatusEnum.MEASURE_COMPLETE); + //委托书中所有样品检测完更新委托书接收状态为检测完成,未检测完的数量为0则表示全部检完 + updateOrderStatusComplete(pre); + }); + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + } + private Page getSampleHandOutListResponsePage() { Page page = PageFactory.defaultPage(); page.setCurrent(1); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ba6ab23..715f549 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -44,6 +46,7 @@ import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -111,6 +114,15 @@ return businessOrder; } + @Override + public ReturnDTO orderDelete(Long id) { + int flag = this.baseMapper.deleteById(id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", id); + int dFlag = sampleRelationMapper.delete(queryWrapper); + return ReturnUtil.success(); + } + /** * 1、删除样品和委托书的明细关系,填充传输的明细样品数据 * 2、对样品进行是否在库的判断,如果不存在则入库, 入库操作完成,进行委托书样品关系的绑定 @@ -330,8 +342,16 @@ } private void initOrderInfo(BusinessOrder businessOrder) { - Long maxNo = this.baseMapper.selectMaxCOrderNo(); - String orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + Long maxNo = this.baseMapper.selectMaxOrderNo(); + String orderNo; + if (StringUtils.isNotEmpty(businessOrder.getPlanDeliverTime())) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + DateTime planDeliverTime = DateUtil.parse(businessOrder.getPlanDeliverTime()); + String datePrefix = format.format(planDeliverTime); + orderNo = NumberGeneratorUtil.getOrderContactNo(ORDER_PREFIX, datePrefix, maxNo); + } else { + orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + } AuthUser authUser = ShiroKit.getUser(); businessOrder.setCreateUser(authUser.getId()); businessOrder.setUpdateUser(authUser.getId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java index 086eaa8..bf084c3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java @@ -33,7 +33,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -108,10 +108,10 @@ public ReturnDTO batchImport(MultipartFile file) throws IOException { //获取文件输入流,压缩文件直接读取 InputStream in = new BufferedInputStream(file.getInputStream()); - ZipInputStream zin = new ZipInputStream(in, Charset.forName("GBK")); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); //MultipartFile转File,外层zip File realFile = FileUtil.multipartFileToFile(file); - ZipFile zipFile = new ZipFile(realFile, Charset.forName("GBK")); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); BufferedInputStream bs = new BufferedInputStream(zin); ZipEntry ze; ZipEntry eze = null; @@ -153,14 +153,14 @@ .headRowNumber(1).autoTrim(true).sheet(0).doRead(); List certificateImportList = listener.getList(); if(CollectionUtils.isEmpty(certificateImportList)){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); } List resultList = new ArrayList<>(); certificateImportList.forEach(cert -> { if(StringUtils.isEmpty(cert.getCertificateCode()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getSampleNo()) || StringUtils.isEmpty(cert.getOutsourcerNo()) || StringUtils.isEmpty(cert.getCertificateFileStrings())){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA_ITEM); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); } //样品编号获取样品id、分包方编号获取分包方id OrderSampleDTO orderSampleDTO = orderSampleRelationMapper.selectIdBySampleNo(cert.getSampleNo()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java index f2303e3..4df9dc0 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java @@ -450,9 +450,9 @@ } break; //全部 - //区分管理员和普通用户 - //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + //不区分管理员和普通用户,全部可见已通过的 case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List allApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(allApproveList)) { businessKeys = allApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java index 372e9c3..fe9e14a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java @@ -236,6 +236,8 @@ } private QueryWrapper getWrapper(OutsourcerListRequest request) { + //不做权限限制任何人可查询全部 + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); //flowable中已通过状态的业务id列表 List passedList = baseApprovalService.getPassedList(request.getFormId()); @@ -336,6 +338,7 @@ //区分管理员和普通用户 //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List AllApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(AllApproveList)) { businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a4f8bb9..9ca79f7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -223,10 +223,20 @@ @Transactional public ReturnDTO forcedTerminate(List deviceReceiveDTO) { boolean batchUpdateFlag = true; - for (DeviceStatusChangeDTO deviceStatusChangeDTO : deviceReceiveDTO) { - Integer updateFlag = this.statusChangeUpdator(deviceStatusChangeDTO, true); + for (DeviceStatusChangeDTO changeDTO : deviceReceiveDTO) { + Integer updateFlag = 0; + if (MEASURE_COMPLETE.equals(changeDTO.getStatus())) { + //完成按钮 + changeDTO.setStatus(TO_GIVE_BACK); + updateFlag = this.statusChangeUpdator(changeDTO, false); + } else if (TO_GIVE_BACK.equals(changeDTO.getStatus())) { + //终止按钮 + updateFlag = this.statusChangeUpdator(changeDTO, true); + //删除关联证书报告 + deleteCertificateReport(changeDTO); + } //实验室状态数据的更新 - updateLabExecutiveInfo(deviceStatusChangeDTO, MeasureStatusEnum.TERMINATED); + updateLabExecutiveInfo(changeDTO, changeDTO.getStatus()); batchUpdateFlag &= updateFlag > 0; } if (batchUpdateFlag) { @@ -235,6 +245,13 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + private void deleteCertificateReport(DeviceStatusChangeDTO deviceStatusChangeDTO) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + wrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); + certificateReportMapper.delete(wrapper); + } + /** * 1、查询是否绑定 @@ -299,6 +316,7 @@ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + //即使终止,实验室已完成的检定也不会变成终止,因为已完成了,所以这里不加检测完成的条件 queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) .or().eq("measure_status", MeasureStatusEnum.IN_MEASURE)); @@ -434,7 +452,7 @@ BusinessOrderSampleRelation businessOrderSampleRelation = new BusinessOrderSampleRelation(); businessOrderSampleRelation.setSampleStatus(statusChangeDTO.getStatus()); //从已收入回退到待收入,删除历史分发检测的实验室数据 - if ("1".equals(statusChangeDTO.getStatus())) { + if (TO_RECEIVE.equals(statusChangeDTO.getStatus())) { deleteLabExecutiveInfo(statusChangeDTO); } if (TO_GIVE_BACK.equals(statusChangeDTO.getStatus())) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java index 369b77c..733c365 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java @@ -210,7 +210,7 @@ } @Override - public Page listPageByOrder(Page page, OrderSampleListRequest request) throws Exception{ + public Page listPageByOrder(Page page, OrderSampleListRequest request) throws Exception{ page.setRecords(this.baseMapper.listPageByOrder(page, request)); for (MultiItemSampleListResponse multiItemSampleResponse : page.getRecords()) { DictCodeUtils.convertDictCodeToName(multiItemSampleResponse); @@ -263,7 +263,7 @@ AuthUser authUser = ShiroKit.getUser(); customerSampleInfo.setSampleNo(sampleNo); customerSampleInfo.setCreateUser(authUser.getId()); - customerSampleInfo.setSampleBelong("1"); + //customerSampleInfo.setSampleBelong("1"); customerSampleInfo.setUpdateUser(authUser.getId()); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java index 0f6fe47..496be74 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java @@ -143,6 +143,7 @@ } wrapper.like(StringUtils.isNotBlank(request.getTemplateNo()), "template_no", request.getTemplateNo()); wrapper.like(StringUtils.isNotBlank(request.getTemplateName()), "template_name", request.getTemplateName()); + wrapper.like(StringUtils.isNotBlank(request.getTemplateDesc()), "template_desc", request.getTemplateDesc()); wrapper.like(StringUtils.isNotBlank(request.getTemplateCreator()), "template_creator", request.getTemplateCreator()); wrapper.apply(StringUtils.isNotBlank(request.getCreateStartTime()), "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java index cee88ef..92af66d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java @@ -5,8 +5,10 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.print.*; import com.casic.missiles.dto.flowable.ApprovalAgreeRequest; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; public interface IBusinessCertificatePrintService { @@ -29,4 +31,6 @@ ReturnDTO submitAgainPrint(BaseApprovalSubmitRequest request); ReturnDTO change(ChangeCertificateRequest changeCertificateRequest); + + ReturnDTO batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java index 2da6613..a1b4cae 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java @@ -55,4 +55,8 @@ ReturnDTO allocateStaff(SampleAllocateRequest sampleAllocateRequest); ReturnDTO batchAllocate(List allocateBatchRequest); + + ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request); + + ReturnDTO executiveNoMeasureConfirm(List requestList); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOrderService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOrderService.java index f557f93..d2f7c45 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOrderService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOrderService.java @@ -26,6 +26,8 @@ BusinessOrder orderDetail(Long id); + ReturnDTO orderDelete(Long id); + ReturnDTO updateOrder(BusinessOrder businessOrder) throws Exception; ReturnDTO addOrder(BusinessOrder businessOrder)throws Exception; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index 7ba3e1b..ddc8fe4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureTypeEnum; +import com.casic.missiles.enums.business.MeasureWayEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; import com.casic.missiles.enums.sample.SampleStatusEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; @@ -23,6 +24,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.Objects; @@ -37,6 +39,7 @@ public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @Override + @Transactional public void doHandleNotifyEvent(NotifyEventStatusDTO notifyEventStatusDTO) { Long id = Long.valueOf(notifyEventStatusDTO.getId()); Assert.isFalse(Objects.isNull(id), () -> { @@ -76,8 +79,8 @@ sampleInfo.setRemark(certificateReport.getSampleRemark()); int rs = sampleMapper.updateById(sampleInfo); if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - //若样品是自检或现场检查方式、已全部检定完成更新样品待归还状态 - if (MeasureTypeEnum.INSIDE_MEASURE.equals(sampleInfo.getMeasureType())&&businessOrder!=null) { + //若样品检定方式是自检,已全部检定完成更新样品待归还状态 + if (MeasureTypeEnum.INSIDE_MEASURE.equals(sampleInfo.getMeasureType()) && Objects.nonNull(businessOrder)) { //获取样品已取得的证书不小于应出具的总数时更新样品待归还状态 if(certificateReportMapper.selectSampleCertifications(sampleInfo.getId(), businessOrder.getId())>= certificateReportMapper.selectSampleCertificationAlls(sampleInfo.getId(), businessOrder.getId())) { @@ -90,6 +93,21 @@ orderSampleRelationMapper.update(businessOrderSampleRelation, wrapper); } } + //若样品检测方式是现场检测,已全部检定完成更新样品为已归还状态 + if (MeasureWayEnum.SITE_MEASURE.equals(sampleInfo.getMeasureWay()) && Objects.nonNull(businessOrder)) { + //现场检测暂不比对应出具证书数量,因为只有一个 + //if(certificateReportMapper.selectSampleCertifications(sampleInfo.getId(), businessOrder.getId())>= + // certificateReportMapper.selectSampleCertificationAlls(sampleInfo.getId(), businessOrder.getId())) { + BusinessOrderSampleRelation businessOrderSampleRelation = new BusinessOrderSampleRelation(); + businessOrderSampleRelation.setSampleStatus(SampleStatusEnum.GIVE_BACK_COMPLETE); + businessOrderSampleRelation.setWaitTime(DateUtil.now()); + businessOrderSampleRelation.setReturnTime(DateUtil.now()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("order_id", businessOrder.getId()); + wrapper.eq("sample_id", sampleInfo.getId()); + orderSampleRelationMapper.update(businessOrderSampleRelation, wrapper); + //} + } } } } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 429d5c5..a985689 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -20,13 +20,12 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.BindingResult; -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.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.Objects; /** @@ -73,6 +72,19 @@ return ReturnUtil.success(super.packForBT(certificatePrintService.noScopeListPage(request, page))); } + /** + * 批量导入,zip包 + * 解析zip包,读取zip包中excel文件 + */ + @ApiOperation("证书报告pdf扫描件批量导入") + @PostMapping("/batchImport") + public ReturnDTO batchImport(@RequestParam("file") MultipartFile file) throws IOException { + if(Objects.isNull(file)){ + throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL); + } + return certificatePrintService.batchImport(file); + } + @ApiOperation("证书详情") @PostMapping("/detail") public ReturnDTO certificatePrintDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java index 5895550..161873d 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessDispatchController.java @@ -97,7 +97,7 @@ /** * 设备终止,,同时要进行终止原因的回填 */ - @ApiOperation("设备终止(status=5为从完成->待归还)") + @ApiOperation("设备终止(该接口前端传status=4为完成按钮操作(状态置为待归还),传status=5为终止按钮操作(状态置为待归还,且删除关联证书)") @PostMapping("/terminate") public ReturnDTO forcedTerminate(@RequestBody @Valid List deviceReceiveDTO, BindingResult bindingResult) { Assert.isFalse(bindingResult.hasErrors(), () -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index b4a5199..746d0cf 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -265,6 +265,29 @@ } /** + * 退检流程:检定员退检到部门检测并填写原因,部门负责人查看原因并确定退检(即无需检测),样品状态更新为检定完成,在检定完成页面中可查看 + */ + @ApiOperation("我的检测-退检(无需检测)") + @PostMapping("/executive/noMeasure") + @ResponseBody + public ReturnDTO executiveNoMeasure(@RequestBody @Valid ExecutiveNoMeasureRequest request, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasure(request); + } + + @ApiOperation("部门检测-部门负责人确定退检(即确定无需检测,状态变更为检定完成)(前端根据样品状态为无需检测状态展示确定退检按钮)") + @PostMapping("/executive/noMeasure/confirm") + @ResponseBody + public ReturnDTO executiveNoMeasureConfirm(@RequestBody @Valid List requestList, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + } + return labExecutiveInfoService.executiveNoMeasureConfirm(requestList); + } + + /** * 分发员编辑实验室检测列表 */ @ApiOperation("分发员编辑实验室检测列表") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java index 9fd58a9..f4e1034 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOrderController.java @@ -68,6 +68,15 @@ return ReturnUtil.success(businessOrderService.orderDetail(idDTO.getId())); } + @ApiOperation("委托书删除(仅未接收有该按钮)") + @PostMapping("/delete") + public ReturnDTO adviceDelete(@RequestBody @Valid IdDTO idDTO) { + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return businessOrderService.orderDelete(idDTO.getId()); + } + @ApiOperation("委托书更新") @PostMapping("/update") public ReturnDTO updateAdvice(@RequestBody @Valid BusinessOrder businessOrder, BindingResult bindingResult)throws Exception { @@ -77,7 +86,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.updateOrder(businessOrder)); + return businessOrderService.updateOrder(businessOrder); } @ApiOperation("委托书新增") @@ -86,7 +95,7 @@ Assert.isFalse(bindingResult.hasErrors(), () -> { throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); }); - return ReturnUtil.success(businessOrderService.addOrder(businessOrder)); + return businessOrderService.addOrder(businessOrder); } @ApiOperation("委托书列表导出") diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 757020e..2f052d8 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -78,8 +78,8 @@ AGREEMENT_APPLY_SUBMIT_FAILED(2426, "合同提交处理失败"), OUTSOURCE_CERTIFICATE_NO_FILES(2427, "无导入数据Excel文件或无证书文件或证书文件格式有误"), - OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), - OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), + EXCEL_NO_DATA(2428, "Excel文件无数据"), + EXCEL_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), USER_ID_EMPTY(2432, "用户id不能为空"), @@ -89,7 +89,9 @@ LABEL_IS_EMPTY(2435, "标签字段为空,无法绑定"), LABEL_ALREADY_BIND(2436, "标签已经绑定"), CERTIFICATE_PRINT_IS_EMPTY(2437, "证书打印查询为空,无法作废"), - CERTIFICATE_PARAM_IS_EMPTY(2437, "证书作废所传参数为空,无法作废"); + CERTIFICATE_PARAM_IS_EMPTY(2438, "证书作废所传参数为空,无法作废"), + CERTIFICATE_NO_FILES(2439, "无导入数据Excel文件或无证书文件或证书文件格式有误"), + CERTIFICATE_INCORRECT_DATA_ITEM(2440, "Excel文件中证书编号或证书名称或证书附件不正确"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java new file mode 100644 index 0000000..2dd036f --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/MeasureWayEnum.java @@ -0,0 +1,14 @@ +package com.casic.missiles.enums.business; + +public interface MeasureWayEnum { + /** + * 现场检测 + */ + String SITE_MEASURE = "1"; + + /** + * 实验室检测 + */ + String LAB_MEASURE = "2"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java index d643700..c10d233 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MinioUtil.java @@ -161,12 +161,10 @@ List names = new ArrayList<>(multipartFile.length); for (MultipartFile file : multipartFile) { String fileName = file.getOriginalFilename(); - String[] split = fileName.split("\\."); - if (split.length > 1) { - fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1]; - } else { - fileName = fileName + System.currentTimeMillis(); - } + int lastIndex = fileName.lastIndexOf("."); + String part1 = fileName.substring(0, lastIndex); + String part2 = fileName.substring(lastIndex + 1); + fileName = part1 + "_" + System.currentTimeMillis() + "." + part2; InputStream in = null; try { in = file.getInputStream(); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java index d5596e2..85b5193 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/NumberGeneratorUtil.java @@ -50,12 +50,43 @@ } /** + * 委托单编号生成 + * @param prefix + * @param nowNum + * @return + */ + public static synchronized String getOrderContactNo(String prefix, String datePrefix, long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是预约送达日期,从0计算后4位 + if (!datePrefix.equals(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + + // 组合 + builder.append(prefix); + builder.append(num); + return builder.toString(); + } + + /** * 证书报告编号生成 * @param prefix * @param nowNum * @return */ - public static synchronized String getCode(String prefix, long nowNum, String datePrefix) { StringBuilder builder = new StringBuilder(); StringBuilder num = new StringBuilder(); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java index 6934768..a087e92 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderMapper.java @@ -20,7 +20,7 @@ public interface BusinessOrderMapper extends BaseMapper { @Select("SELECT IFNULL(max(RIGHT(order_code, 12)), 0) from business_order") - Long selectMaxCOrderNo(); + Long selectMaxOrderNo(); List selectIdsByStatus(@Param("orderStatus") String orderStatus); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index da59b12..508e3e2 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -40,7 +40,8 @@ "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print @@ -103,7 +104,8 @@ "manufacturingNo",bo.order_code AS "orderNo",customer_name AS "customerName", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", - bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" + bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId", + bcp.certificate_report_pdf AS "certificateReportPdf" FROM ( SELECT * FROM business_certificate_print diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml index 61d3fc9..6d30cc9 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificateReportMapper.xml @@ -26,6 +26,7 @@ + @@ -200,6 +201,12 @@ and csi.sample_name like concat('%',#{request.sampleName},'%') + + and csi.sample_model like concat('%',#{request.sampleModel},'%') + + + and csi.manufacturing_no like concat('%',#{request.manufacturingNo},'%') + and bcr.measure_category like concat('%',#{request.measureCategory},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml index 7cbcf70..8695b53 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessOutsourceCertificateMapper.xml @@ -62,9 +62,9 @@ and boc.certificate_name like concat('%',#{request.certificateName},'%') - - and csi.sample_no like concat('%',#{request.sampleNo},'%') - + + + and csi.sample_name like concat('%',#{request.sampleName},'%') diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 79db2e5..c1a9016 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -62,12 +62,13 @@ SELECT id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,customerName,measurePeriod, - validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer + validDeadline,measureLastTime,sampleNo,customerNo,powerVoltage,manufacturer,measureWay FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS "manufacturingNo",appendix_descn AS "appendixDescn",remark,customer_name AS "customerName",measure_period AS "measurePeriod",valid_deadline AS validDeadline,measure_last_time AS "measureLastTime",create_time,id, - measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer" + measure_content AS "measureContent",customer_no AS "customerNo",power_voltage AS "powerVoltage",manufacturer AS "manufacturer", + measure_way AS "measureWay" FROM customer_sample_info WHERE is_del=0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 8a4774e..c40a841 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -100,6 +100,8 @@ String MEASURE_CATEGORY = "measureCategory"; //检定方式 String MEASURE_TYPE = "measureType"; + //检测方式 + String MEASURE_WAY = "measureWay"; //样品状态 String SAMPLE_STATUS = "sampleStatus"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java new file mode 100644 index 0000000..3cfc4ed --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveNoMeasureRequest.java @@ -0,0 +1,23 @@ +package com.casic.missiles.dto.business.labExecutive; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/21 10:29 + */ +@Data +@ApiModel +public class ExecutiveNoMeasureRequest { + @NotNull(message = "实验室检测id不能为空") + @ApiModelProperty(value = "实验室检测id", dataType = "Long") + private Long id; + + @ApiModelProperty(value = "退检原因", dataType = "String") + private String operateReason; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java index 29c2657..094c76f 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/ExecutiveSendBackRequest.java @@ -33,6 +33,6 @@ @ApiModelProperty(value = "检定人员id", dataType = "Long") private Long measurePersonId; - @ApiModelProperty(value = "退回原因", dataType = "Long") + @ApiModelProperty(value = "退回原因", dataType = "String") private String operateReason; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java index 17b96a4..f3a7e08 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleLabExecutiveListResponse.java @@ -122,7 +122,7 @@ @ApiModelProperty(value = "业务员名字", dataType = "String") private String busPersonName; - @JSONField(serialize = false) + @ApiModelProperty(value = "检定状态", dataType = "String") private String measureStatus; @JSONField(serialize = false) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java index 73fa0df..76bc473 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/labExecutive/SampleOperateRequest.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "样品id", dataType = "Long") private Long sampleId; - @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传)", dataType = "Long") + @ApiModelProperty(value = "检定人员id(最终批准人审批后调用该接口时必传,我的检测退检到部门检测后调用该接口也必传)", dataType = "Long") private Long measurePersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java new file mode 100644 index 0000000..5fee05f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateImportDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.dto.business.print; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description: pdf扫描证书批量导入Excel实体 + * @Author: wangpeng + * @Date: 2025/3/27 11:33 + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +public class CertificateImportDTO { + @ExcelProperty(value = "证书编号") + @ApiModelProperty(value = "证书编号", dataType = "String") + private String certificateReportCode; + + @ExcelProperty(value = "证书名称") + @ApiModelProperty(value = "证书名称", dataType = "String") + private String certificateReportName; + + @ExcelProperty(value = "证书附件") + @ApiModelProperty(value = "证书附件", dataType = "String") + private String certificateFileName; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index 5be9325..5f210ea 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -115,4 +115,7 @@ @ApiModelProperty(value = "证书打印名称", dataType = "String") private String printFileName; + @ApiModelProperty(value = "证书报告pdf扫描件", dataType = "String") + private String certificateReportPdf; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index 5243b55..1b91742 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -184,6 +184,9 @@ @TableField("certificate_report_file") private String certificateReportFile; + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java index 617b348..7d94c4c 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/Info/CustomerInfoResponse.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.model.customer.CustomerAdviceInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java index ed73682..80cd817 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/customer/sample/MultiItemSampleListResponse.java @@ -59,4 +59,7 @@ @ApiModelProperty(value = "证书过期时间", dataType = "String") private String validDeadline; + @ApiModelProperty(value = " 检测方式", dataType = "String") + private String measureWay; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java index 678affc..c91b9f4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/TemplateListRequest.java @@ -37,6 +37,9 @@ @ApiModelProperty(value = "名称", dataType = "String") private String templateName; + @ApiModelProperty(value = "模板描述", dataType = "String") + private String templateDesc; + /** * 创建人 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index e687331..5096d28 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -126,12 +126,19 @@ @TableField("print_file_name") private String printFileName; + /** * 证书报告附件(minio存储文件名) */ @TableField("certificate_report_file") private String certificateReportFile; + /** + * 证书报告pdf扫描件(minio存储文件名) + */ + @TableField("certificate_report_pdf") + private String certificateReportPdf; + @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 75bda90..c4f1dc5 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -239,6 +239,10 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; + @TableField("reject_remark") + @ApiModelProperty(value = "历次驳回原因(未通过中的驳回更新(保存按钮)时增量传入)", dataType = "String") + private String rejectRemark; + @ApiModelProperty(value = "业务员id", dataType = "Long") @TableField("bus_person_id") private Long busPersonId; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index ca1a4de..d6e57ae 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -105,6 +106,7 @@ /** * 备注 */ + @ApiModelProperty(value = "在作废中作为作废原因,在我的检测-退检操作中作为退检原因", dataType = "String") @TableField("remark") private String remark; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index 877dde8..8bd6d99 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -80,6 +80,14 @@ @ApiModelProperty(value = "接收时间", dataType = "String") private String deliverTime; + @ApiModelProperty(value = " 检测方式", dataType = "String") + @DictCodeField(message = "检测方式不合法", cacheName = MeterDictCode.MEASURE_WAY) + private String measureWay; + + @ApiModelProperty(value = " 检测方式名称", dataType = "String") + @TableField(exist = false) + private String measureWayName; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) private String measureType; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java index db3e591..1803969 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfoImport.java @@ -53,6 +53,9 @@ @ExcelProperty("电源电压") private String powerVoltage; + @ExcelProperty("检测方式") + private String measureWay; + @ExcelProperty("检定方式") private String measureType; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 717b9ca..530f61d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,7 +35,10 @@ import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.CommonExcelListener; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.FileUtil; +import com.casic.missiles.utils.MinioUtil; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -44,10 +48,22 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +import static com.casic.missiles.utils.FileUtil.getMultipartFile; /** * @author cz @@ -62,6 +78,8 @@ private final RuntimeService runtimeService; private final BusinessCertificateReportMapper certificateReportMapper; private final BusinessLabExecutiveInfoMapper executiveInfoMapper; + @Resource + private MinioUtil minioUtil; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -334,6 +352,88 @@ return ReturnUtil.success(); } + @Override + @Transactional + public ReturnDTO batchImport(MultipartFile file) throws IOException { + //获取文件输入流,压缩文件直接读取 + InputStream in = new BufferedInputStream(file.getInputStream()); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); + //MultipartFile转File,外层zip + File realFile = FileUtil.multipartFileToFile(file); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); + BufferedInputStream bs = new BufferedInputStream(zin); + ZipEntry ze; + ZipEntry eze = null; + List multipartFileList = new ArrayList<>(); + try { + //读取zip包中pdf证书文件 + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + continue; + } + if (ze.toString().endsWith("pdf")) { + InputStream inputStream = zipFile.getInputStream(ze); + //File转MultipartFile,zip内部文件 + MultipartFile multipartFile = getMultipartFile(inputStream, ze.getName()); + multipartFileList.add(multipartFile); + } + if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) { + eze = ze; + } + } + if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){ + //无证书或证书文件非pdf或无Excel + throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES); + } + List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()])); + //Map:pdf文件名-minio上传文件名 + Map map = new HashMap<>(); + for (int i = 0; i < minioNameList.size(); i++) { + map.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i)); + } + + //读取zip包中excel文件 + InputStream inputStream = zipFile.getInputStream(eze); + //转换为MultipartFile + MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName()); + //解析excel文件,对应文件名转换minio上传文件名,批量存储 + CommonExcelListener listener = new CommonExcelListener<>(); + EasyExcel.read(excelFile.getInputStream(), CertificateImportDTO.class, listener) + .headRowNumber(1).autoTrim(true).sheet(0).doRead(); + List certificateImportList = listener.getList(); + if(CollectionUtils.isEmpty(certificateImportList)){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); + } + List resultList = new ArrayList<>(); + certificateImportList.forEach(cert -> { + if(StringUtils.isEmpty(cert.getCertificateReportCode()) || StringUtils.isEmpty(cert.getCertificateReportName()) + || StringUtils.isEmpty(cert.getCertificateFileName())){ + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); + } + //根据证书编号、证书名称获取证书数据 + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("certificate_report_code", cert.getCertificateReportCode()); + wrapper1.eq("certificate_report_name", cert.getCertificateReportName()); + List certificatePrintList = this.baseMapper.selectList(wrapper1); + if (CollectionUtils.isEmpty(certificatePrintList)) { + throw new BusinessException(BusinessExceptionEnum.CERTIFICATE_INCORRECT_DATA_ITEM); + } + BusinessCertificatePrint certificatePrint = certificatePrintList.get(0); + certificatePrint.setCertificateReportPdf(map.get(cert.getCertificateFileName())); + resultList.add(certificatePrint); + }); + if(!this.updateBatchById(resultList)){ + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + } finally { + in.close(); + zin.closeEntry(); + zin.close(); + bs.close(); + } + return ReturnUtil.success(); + } + /** * 仅支持查看,在匿名状态下进行访问 * 可打印:只需要查询可打印状态即可,待审批状态,查询工作流,同时传输任务id diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 461a51b..019d91f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -497,7 +497,6 @@ /** * 审批通过的证书报告,生成相应的证书打印信息 - * * @param certificateReport * @return */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java index 5456773..261d41d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessEnvironmentRecordServiceImpl.java @@ -125,6 +125,7 @@ wrapper.apply(StringUtils.isNotBlank(request.getEndTime()), "{0} >= DATE_FORMAT(record_time,'%Y-%m-%d %H:%i:%s')", request.getEndTime()); wrapper.eq("is_del", MeterDictEnum.DELETE_FALSE); + wrapper.orderByDesc("record_time"); return wrapper; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index fea431c..c54129d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -304,7 +304,10 @@ //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 case MeasureStatusEnum.TO_MEASURE: - resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, MeasureStatusEnum.TO_ALLOCATE, null); + List statusOneList = new ArrayList<>(); + statusOneList.add(MeasureStatusEnum.TO_ALLOCATE); + statusOneList.add(SampleStatusEnum.NO_NEED_MEASURE);//保证我的检测中退回的能查到 + resultPage = labExecutiveInfoMapper.selectListByDeptIdAndStatus(page, labExecutiveListRequest, deptId, null, statusOneList); resultPage.getRecords().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -362,7 +365,7 @@ String deptName = (String) resultMap.get("deptName"); //获取部门下的各检测状态列表 String measureStatus = labExecutiveListRequest.getMeasureStatus(); - List resultList=new ArrayList<>(); + List resultList = new ArrayList<>(); switch (measureStatus) { //待检测,查询待分配状态 //当前检定环节:具体实验室,已出具证书:无,出具证书总数:无 @@ -380,7 +383,7 @@ List statusList = new ArrayList<>(); statusList.add(MeasureStatusEnum.TO_MEASURE); statusList.add(MeasureStatusEnum.IN_MEASURE); - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, null, statusList); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, null, statusList); resultList.parallelStream().forEach(lab -> { lab.setCurrentSegmentId(deptId); lab.setCurrentSegment(deptName); @@ -394,7 +397,7 @@ //检测完,查询检测完,当前检定环节:其他实验室/检测完,已出具证书:查询证书报告表/无,证书总数:具体实验室/无 case MeasureStatusEnum.MEASURE_COMPLETE: - resultList = labExecutiveInfoMapper.selectListByDeptStatus( labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); + resultList = labExecutiveInfoMapper.selectListByDeptStatus(labExecutiveListRequest, deptId, MeasureStatusEnum.MEASURE_COMPLETE, null); //查询样品检定到的其他实验室或样品检测完成 enrichLabExecutiveRecords(resultList); break; @@ -858,6 +861,52 @@ return ReturnUtil.success(); } + @Override + public ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request) { + String operateReason = request.getOperateReason(); + Long labExecutiveId = request.getId(); + BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); + executiveInfo.setId(labExecutiveId); + executiveInfo.setRemark(operateReason); + //状态置为无需检测,前端根据该状态在部门检测展示退检确认按钮 + executiveInfo.setMeasureStatus(SampleStatusEnum.NO_NEED_MEASURE); + labExecutiveInfoMapper.updateById(executiveInfo); + return ReturnUtil.success(); + } + + @Override + @Transactional + public ReturnDTO executiveNoMeasureConfirm(List requestList) { + //查询是否在该用户的检测中有该样品,没有则返回提示信息,有则更新检测状态、更新样品状态(判断是否全部实验室检测完成) + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + SampleOperateRequest sampleOperateRequest = requestList.get(0); + Long userId = sampleOperateRequest.getMeasurePersonId(); + + //查询扫描样品中为该用户待检测和检测中的样品列表 + List preList = new ArrayList<>(); + List inList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); + List toList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); + preList.addAll(inList); + preList.addAll(toList); + if (CollectionUtils.isEmpty(preList)) { + //throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + return ReturnUtil.success(); + } + int updateFlag = labExecutiveInfoMapper.updateForSampleMeasureCompleteOperate(preList, userId, MeasureStatusEnum.MEASURE_COMPLETE); + if (updateFlag > 0) { + preList.forEach(pre -> { + orderSampleRelationMapper.updateByOrderIdAndSampleId(pre.getOrderId(), pre.getSampleId(), SampleStatusEnum.MEASURE_COMPLETE); + //委托书中所有样品检测完更新委托书接收状态为检测完成,未检测完的数量为0则表示全部检完 + updateOrderStatusComplete(pre); + }); + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.COMPLETE_SAMPLE_NOT_EXIST); + } + private Page getSampleHandOutListResponsePage() { Page page = PageFactory.defaultPage(); page.setCurrent(1); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ba6ab23..715f549 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -44,6 +46,7 @@ import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -111,6 +114,15 @@ return businessOrder; } + @Override + public ReturnDTO orderDelete(Long id) { + int flag = this.baseMapper.deleteById(id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", id); + int dFlag = sampleRelationMapper.delete(queryWrapper); + return ReturnUtil.success(); + } + /** * 1、删除样品和委托书的明细关系,填充传输的明细样品数据 * 2、对样品进行是否在库的判断,如果不存在则入库, 入库操作完成,进行委托书样品关系的绑定 @@ -330,8 +342,16 @@ } private void initOrderInfo(BusinessOrder businessOrder) { - Long maxNo = this.baseMapper.selectMaxCOrderNo(); - String orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + Long maxNo = this.baseMapper.selectMaxOrderNo(); + String orderNo; + if (StringUtils.isNotEmpty(businessOrder.getPlanDeliverTime())) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + DateTime planDeliverTime = DateUtil.parse(businessOrder.getPlanDeliverTime()); + String datePrefix = format.format(planDeliverTime); + orderNo = NumberGeneratorUtil.getOrderContactNo(ORDER_PREFIX, datePrefix, maxNo); + } else { + orderNo = NumberGeneratorUtil.getContactNo(ORDER_PREFIX, maxNo); + } AuthUser authUser = ShiroKit.getUser(); businessOrder.setCreateUser(authUser.getId()); businessOrder.setUpdateUser(authUser.getId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java index 086eaa8..bf084c3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceCertificateServiceImpl.java @@ -33,7 +33,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -108,10 +108,10 @@ public ReturnDTO batchImport(MultipartFile file) throws IOException { //获取文件输入流,压缩文件直接读取 InputStream in = new BufferedInputStream(file.getInputStream()); - ZipInputStream zin = new ZipInputStream(in, Charset.forName("GBK")); + ZipInputStream zin = new ZipInputStream(in, StandardCharsets.UTF_8); //MultipartFile转File,外层zip File realFile = FileUtil.multipartFileToFile(file); - ZipFile zipFile = new ZipFile(realFile, Charset.forName("GBK")); + ZipFile zipFile = new ZipFile(realFile, StandardCharsets.UTF_8); BufferedInputStream bs = new BufferedInputStream(zin); ZipEntry ze; ZipEntry eze = null; @@ -153,14 +153,14 @@ .headRowNumber(1).autoTrim(true).sheet(0).doRead(); List certificateImportList = listener.getList(); if(CollectionUtils.isEmpty(certificateImportList)){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA); } List resultList = new ArrayList<>(); certificateImportList.forEach(cert -> { if(StringUtils.isEmpty(cert.getCertificateCode()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getCertificateName()) || StringUtils.isEmpty(cert.getSampleNo()) || StringUtils.isEmpty(cert.getOutsourcerNo()) || StringUtils.isEmpty(cert.getCertificateFileStrings())){ - throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_DATA_ITEM); + throw new BusinessException(BusinessExceptionEnum.EXCEL_NO_DATA_ITEM); } //样品编号获取样品id、分包方编号获取分包方id OrderSampleDTO orderSampleDTO = orderSampleRelationMapper.selectIdBySampleNo(cert.getSampleNo()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java index f2303e3..4df9dc0 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourceProjectServiceImpl.java @@ -450,9 +450,9 @@ } break; //全部 - //区分管理员和普通用户 - //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + //不区分管理员和普通用户,全部可见已通过的 case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List allApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(allApproveList)) { businessKeys = allApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java index 372e9c3..fe9e14a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOutsourcerInfoServiceImpl.java @@ -236,6 +236,8 @@ } private QueryWrapper getWrapper(OutsourcerListRequest request) { + //不做权限限制任何人可查询全部 + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); //flowable中已通过状态的业务id列表 List passedList = baseApprovalService.getPassedList(request.getFormId()); @@ -336,6 +338,7 @@ //区分管理员和普通用户 //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) case ApprovalStatusEnum.ALL: + ShiroKit.getUser().setRoleTips(Collections.singleton("administrator")); List AllApproveList = baseApprovalService.getAllList(request.getFormId()); if (!CollectionUtils.isEmpty(AllApproveList)) { businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a4f8bb9..9ca79f7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -223,10 +223,20 @@ @Transactional public ReturnDTO forcedTerminate(List deviceReceiveDTO) { boolean batchUpdateFlag = true; - for (DeviceStatusChangeDTO deviceStatusChangeDTO : deviceReceiveDTO) { - Integer updateFlag = this.statusChangeUpdator(deviceStatusChangeDTO, true); + for (DeviceStatusChangeDTO changeDTO : deviceReceiveDTO) { + Integer updateFlag = 0; + if (MEASURE_COMPLETE.equals(changeDTO.getStatus())) { + //完成按钮 + changeDTO.setStatus(TO_GIVE_BACK); + updateFlag = this.statusChangeUpdator(changeDTO, false); + } else if (TO_GIVE_BACK.equals(changeDTO.getStatus())) { + //终止按钮 + updateFlag = this.statusChangeUpdator(changeDTO, true); + //删除关联证书报告 + deleteCertificateReport(changeDTO); + } //实验室状态数据的更新 - updateLabExecutiveInfo(deviceStatusChangeDTO, MeasureStatusEnum.TERMINATED); + updateLabExecutiveInfo(changeDTO, changeDTO.getStatus()); batchUpdateFlag &= updateFlag > 0; } if (batchUpdateFlag) { @@ -235,6 +245,13 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + private void deleteCertificateReport(DeviceStatusChangeDTO deviceStatusChangeDTO) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + wrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); + certificateReportMapper.delete(wrapper); + } + /** * 1、查询是否绑定 @@ -299,6 +316,7 @@ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); + //即使终止,实验室已完成的检定也不会变成终止,因为已完成了,所以这里不加检测完成的条件 queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) .or().eq("measure_status", MeasureStatusEnum.IN_MEASURE)); @@ -434,7 +452,7 @@ BusinessOrderSampleRelation businessOrderSampleRelation = new BusinessOrderSampleRelation(); businessOrderSampleRelation.setSampleStatus(statusChangeDTO.getStatus()); //从已收入回退到待收入,删除历史分发检测的实验室数据 - if ("1".equals(statusChangeDTO.getStatus())) { + if (TO_RECEIVE.equals(statusChangeDTO.getStatus())) { deleteLabExecutiveInfo(statusChangeDTO); } if (TO_GIVE_BACK.equals(statusChangeDTO.getStatus())) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java index 369b77c..733c365 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java @@ -210,7 +210,7 @@ } @Override - public Page listPageByOrder(Page page, OrderSampleListRequest request) throws Exception{ + public Page listPageByOrder(Page page, OrderSampleListRequest request) throws Exception{ page.setRecords(this.baseMapper.listPageByOrder(page, request)); for (MultiItemSampleListResponse multiItemSampleResponse : page.getRecords()) { DictCodeUtils.convertDictCodeToName(multiItemSampleResponse); @@ -263,7 +263,7 @@ AuthUser authUser = ShiroKit.getUser(); customerSampleInfo.setSampleNo(sampleNo); customerSampleInfo.setCreateUser(authUser.getId()); - customerSampleInfo.setSampleBelong("1"); + //customerSampleInfo.setSampleBelong("1"); customerSampleInfo.setUpdateUser(authUser.getId()); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java index 0f6fe47..496be74 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateServiceImpl.java @@ -143,6 +143,7 @@ } wrapper.like(StringUtils.isNotBlank(request.getTemplateNo()), "template_no", request.getTemplateNo()); wrapper.like(StringUtils.isNotBlank(request.getTemplateName()), "template_name", request.getTemplateName()); + wrapper.like(StringUtils.isNotBlank(request.getTemplateDesc()), "template_desc", request.getTemplateDesc()); wrapper.like(StringUtils.isNotBlank(request.getTemplateCreator()), "template_creator", request.getTemplateCreator()); wrapper.apply(StringUtils.isNotBlank(request.getCreateStartTime()), "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java index cee88ef..92af66d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java @@ -5,8 +5,10 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.print.*; import com.casic.missiles.dto.flowable.ApprovalAgreeRequest; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; public interface IBusinessCertificatePrintService { @@ -29,4 +31,6 @@ ReturnDTO submitAgainPrint(BaseApprovalSubmitRequest request); ReturnDTO change(ChangeCertificateRequest changeCertificateRequest); + + ReturnDTO batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java index 2da6613..a1b4cae 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessLabExecutiveInfoService.java @@ -55,4 +55,8 @@ ReturnDTO allocateStaff(SampleAllocateRequest sampleAllocateRequest); ReturnDTO batchAllocate(List allocateBatchRequest); + + ReturnDTO executiveNoMeasure(ExecutiveNoMeasureRequest request); + + ReturnDTO executiveNoMeasureConfirm(List requestList); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOrderService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOrderService.java index f557f93..d2f7c45 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOrderService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOrderService.java @@ -26,6 +26,8 @@ BusinessOrder orderDetail(Long id); + ReturnDTO orderDelete(Long id); + ReturnDTO updateOrder(BusinessOrder businessOrder) throws Exception; ReturnDTO addOrder(BusinessOrder businessOrder)throws Exception; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index 7ba3e1b..ddc8fe4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -6,6 +6,7 @@ import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureTypeEnum; +import com.casic.missiles.enums.business.MeasureWayEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; import com.casic.missiles.enums.sample.SampleStatusEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; @@ -23,6 +24,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.Objects; @@ -37,6 +39,7 @@ public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @Override + @Transactional public void doHandleNotifyEvent(NotifyEventStatusDTO notifyEventStatusDTO) { Long id = Long.valueOf(notifyEventStatusDTO.getId()); Assert.isFalse(Objects.isNull(id), () -> { @@ -76,8 +79,8 @@ sampleInfo.setRemark(certificateReport.getSampleRemark()); int rs = sampleMapper.updateById(sampleInfo); if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - //若样品是自检或现场检查方式、已全部检定完成更新样品待归还状态 - if (MeasureTypeEnum.INSIDE_MEASURE.equals(sampleInfo.getMeasureType())&&businessOrder!=null) { + //若样品检定方式是自检,已全部检定完成更新样品待归还状态 + if (MeasureTypeEnum.INSIDE_MEASURE.equals(sampleInfo.getMeasureType()) && Objects.nonNull(businessOrder)) { //获取样品已取得的证书不小于应出具的总数时更新样品待归还状态 if(certificateReportMapper.selectSampleCertifications(sampleInfo.getId(), businessOrder.getId())>= certificateReportMapper.selectSampleCertificationAlls(sampleInfo.getId(), businessOrder.getId())) { @@ -90,6 +93,21 @@ orderSampleRelationMapper.update(businessOrderSampleRelation, wrapper); } } + //若样品检测方式是现场检测,已全部检定完成更新样品为已归还状态 + if (MeasureWayEnum.SITE_MEASURE.equals(sampleInfo.getMeasureWay()) && Objects.nonNull(businessOrder)) { + //现场检测暂不比对应出具证书数量,因为只有一个 + //if(certificateReportMapper.selectSampleCertifications(sampleInfo.getId(), businessOrder.getId())>= + // certificateReportMapper.selectSampleCertificationAlls(sampleInfo.getId(), businessOrder.getId())) { + BusinessOrderSampleRelation businessOrderSampleRelation = new BusinessOrderSampleRelation(); + businessOrderSampleRelation.setSampleStatus(SampleStatusEnum.GIVE_BACK_COMPLETE); + businessOrderSampleRelation.setWaitTime(DateUtil.now()); + businessOrderSampleRelation.setReturnTime(DateUtil.now()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("order_id", businessOrder.getId()); + wrapper.eq("sample_id", sampleInfo.getId()); + orderSampleRelationMapper.update(businessOrderSampleRelation, wrapper); + //} + } } } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 5cc4467..b05b0f3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -130,9 +131,20 @@ Workbook workbook = WorkbookFactory.create(new FileInputStream(printDocUrl)); //设置打印标题 setPrintTitle(workbook, "证书第三页", "1:5"); - Sheet sheet = workbook.getSheetAt(1); + Sheet sheetOne = workbook.getSheetAt(0);//原始记录页 + Sheet sheetTwo = workbook.getSheetAt(1);//证书首页 + Sheet sheetThree = workbook.getSheetAt(2);//证书第二页 + + // 创建需要的字体样式 + Font italicFont = workbook.createFont(); + italicFont.setItalic(true); // 斜体 + italicFont.setFontName("宋体"); + Font subscriptFont = workbook.createFont(); + subscriptFont.setTypeOffset(Font.SS_SUB); // 下标 + subscriptFont.setFontName("宋体"); + // 填充占位符 - for (Row row : sheet) { + for (Row row : sheetTwo) { for (Cell cell : row) { if (cell.getCellType().equals(CellType.STRING)) { String cellValue = cell.getStringCellValue(); @@ -146,6 +158,27 @@ } } } + //Urel、k的斜体处理 + for (Row row : sheetOne) { + if (row.getRowNum() > 9 && row.getRowNum() < 19) { + for (Cell cell : row) { + if (cell.getCellType().equals(CellType.STRING)) { + String cellValue = cell.getStringCellValue(); + fontSymbolHandle(italicFont, subscriptFont, cell, cellValue); + } + } + } + } + for (Row row : sheetThree) { + if (row.getRowNum() > 13 && row.getRowNum() < 21) { + for (Cell cell : row) { + if (cell.getCellType().equals(CellType.STRING)) { + String cellValue = cell.getStringCellValue(); + fontSymbolHandle(italicFont, subscriptFont, cell, cellValue); + } + } + } + } // 保存文件 FileOutputStream fos = new FileOutputStream(printDocUrl); workbook.write(fos); @@ -155,6 +188,34 @@ } } + private void fontSymbolHandle(Font italicFont, Font subscriptFont, Cell cell, String cellValue) { + if (cellValue.contains("Urel") || cellValue.contains("k=") || cellValue.contains("U")) { + // 使用富文本替换内容 + XSSFRichTextString richText = new XSSFRichTextString(cellValue); + // 处理所有出现的 Urel + int index = 0; + while ((index = cellValue.indexOf("Urel", index)) != -1) { + richText.applyFont(index, index + 1, italicFont); // 斜体 U + richText.applyFont(index + 1, index + 4, subscriptFont); // 下标 rel + index += 4; // 移动到下一个可能的匹配位置 + } + // 处理所有出现的 k= + index = 0; + while ((index = cellValue.indexOf("k=", index)) != -1) { + richText.applyFont(index, index + 1, italicFont); // 斜体 k + index += 2; // 移动到下一个可能的匹配位置 + } + // 处理所有出现的 U + index = 0; + while ((index = cellValue.indexOf("U", index)) != -1) { + richText.applyFont(index, index + 1, italicFont); // 斜体 U + index += 1; // 移动到下一个可能的匹配位置 + } + // 设置单元格新值和格式 + cell.setCellValue(richText); + } + } + //设置打印标题 public static void setPrintTitle(Workbook workbook, String sheetName, String printTitle) { org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheet(sheetName); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ExcelPrintUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ExcelPrintUtils.java index fafc81d..63ac867 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ExcelPrintUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ExcelPrintUtils.java @@ -63,7 +63,10 @@ */ private static String exportParam(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) { // 加载模板 - customFileName = StringUtils.isNotEmpty(customFileName) ? customFileName + ".xlsx" : filePrintRegister.getFileName(); + String[] parts = filePrintRegister.getFileName().split("\\."); + //.xlsx或.xlsm + String lastPart = parts[parts.length - 1]; + customFileName = StringUtils.isNotEmpty(customFileName) ? customFileName + "."+lastPart : filePrintRegister.getFileName(); TemplateExportParams params = new TemplateExportParams(tempLocalFileDir + filePrintRegister.getFileName()); //添加sheet三页的打印 //Map>> sheetsMap = new HashMap<>();