You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-wms-java/src/main/java/com/glxp/api/controller/inout/IoSplitController.java

278 lines
12 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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.collect.IoCollectOrder;
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.collect.IoCollectOrderService;
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;
@Resource
UdiRelevanceService udiRelevanceService;
@Resource
IoSplitFifoCodeService splitFifoCodeService;
@Resource
BasicSkPrescribeService basicSkPrescribeService;
@Resource
BasicSkPrescribeItemCodeService basicSkPrescribeItemCodeService;
/**
* 器械拆零按码查询
*
* @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<IoSplitCodeEntity> splitCodeEntities = splitCodeService.filterList(splitCodeRequest);
PageInfo<IoSplitCodeEntity> pageInfo = new PageInfo<>(splitCodeEntities);
PageSimpleResponse<IoSplitCodeEntity> 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<IoSplitCodeDetailResponse> splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest);
PageInfo<IoSplitCodeDetailResponse> pageInfo = new PageInfo<>(splitCodeEntities);
PageSimpleResponse<IoSplitCodeDetailResponse> 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<IoSplitCodeDetailResponse> splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest);
PageInfo<IoSplitCodeDetailResponse> pageInfo = new PageInfo<>(splitCodeEntities);
PageSimpleResponse<IoSplitCodeDetailResponse> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(splitCodeEntities);
return ResultVOUtils.success(pageSimpleResponse);
}
@Resource
IoCollectOrderService collectOrderService;
@Resource
SysWorkplaceDocumentService sysWorkplaceDocumentService;
/**
* 开始自动赋码
*
* @return
*/
@PostMapping("/udiwms/ioSplit/material/order/split")
public BaseResponse startSplit(@RequestBody AddTagCodeReqeust addTagCodeReqeust) {
IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
if (collectOrder == null) {
return ResultVOUtils.error(500, "未找到单据");
}
// if (collectOrder.getTagStatus() == 2) {
// return ResultVOUtils.error(501, "当前单据正在处理中,请重新选择单据");
// }
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByWorkplaceCode(collectOrder.getWorkPlaceCode(), collectOrder.getBusType());
if (IntUtil.value(sysWorkplaceDocumentEntity.getAutoTag()) == 1) {
collectOrder.setWorkPlaceCode(addTagCodeReqeust.getWorkPlaceCode());
splitCodeService.preAutoTagCode(collectOrder);
collectOrderService.updateById(collectOrder);
return ResultVOUtils.success("后台已开始赋码,请稍后刷新查看");
} else {
return ResultVOUtils.success("无需自动赋码");
}
}
/**
* 开始自动赋码
*
* @return
*/
@PostMapping("/udiwms/ioSplit/material/order/backSplit")
public BaseResponse backSplit(@RequestBody AddTagCodeReqeust addTagCodeReqeust,
BindingResult bindingResult) {
IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
if (collectOrder == null) {
return ResultVOUtils.error(500, "未找到单据");
}
splitCodeService.backSplit(collectOrder);
return ResultVOUtils.success("后台已开始赋码,请稍后刷新查看");
}
/**
* 器械拆零处方赋码(手动赋码)
*
* @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<UdiRelevanceResponse> udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(udiEntity.getUdi(), null);
if (CollUtil.isEmpty(udiRelevanceResponses))
return ResultVOUtils.error(500, "耗材字典不存在此产品!");
else
udiRelevanceResponse = udiRelevanceResponses.get(0);
//2.校验是否处方单UDI码
List<BasicSkPrescribeDiEntity> 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<UdiRelevanceResponse> udiRelevanceResponses, List<BasicSkPrescribeDiEntity> 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<IoSplitCodeDetailResponse> splitCodeEntities = splitCodeDetailService.filterList(splitDetailCodeRequest);
PageInfo<IoSplitCodeDetailResponse> pageInfo = new PageInfo<>(splitCodeEntities);
PageSimpleResponse<IoSplitCodeDetailResponse> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(splitCodeEntities);
return ResultVOUtils.success(pageSimpleResponse);
}
}