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/collect/IoCollectOrderCodeManContro...

318 lines
14 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.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.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
IoSplitFifoCodeService splitFifoCodeService;
@Resource
GennerOrderUtils gennerOrderUtils;
/**
* 器械拆零处方赋码明细
*
* @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<CollectOrderCodeManResponse> collectOrderCodeManResponses = collectOrderCodeManService.filterList(collectOrderCodeManRequest);
PageInfo<CollectOrderCodeManResponse> pageInfo = new PageInfo<>(collectOrderCodeManResponses);
PageSimpleResponse<CollectOrderCodeManResponse> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(collectOrderCodeManResponses);
return ResultVOUtils.success(pageSimpleResponse);
}
@Resource
BasicCollectBustypeService bustypeService;
@Resource
SysWorkplaceService sysWorkPlaceService;
/**
* 器械拆零处方赋码(手动赋码)
*
* @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());
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<UdiRelevanceResponse> udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(udiEntity.getUdi(), null);
if (CollUtil.isEmpty(udiRelevanceResponses))
return ResultVOUtils.error(500, "耗材字典不存在此产品!");
else
udiRelevanceResponse = udiRelevanceResponses.get(0);
List<IoCollectOrderBiz> 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());
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);
//先不管
if (IntUtil.value(workPlace.getCheckInsert()) == 1) {
} else {
}
if (IntUtil.value(workPlace.getWarnType()) == 1) {
//信息提醒
if (collectOrderBiz == null) {
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity);
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + 1);
}
} else {
//禁止录入
if (collectOrderBiz == null)
return ResultVOUtils.error(500, "非此单据追溯码!");
else {
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + 1);
}
}
} 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);
//先不管
if (IntUtil.value(workPlace.getCheckInsert()) == 1) {
} else {
}
if (IntUtil.value(workPlace.getWarnType()) == 1) {
//信息提醒
if (collectOrderBiz == null) {
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity);
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + 1);
}
} else {
//禁止录入
if (collectOrderBiz == null)
return ResultVOUtils.error(500, "非此单据追溯码!");
else {
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + 1);
}
}
}
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);
}
return ResultVOUtils.success(collectOrder);
}
public IoCollectOrderBiz scanGenOrder(List<UdiRelevanceResponse> udiRelevanceResponses, List<IoCollectOrderBiz> 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<UdiRelevanceResponse> udiRelevanceResponses, List<IoCollectOrderBiz> 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<UdiRelevanceResponse> udiRelevanceResponses, List<IoCollectOrderBiz> collectOrderBizs) {
for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) {
for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) {
if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId())
) {
return collectOrderBiz;
}
}
}
return null;
}
}