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.constant.Constant; import com.glxp.api.constant.WorkOperType; import com.glxp.api.controller.BaseController; import com.glxp.api.entity.auth.SysWorkplace; import com.glxp.api.entity.basic.BasicCollectBustypeEntity; 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.req.inout.DeleteTageCodeRequest; 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.auth.SysWorkplaceService; import com.glxp.api.service.basic.BasicCollectBustypeService; 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.GennerOrderUtils; import com.glxp.api.util.IntUtil; import com.glxp.api.util.OrderNoTypeBean; 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 GennerOrderUtils gennerOrderUtils; @Resource BasicCollectBustypeService bustypeService; @Resource SysWorkplaceService sysWorkPlaceService; /** * 器械拆零处方赋码明细 * * @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()); } SysWorkplace workPlace = sysWorkPlaceService.getWorkplace(addTagCodeReqeust.getWorkPlaceCode()); if (workPlace == null) return ResultVOUtils.error(500, "请先选择工位"); IoCollectOrderBiz collectOrderBiz = null; IoCollectOrder collectOrder = null; //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); List collectOrderBizs = collectOrderBizService.listByBillNo(addTagCodeReqeust.getBillNo()); //2.校验是否处方单UDI码 if (IntUtil.value(workPlace.getOperationType()) == WorkOperType.TYPE_GEN_ORDER) { if (StrUtil.isEmpty(addTagCodeReqeust.getBillNo())) { String orderNo = gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER, "yyyyMMdd")); BasicCollectBustypeEntity bustypeEntity = bustypeService.findByCode(workPlace.getOrderId()); collectOrder = IoCollectOrder.builder() .billNo(orderNo) .busType(bustypeEntity.getCode()) .fromType(bustypeEntity.getFromType()) .fromCorp(addTagCodeReqeust.getFromCorp()) .billTime(new Date()) .workPlaceCode(workPlace.getWorkplaceId()) .createTime(new Date()) .createUser(getUserId() + "") .updateTime(new Date()) .tagStatus(1) .build(); collectOrderService.save(collectOrder); } //直接扫码单生成业务单 collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity); collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); collectOrderBizService.saveOrUpdate(collectOrderBiz); } else if (IntUtil.value(workPlace.getOperationType()) == WorkOperType.TYPE_VAIL_BATCH) { collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); if (collectOrder == null) return ResultVOUtils.error(500, "单据不存在!"); //3.校验该UDI码是否已经出库(是否在预出库队列) // Boolean b1 = splitFifoCodeService.isExitCode(code, collectOrder.getWorkPlaceCode()); // if (!b1) { // return ResultVOUtils.error(500, "该追溯码未上货,无法使用!"); // } collectOrderBiz = vailByBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity); switch (workPlace.getCheckInsert()) { case 1: //插入 if (collectOrderBiz == null) { collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity); collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); } else { collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1); } break; case 2: //不插入 if (collectOrderBiz == null) return ResultVOUtils.error(500, "非此单据追溯码!"); int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1; if (count > IntUtil.value(collectOrderBiz.getCount())) { return ResultVOUtils.error(500, "扫码数量超出!"); } collectOrderBiz.setScanCount(count); break; case 3: //提醒是否插入 if (!IntUtil.value(addTagCodeReqeust.getInsert())) { if (collectOrderBiz == null) return ResultVOUtils.error(502, "非此单据追溯码!"); int count1 = IntUtil.value(collectOrderBiz.getScanCount()) + 1; if (count1 > collectOrderBiz.getCount()) { return ResultVOUtils.error(502, "扫码数量超出!"); } collectOrderBiz.setScanCount(count1); } else { if (collectOrderBiz == null) { collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity); collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); } else { collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1); } } break; default: break; } } else if (IntUtil.value(workPlace.getOperationType()) == WorkOperType.TYPE_UNVAIL_BATCH) { collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); if (collectOrder == null) return ResultVOUtils.error(500, "单据不存在!"); //3.校验该UDI码是否已经出库(是否在预出库队列) // Boolean b1 = splitFifoCodeService.isExitCode(code, collectOrder.getWorkPlaceCode()); // if (!b1) { // return ResultVOUtils.error(500, "该追溯码未上货,无法使用!"); // } //按单不校验三期 collectOrderBiz = vailNoBatchNo(udiRelevanceResponses, collectOrderBizs); switch (workPlace.getCheckInsert()) { case 1: //插入 if (collectOrderBiz == null) { collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity); collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); } else { collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1); } break; case 2: //不插入 if (collectOrderBiz == null) return ResultVOUtils.error(500, "非此单据追溯码!"); int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1; if (count > IntUtil.value(collectOrderBiz.getCount())) { return ResultVOUtils.error(500, "扫码数量超出!"); } collectOrderBiz.setScanCount(count); break; case 3: //提醒是否插入 if (!IntUtil.value(addTagCodeReqeust.getInsert())) { if (collectOrderBiz == null) return ResultVOUtils.error(502, "非此单据追溯码!"); int count1 = IntUtil.value(collectOrderBiz.getScanCount()) + 1; if (count1 > IntUtil.value(collectOrderBiz.getCount())) { return ResultVOUtils.error(502, "扫码数量超出!"); } collectOrderBiz.setScanCount(count1); } else { if (collectOrderBiz == null) { collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity); collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); } else { collectOrderBiz.setScanCount(collectOrderBiz.getScanCount() + 1); } } break; default: break; } } collectOrderBizService.updateById(collectOrderBiz); 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) .orderIdFk(collectOrder.getBillNo()) .relId(collectOrderBiz.getRelId()) .nameCode(udiRelevanceResponse.getNameCode()) .batchNo(udiEntity.getBatchNo()) .productDate(udiEntity.getProduceDate()) .expireDate(udiEntity.getExpireDate()) .createTime(new Date()) .createUser(getUserId()) .updateTime(new Date()) .updateUser(getUserId()) .scanCount(1) .build(); collectOrderCodeManService.save(collectOrderCodeMan); } collectOrder.setTagStatus(2); collectOrderService.updateById(collectOrder); return ResultVOUtils.success(collectOrder); } @PostMapping("/udiwms/ioSplit/collect/code/remove") public BaseResponse removeCode(@RequestBody @Valid DeleteTageCodeRequest delete, BindingResult bindingResult) { //1.减一,,,IoCollectOrderCodeMan-1 IoCollectOrderBiz-1 //2.删除 IoCollectOrderCodeMan-删除 IoCollectOrderBiz-数量 return ResultVOUtils.error(""); } public IoCollectOrderBiz scanGenOrder(List udiRelevanceResponses, List collectOrderBizs, UdiEntity udiEntity) { for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) { for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) && (StrUtil.isNotEmpty(collectOrderBiz.getBatchNo()) && collectOrderBiz.getBatchNo().equals(udiEntity.getBatchNo())) ) { collectOrderBiz.setCount(IntUtil.value(collectOrderBiz.getCount()) + 1); collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1); return collectOrderBiz; } } } UdiRelevanceResponse udiRelevanceResponse = udiRelevanceResponses.get(0); return IoCollectOrderBiz.builder() .relId(udiRelevanceResponse.getRelId()) .thrCode(udiRelevanceResponse.getMainId()) .ybbm(udiRelevanceResponse.getYbbm()) .payFeeCode(udiRelevanceResponse.getPayFeeCode()) .cpmctymc(udiRelevanceResponse.getCpmctymc()) .nameCode(udiRelevanceResponse.getNameCode()) .ggxh(udiRelevanceResponse.getGgxh()) .batchNo(udiEntity.getBatchNo()) .productDate(udiEntity.getProduceDate()) .expireDate(udiEntity.getExpireDate()) .count(0) .actCount(0) .scanCount(1) .scanActCount(1) .measureUnit(udiRelevanceResponse.getMeasname()) .createTime(new Date()) .updateTime(new Date()) .build(); } public IoCollectOrderBiz vailByBatchNo(List udiRelevanceResponses, List collectOrderBizs, UdiEntity udiEntity) { for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) { for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) && (StrUtil.isNotEmpty(collectOrderBiz.getBatchNo()) && collectOrderBiz.getBatchNo().equals(udiEntity.getBatchNo())) ) { return collectOrderBiz; } } } return null; } public IoCollectOrderBiz vailNoBatchNo(List udiRelevanceResponses, List collectOrderBizs) { for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) { for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) ) { return collectOrderBiz; } } } return null; } }