package com.glxp.api.controller.collect; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageInfo; import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.controller.BaseController; import com.glxp.api.entity.basic.UdiEntity; import com.glxp.api.entity.collect.IoCollectOrder; import com.glxp.api.entity.collect.IoCollectOrderBiz; import com.glxp.api.entity.collect.IoCollectOrderCodeMan; import com.glxp.api.req.collect.CollectOrderCodeManRequest; import com.glxp.api.req.inout.AddTagCodeReqeust; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.res.collect.CollectOrderCodeManResponse; import com.glxp.api.service.basic.UdiRelevanceService; import com.glxp.api.service.collect.IoCollectOrderBizService; import com.glxp.api.service.collect.IoCollectOrderCodeManService; import com.glxp.api.service.collect.IoCollectOrderService; import com.glxp.api.service.inout.IoSplitFifoCodeService; import com.glxp.api.util.IntUtil; import com.glxp.api.util.udi.FilterUdiUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; import java.util.Date; import java.util.List; @Slf4j @RestController public class IoCollectOrderCodeManController extends BaseController { @Resource IoCollectOrderService collectOrderService; @Resource IoCollectOrderCodeManService collectOrderCodeManService; @Resource IoCollectOrderBizService collectOrderBizService; @Resource UdiRelevanceService udiRelevanceService; @Resource IoSplitFifoCodeService splitFifoCodeService; /** * 器械拆零处方赋码明细 * * @return */ @GetMapping("/udiwms/ioSplit/collect/manual/code/list") public BaseResponse manuCodeList(CollectOrderCodeManRequest collectOrderCodeManRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } List collectOrderCodeManResponses = collectOrderCodeManService.filterList(collectOrderCodeManRequest); PageInfo pageInfo = new PageInfo<>(collectOrderCodeManResponses); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(collectOrderCodeManResponses); return ResultVOUtils.success(pageSimpleResponse); } /** * 器械拆零处方赋码(手动赋码) * * @return */ @PostMapping("/udiwms/ioSplit/collect/order/tagCode") public BaseResponse prescribeTagCode(@RequestBody @Valid AddTagCodeReqeust addTagCodeReqeust, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); if (collectOrder == null) return ResultVOUtils.error(500, "单据不存在!"); //1.校验UDI码完整性 String code = addTagCodeReqeust.getCode(); 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, "无效条码!"); UdiRelevanceResponse udiRelevanceResponse; List udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(udiEntity.getUdi(), null); if (CollUtil.isEmpty(udiRelevanceResponses)) return ResultVOUtils.error(500, "耗材字典不存在此产品!"); else udiRelevanceResponse = udiRelevanceResponses.get(0); //2.校验是否处方单UDI码 List collectOrderBizs = collectOrderBizService.listByBillNo(addTagCodeReqeust.getBillNo()); IoCollectOrderBiz collectOrderBiz = vailPrescribeProduct(udiRelevanceResponses, collectOrderBizs, udiEntity); if (collectOrderBiz == null) return ResultVOUtils.error(500, "非此单据UDI码!"); //3.校验该UDI码是否已经出库(是否在预出库队列) Boolean b1 = splitFifoCodeService.isExitCode(code, collectOrder.getWorkPlaceCode()); if (!b1) { return ResultVOUtils.error(500, "该UDI码未出库,无法使用!"); } //4. IoCollectOrderCodeMan exitCode = collectOrderCodeManService.findByCode(collectOrderBiz.getOrderIdFk(), code); if (StrUtil.isEmpty(udiEntity.getSerialNo()) && exitCode != null) { exitCode.setScanCount(IntUtil.value(exitCode.getScanCount()) + 1); collectOrderCodeManService.updateById(exitCode); } else if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && exitCode != null) { return ResultVOUtils.error(500, "重复扫码!"); } else { IoCollectOrderCodeMan collectOrderCodeMan = IoCollectOrderCodeMan.builder() .udiCode(code) .relId(collectOrderBiz.getRelId()) .nameCode(udiRelevanceResponse.getNameCode()) .createTime(new Date()) .createUser(getUserId()) .updateTime(new Date()) .updateUser(getUserId()) .scanCount(1) .build(); collectOrderCodeManService.save(collectOrderCodeMan); } return ResultVOUtils.success("赋码成功"); } public IoCollectOrderBiz vailPrescribeProduct(List udiRelevanceResponses, List collectOrderBizs, UdiEntity udiEntity) { for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) { for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { if (udiRelevanceResponse.getId().equals(collectOrderBiz) && (StrUtil.isNotEmpty(collectOrderBiz.getBatchNo()) && collectOrderBiz.getBatchNo().equals(udiEntity.getBatchNo())) ) { return collectOrderBiz; } } } return null; } }