diff --git a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java index 99f9ad48b..673272fa5 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java @@ -1,5 +1,6 @@ package com.glxp.api.controller.collect; +import cn.hutool.core.collection.CollUtil; import com.github.pagehelper.PageInfo; import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.res.BaseResponse; @@ -11,6 +12,8 @@ import com.glxp.api.req.inout.AddTagCodeReqeust; import com.glxp.api.req.inout.DeleteTageCodeRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.collect.CollectOrderCodeManResponse; +import com.glxp.api.res.inout.VailCodeResultResponse; +import com.glxp.api.res.inout.VailTagResultResponse; import com.glxp.api.service.auth.SysWorkplaceService; import com.glxp.api.service.basic.UdiRelevanceService; import com.glxp.api.service.collect.IoCollectOrderBizService; @@ -18,6 +21,7 @@ import com.glxp.api.service.collect.IoCollectOrderCodeManService; import com.glxp.api.service.collect.IoCollectOrderService; import com.glxp.api.util.GennerOrderUtils; import lombok.extern.slf4j.Slf4j; +import org.json.JSONException; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -26,6 +30,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.ArrayList; import java.util.List; @Slf4j @@ -37,15 +42,6 @@ public class IoCollectOrderCodeManController extends BaseController { IoCollectOrderService collectOrderService; @Resource IoCollectOrderCodeManService collectOrderCodeManService; - @Resource - IoCollectOrderBizService collectOrderBizService; - - @Resource - UdiRelevanceService udiRelevanceService; - @Resource - GennerOrderUtils gennerOrderUtils; - @Resource - SysWorkplaceService sysWorkPlaceService; /** * 器械拆零处方赋码明细 @@ -82,6 +78,38 @@ public class IoCollectOrderCodeManController extends BaseController { return ResultVOUtils.success(collectOrder); } + /** + * 器械拆零处方赋码(批量赋码) + * + * @return + */ + @PostMapping("/udiwms/ioSplit/collect/order/batchAddCode") + public BaseResponse batchAddCode(@RequestBody @Valid AddTagCodeReqeust addTagCodeReqeust, + BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + IoCollectOrder collectOrder = null; + VailTagResultResponse vailTagResultResponse = new VailTagResultResponse(); + List vailCodeResultResponses = new ArrayList<>(); + if (CollUtil.isNotEmpty(addTagCodeReqeust.getCodeList())) { + for (String code : addTagCodeReqeust.getCodeList()) { + VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); + addTagCodeReqeust.setCode(code); + vailCodeResultResponse.setCode(code); + try { + collectOrder = collectOrderCodeManService.prescribeTagCode(addTagCodeReqeust); + } catch (JSONException e) { + vailCodeResultResponse.setErrMsg(e.getMessage()); + vailCodeResultResponse.setStatus(2); + } + } + } + vailTagResultResponse.setCollectOrder(collectOrder); + vailTagResultResponse.setVailCodeResultResponses(vailCodeResultResponses); + return ResultVOUtils.success(vailCodeResultResponses); + } + @PostMapping("/udiwms/ioSplit/collect/code/remove") public BaseResponse removeCode(@RequestBody @Valid DeleteTageCodeRequest deleteTageCodeRequest, diff --git a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java index 82c5e82e4..dbdb30b54 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -8,6 +8,7 @@ import com.glxp.api.entity.inv.InvProductDetailEntity; import com.glxp.api.exception.JsonException; import com.glxp.api.req.collect.CollectOrderRequest; import com.glxp.api.res.inout.IoOrderDetailCodeResponse; +import com.glxp.api.res.inout.VailCodeResultResponse; import com.glxp.api.service.collect.IoCollectOrderService; import com.glxp.api.service.collect.IoCollectOriginService; import com.glxp.api.service.inout.impl.IoCodeService; @@ -44,6 +45,7 @@ import com.glxp.api.util.*; import com.glxp.api.util.udi.FilterUdiUtils; import com.glxp.api.util.udi.UdiCalCountUtil; import org.apache.commons.lang3.StringUtils; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; @@ -91,8 +93,6 @@ public class IoCodeTempController extends BaseController { @Resource IoCodeService codeService; @Resource - InvPreProductDetailService invPreProductDetailService; - @Resource IoAddInoutService ioAddInoutService; @Resource IoOrderDetailCodeService ioOrderDetailCodeService; @@ -282,7 +282,7 @@ public class IoCodeTempController extends BaseController { UdiRelevanceResponse checkUdi = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); if (checkUdi == null) { - return ResultVOUtils.error(500, "耗材字典不存在此产品!"); + return ResultVOUtils.error(500, "产品字典不存在此产品!"); } boolean checkSuccess = true; String lostMsg = ""; @@ -338,6 +338,100 @@ public class IoCodeTempController extends BaseController { } + @AuthRuleAnnotation("") + @PostMapping("warehouse/inout/batchVailCode") + public BaseResponse batchVailCode(@RequestBody AddEnterCodeRequest addEnterCodeRequest) { + List codeList = addEnterCodeRequest.getCodeList(); + if (CollUtil.isEmpty(codeList)) + return ResultVOUtils.error(500, "追溯码不能为空"); + codeList = codeList.stream().distinct().collect(Collectors.toList()); + List vailCodeResultResponses = new ArrayList<>(); + for (String code : codeList) { + VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); + UdiEntity udiEntity = FilterUdiUtils.getUdi(code); + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(1); + vailCodeResultResponse.setErrMsg("解析正确"); + vailCodeResultResponses.add(vailCodeResultResponse); + if (udiEntity == null) { + vailCodeResultResponse.setStatus(2); + vailCodeResultResponse.setErrMsg("追溯码格式错误"); + continue; + } + UdiRelevanceResponse checkUdi = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); + if (checkUdi == null) { + vailCodeResultResponse.setStatus(2); + vailCodeResultResponse.setErrMsg("产品字典不存在此产品"); + continue; + } + } + return ResultVOUtils.success(vailCodeResultResponses); + } + + + @RepeatSubmit() + @AuthRuleAnnotation("") + @PostMapping("warehouse/inout/batchAddCode") + @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderCodeRequest.corpOrderId", "#addOrderCodeRequest.codeList"}, timeOutMsg = "系统正在处理,请勿重复提交") + @Log(title = "单据管理", businessType = BusinessType.INSERT) + public BaseResponse batchAddCode(@RequestBody AddOrderCodeRequest addOrderCodeRequest, BindingResult bindingResult) { + + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + AddCodeResult addCodeResult = new AddCodeResult(); + List codeList = addOrderCodeRequest.getCodeList(); + if (CollUtil.isEmpty(codeList)) + return ResultVOUtils.error(500, "追溯码不能为空"); + List vailCodeResultResponses = new ArrayList<>(); + for (String code : codeList) { + AddOrderRequest addOrderRequest = new AddOrderRequest(); + BeanUtils.copyProperties(addOrderCodeRequest, addOrderRequest); + if (StringUtils.isBlank(code)) return ResultVOUtils.error(ResultEnum.DATA_ERROR); + if (code.endsWith("\u001D")) { + code = code.replace("\u001D", ""); + } + UdiEntity udiEntity = FilterUdiUtils.getUdi(code); + if (udiEntity == null) + return ResultVOUtils.error(500, "无效条码!"); + + if (StrUtil.isNotEmpty(addOrderRequest.getBatchNo())) { + udiEntity.setBatchNo(addOrderRequest.getBatchNo()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getProduceDate())) { + udiEntity.setProduceDate(addOrderRequest.getProduceDate()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getExpireDate())) { + udiEntity.setExpireDate(addOrderRequest.getExpireDate()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getSerialNo())) { + udiEntity.setSerialNo(addOrderRequest.getSerialNo()); + } + BaseResponse baseResponse = null; + if (IntUtil.value(udiEntity.getProductType()) == 2) { + baseResponse = adddGrugOrder(addOrderRequest, udiEntity, code); + } else { + baseResponse = addMaterOrder(addOrderRequest, udiEntity, code); + } + VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); + if (baseResponse.getCode() == 20000) { + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(1); + vailCodeResultResponse.setErrMsg("正确"); + AddCodeResult temp = (AddCodeResult) baseResponse.getData(); + addCodeResult.setOrderId(temp.getOrderId()); + } else { + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(2); + vailCodeResultResponse.setErrMsg(baseResponse.getMessage()); + } + vailCodeResultResponses.add(vailCodeResultResponse); + } + addCodeResult.setVailCodeResultResponses(vailCodeResultResponses); + return ResultVOUtils.success(); + } + + public String checkNewCode(UdiEntity originEnity, String newCode) { UdiEntity newEntity = FilterUdiUtils.getUdi(originEnity.getUdi() + newCode); if (newEntity == null || originEnity == null) { @@ -396,10 +490,9 @@ public class IoCodeTempController extends BaseController { } else { return addMaterOrder(addOrderRequest, udiEntity, code); } - } - + @Transactional(rollbackFor = Exception.class) public BaseResponse addMaterOrder(AddOrderRequest addOrderRequest, UdiEntity udiEntity, String code) { AddCodeResult addCodeResult = new AddCodeResult(); @@ -981,12 +1074,12 @@ public class IoCodeTempController extends BaseController { return ResultVOUtils.success(addCodeResult); } + @Transactional(rollbackFor = Exception.class) public BaseResponse adddGrugOrder(AddOrderRequest addOrderRequest, UdiEntity udiEntity, String code) { AddCodeResult addCodeResult = new AddCodeResult(); BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(addOrderRequest.getAction()); InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(addOrderRequest.getInvCode()); - //批次号校验 //判断此产品是否开启允许无批次号 UdiProductEntity udiInfoEntity = udiProductService.findByNameCode(udiEntity.getUdi()); diff --git a/src/main/java/com/glxp/api/req/inout/AddEnterCodeRequest.java b/src/main/java/com/glxp/api/req/inout/AddEnterCodeRequest.java index db6a5a7e1..6068851d5 100644 --- a/src/main/java/com/glxp/api/req/inout/AddEnterCodeRequest.java +++ b/src/main/java/com/glxp/api/req/inout/AddEnterCodeRequest.java @@ -2,10 +2,14 @@ package com.glxp.api.req.inout; import lombok.Data; +import java.util.List; + @Data public class AddEnterCodeRequest { private String originCode; private String workPlaceCode; + private String busType; private String code; + private List codeList; private String viewType; } diff --git a/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java b/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java new file mode 100644 index 000000000..515b71c91 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java @@ -0,0 +1,41 @@ +package com.glxp.api.req.inout; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class AddOrderCodeRequest { + + /** + * 工位 + */ + @NotNull(message = "工位编码不能为空") + private Long workPlaceCode; + /** + * 业务类型 + */ + @NotNull(message = "业务类型不能为空") + private String splitBusType; + /** + * 本地订单号 + */ + @NotNull(message = "本地单号不能为空") + private String corpOrderId; + /** + * 追溯码 + */ + private String code; + /** + * 追溯码列表 + */ + @NotNull(message = "溯码不能为空") + private List codeList; + /** + * 1:上货;2:退货 + */ + @NotNull(message = "上货方式不能为空") + private Integer inoutType; + +} diff --git a/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java b/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java index b479396d2..37884fb09 100644 --- a/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java +++ b/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java @@ -3,6 +3,7 @@ package com.glxp.api.req.inout; import lombok.Data; import javax.validation.constraints.NotNull; +import java.util.List; @Data public class AddTagCodeReqeust { @@ -15,9 +16,11 @@ public class AddTagCodeReqeust { /** * udi码/药品追溯码 */ - @NotNull(message = "追溯码不能为空") private String code; + + private List codeList; + private String billNo; private Long workPlaceCode; diff --git a/src/main/java/com/glxp/api/res/inout/AddCodeResult.java b/src/main/java/com/glxp/api/res/inout/AddCodeResult.java index 1cec863cb..69fd32ef6 100644 --- a/src/main/java/com/glxp/api/res/inout/AddCodeResult.java +++ b/src/main/java/com/glxp/api/res/inout/AddCodeResult.java @@ -2,8 +2,11 @@ package com.glxp.api.res.inout; import lombok.Data; +import java.util.List; + @Data public class AddCodeResult { private String orderId; private String errMsg; + List vailCodeResultResponses; } diff --git a/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java b/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java new file mode 100644 index 000000000..11d17fcce --- /dev/null +++ b/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java @@ -0,0 +1,14 @@ +package com.glxp.api.res.inout; + +import lombok.Data; + +@Data +public class VailCodeResultResponse { + + private String code; + /** + * 1:正常;2:异常 + */ + private Integer status; + private String errMsg; +} diff --git a/src/main/java/com/glxp/api/res/inout/VailTagResultResponse.java b/src/main/java/com/glxp/api/res/inout/VailTagResultResponse.java new file mode 100644 index 000000000..322e1f845 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inout/VailTagResultResponse.java @@ -0,0 +1,13 @@ +package com.glxp.api.res.inout; + +import com.glxp.api.entity.collect.IoCollectOrder; +import lombok.Data; + +import java.util.List; + +@Data +public class VailTagResultResponse { + IoCollectOrder collectOrder; + private List vailCodeResultResponses; + +}