package com.glxp.api.controller.inout; 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.*; import com.glxp.api.entity.inout.IoSplitCodeEntity; import com.glxp.api.entity.thrsys.BasicInsChdrugEntity; import com.glxp.api.req.inout.AddTagCodeReqeust; import com.glxp.api.req.inout.IoSplitCodeRequest; import com.glxp.api.req.inout.IoSplitDetailCodeRequest; import com.glxp.api.req.thrsys.ThrInsChDrugFeeRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.res.inout.IoSplitCodeDetailResponse; import com.glxp.api.service.basic.*; import com.glxp.api.service.inout.IoSplitCodeDetailService; import com.glxp.api.service.inout.IoSplitCodeService; 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 IoSplitController extends BaseController { @Resource IoSplitCodeService splitCodeService; @Resource IoSplitCodeDetailService splitCodeDetailService; @Resource BasicSkPrescribeDiService basicSkPrescribeDiService; /** * 器械拆零按码查询 * * @return */ @GetMapping("/udiwms/ioSplit/material/code/filter") public BaseResponse filterByCode(IoSplitCodeRequest splitCodeRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } List splitCodeEntities = splitCodeService.filterList(splitCodeRequest); PageInfo pageInfo = new PageInfo<>(splitCodeEntities); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(splitCodeEntities); return ResultVOUtils.success(pageSimpleResponse); } /** * 器械拆零按处方查询赋码明细 * * @return */ @GetMapping("/udiwms/ioSplit/material/prescribe/filter") public BaseResponse filterByPrescribe(IoSplitDetailCodeRequest splitDetailCodeRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } List splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest); PageInfo pageInfo = new PageInfo<>(splitCodeEntities); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(splitCodeEntities); return ResultVOUtils.success(pageSimpleResponse); } /** * 器械拆零按扫码查询处方赋码明细 * * @return */ @GetMapping("/udiwms/ioSplit/material/tagCode/filter") public BaseResponse filterByTagCode(IoSplitDetailCodeRequest splitDetailCodeRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } List splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest); PageInfo pageInfo = new PageInfo<>(splitCodeEntities); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(splitCodeEntities); return ResultVOUtils.success(pageSimpleResponse); } @Resource UdiRelevanceService udiRelevanceService; @Resource IoSplitFifoCodeService splitFifoCodeService; @Resource BasicSkPrescribeService basicSkPrescribeService; @Resource BasicSkPrescribeItemCodeService basicSkPrescribeItemCodeService; /** * 器械拆零处方赋码(手动赋码) * * @return */ @PostMapping("/udiwms/ioSplit/material/prescribe/tagCode") public BaseResponse prescribeTagCode(@RequestBody @Valid AddTagCodeReqeust addTagCodeReqeust, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } BasicSkPrescribeEntity basicSkPrescribeEntity = basicSkPrescribeService.getByCode(addTagCodeReqeust.getPrescribeNum()); if (basicSkPrescribeEntity == 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 basicSkPrescribeDiEntities = basicSkPrescribeDiService.findByPrescribe(addTagCodeReqeust.getPrescribeNum()); BasicSkPrescribeDiEntity basicSkPrescribeDiEntity = vailPrescribeProduct(udiRelevanceResponses, basicSkPrescribeDiEntities, udiEntity); if (basicSkPrescribeDiEntity == null) return ResultVOUtils.error(500, "非此处方单UDI码!"); //3.校验该UDI码是否已经出库(是否在预出库队列) Boolean b1 = splitFifoCodeService.isExitCode(code, basicSkPrescribeEntity.getWorkPlaceCode()); if (!b1) { return ResultVOUtils.error(500, "该UDI码未出库,无法使用!"); } //4. BasicSkPrescribeItemCode exitCode = basicSkPrescribeItemCodeService.findByCode(basicSkPrescribeDiEntity.getPrescribeCode(), code); if (StrUtil.isEmpty(udiEntity.getSerialNo()) && exitCode != null) { exitCode.setScanCount(IntUtil.value(exitCode.getScanCount()) + 1); basicSkPrescribeItemCodeService.updateById(exitCode); } else if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && exitCode != null) { return ResultVOUtils.error(500, "重复扫码!"); } else { BasicSkPrescribeItemCode basicSkPrescribeItemCode = BasicSkPrescribeItemCode.builder() .udiCode(code) .itemCode(basicSkPrescribeDiEntity.getItemCode()) .itemName(basicSkPrescribeDiEntity.getItemName()) .relId(basicSkPrescribeDiEntity.getRelId()) .nameCode(udiRelevanceResponse.getNameCode()) .sickerCode(basicSkPrescribeDiEntity.getSickerCode()) .prescribeCode(basicSkPrescribeDiEntity.getPrescribeCode()) .createTime(new Date()) .createUser(getUserId()) .updateTime(new Date()) .updateUser(getUserId()) .scanCount(1) .build(); basicSkPrescribeItemCodeService.save(basicSkPrescribeItemCode); } return ResultVOUtils.success("赋码成功"); } public BasicSkPrescribeDiEntity vailPrescribeProduct(List udiRelevanceResponses, List basicSkPrescribeDiEntities, UdiEntity udiEntity) { for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) { for (BasicSkPrescribeDiEntity basicSkPrescribeDiEntity : basicSkPrescribeDiEntities) { if (udiRelevanceResponse.getId().equals(basicSkPrescribeDiEntity) && (StrUtil.isNotEmpty(basicSkPrescribeDiEntity.getBatchNo()) && basicSkPrescribeDiEntity.getBatchNo().equals(udiEntity.getBatchNo())) ) { return basicSkPrescribeDiEntity; } } } return null; } /** * 器械拆零处方赋码明细 * * @return */ @GetMapping("/udiwms/ioSplit/material/prescribe/tagCode/list") public BaseResponse prescribeTagCodeList(IoSplitDetailCodeRequest splitDetailCodeRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } List splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest); PageInfo pageInfo = new PageInfo<>(splitCodeEntities); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(splitCodeEntities); return ResultVOUtils.success(pageSimpleResponse); } }