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...

358 lines
17 KiB
Java

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;
11 months ago
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;
11 months ago
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.IntUtil;
11 months ago
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;
11 months ago
@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());
}
11 months ago
SysWorkplace workPlace = sysWorkPlaceService.getWorkplace(addTagCodeReqeust.getWorkPlaceCode());
if (workPlace == null)
return ResultVOUtils.error(500, "请先选择工位");
11 months ago
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) {
11 months ago
if (StrUtil.isEmpty(addTagCodeReqeust.getBillNo())) {
String orderNo = gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER, "yyyyMMdd"));
BasicCollectBustypeEntity bustypeEntity = bustypeService.findByCode(workPlace.getOrderId());
11 months ago
collectOrder = IoCollectOrder.builder()
11 months ago
.billNo(orderNo)
.busType(bustypeEntity.getCode())
.fromType(bustypeEntity.getFromType())
.fromCorp(addTagCodeReqeust.getFromCorp())
.billTime(new Date())
11 months ago
.workPlaceCode(workPlace.getWorkplaceId())
11 months ago
.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) {
11 months ago
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);
11 months ago
11 months ago
switch (workPlace.getCheckInsert()) {
case 1: //插入
if (collectOrderBiz == null) {
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity);
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
collectOrderBiz.setScanCount(collectOrderBiz.getScanCount() + 1);
}
break;
case 2: //不插入
if (collectOrderBiz == null)
return ResultVOUtils.error(500, "非此单据追溯码!");
int count = collectOrderBiz.getScanCount() + 1;
if (count > 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 = collectOrderBiz.getScanCount() + 1;
if (count1 > collectOrderBiz.getCount()) {
return ResultVOUtils.error(502, "扫码数量超出!");
}
} else {
if (collectOrderBiz == null) {
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity);
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
collectOrderBiz.setScanCount(collectOrderBiz.getScanCount() + 1);
}
}
break;
default:
break;
11 months ago
}
} 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);
11 months ago
switch (workPlace.getCheckInsert()) {
case 1: //插入
if (collectOrderBiz == null) {
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity);
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
collectOrderBiz.setScanCount(collectOrderBiz.getScanCount() + 1);
}
break;
case 2: //不插入
if (collectOrderBiz == null)
return ResultVOUtils.error(500, "非此单据追溯码!");
int count = collectOrderBiz.getScanCount() + 1;
if (count > 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 = collectOrderBiz.getScanCount() + 1;
if (count1 > collectOrderBiz.getCount()) {
return ResultVOUtils.error(502, "扫码数量超出!");
}
} 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);
}
11 months ago
collectOrder.setTagStatus(2);
collectOrderService.updateById(collectOrder);
11 months ago
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())
11 months ago
.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;
}
}