diff --git a/src/main/java/com/glxp/api/controller/inout/IoSplitFifoController.java b/src/main/java/com/glxp/api/controller/inout/IoSplitFifoController.java index 342a8b49b..2fc8cb4cf 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoSplitFifoController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoSplitFifoController.java @@ -30,9 +30,6 @@ public class IoSplitFifoController extends BaseController { IoSplitFifoCodeService splitFifoCodeService; - - - /** * 队列分组查询 * @@ -99,9 +96,10 @@ public class IoSplitFifoController extends BaseController { String invRemind = splitFifoCodeService.findInvRemind(workPlaceCode); return ResultVOUtils.success(invRemind); } + @GetMapping("/udiwms/ioSplit/findInvRemindByBillNo") public BaseResponse findInvRemindByBillNo(IoSplitFifoCodeRequest splitFifoCodeRequest, - BindingResult bindingResult) { + BindingResult bindingResult) { Long workPlaceCode = splitFifoCodeRequest.getWorkPlaceCode(); if (workPlaceCode == null) { return ResultVOUtils.error("工位编号不可为空!"); diff --git a/src/main/java/com/glxp/api/controller/inout/WorkPutController.java b/src/main/java/com/glxp/api/controller/inout/WorkPutController.java new file mode 100644 index 000000000..eb3e71f38 --- /dev/null +++ b/src/main/java/com/glxp/api/controller/inout/WorkPutController.java @@ -0,0 +1,940 @@ +package com.glxp.api.controller.inout; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.glxp.api.annotation.AuthRuleAnnotation; +import com.glxp.api.annotation.CusRedissonAnnotation; +import com.glxp.api.annotation.Log; +import com.glxp.api.annotation.RepeatSubmit; +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.*; +import com.glxp.api.controller.BaseController; +import com.glxp.api.entity.auth.AuthAdmin; +import com.glxp.api.entity.auth.InvWarehouseEntity; +import com.glxp.api.entity.basic.BasicBussinessTypeEntity; +import com.glxp.api.entity.basic.UdiEntity; +import com.glxp.api.entity.basic.UdiProductEntity; +import com.glxp.api.entity.inout.IoCodeLostEntity; +import com.glxp.api.entity.inout.IoCodeTempEntity; +import com.glxp.api.entity.inout.IoOrderEntity; +import com.glxp.api.entity.inout.IoSplitFifoCodeEntity; +import com.glxp.api.entity.inv.InvProductDetailEntity; +import com.glxp.api.req.inout.AddOrderCodeRequest; +import com.glxp.api.req.inout.AddOrderRequest; +import com.glxp.api.res.basic.UdiRelevanceResponse; +import com.glxp.api.res.inout.AddCodeResult; +import com.glxp.api.res.inout.VailCodeResultResponse; +import com.glxp.api.service.auth.InvWarehouseService; +import com.glxp.api.service.basic.*; +import com.glxp.api.service.collect.IoCollectCodeService; +import com.glxp.api.service.collect.IoCollectOrderService; +import com.glxp.api.service.collect.IoCollectOriginService; +import com.glxp.api.service.inout.*; +import com.glxp.api.service.inout.impl.IoCodeService; +import com.glxp.api.service.inv.InvPreinProductDetailService; +import com.glxp.api.service.inv.impl.InvProductDetailService; +import com.glxp.api.service.system.SystemParamConfigService; +import com.glxp.api.util.GennerOrderUtils; +import com.glxp.api.util.IntUtil; +import com.glxp.api.util.MsDateUtil; +import com.glxp.api.util.OrderNoTypeBean; +import com.glxp.api.util.udi.FilterUdiUtils; +import com.glxp.api.util.udi.UdiCalCountUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.BindingResult; +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 java.util.*; +import java.util.stream.Collectors; + +@RestController +public class WorkPutController extends BaseController { + @Resource + IoSplitFifoCodeService fifoCodeService; + @Resource + private IoCodeTempService codeTempService; + @Resource + private IoOrderService orderService; + @Resource + private IBasicBussinessTypeService basicBussinessTypeService; + @Resource + IoAddInoutService transInoutService; + @Resource + UdiRelevanceService udiRelevanceService; + @Resource + UdiProductService udiProductService; + @Resource + GennerOrderUtils gennerOrderUtils; + @Resource + UdiCalCountUtil udiCalCountUtil; + @Resource + InvWarehouseService invWarehouseService; + @Resource + IoCodeLostService codeLostService; + @Resource + IoOrderDetailBizService orderDetailBizService; + @Resource + IoAddInoutService ioAddInoutService; + @Resource + IoOrderDetailCodeService ioOrderDetailCodeService; + @Resource + IoSplitFifoCodeService splitFifoCodeService; + + //前端扫码提交(耗材器械) + @RepeatSubmit() + @AuthRuleAnnotation("") + @PostMapping("work/inout/single/addCode") + @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderRequest.corpOrderId", "#addOrderRequest.code"}, timeOutMsg = "系统正在处理,请勿重复扫码") + @Log(title = "单据管理", businessType = BusinessType.INSERT) + public BaseResponse addOrderWeb(@RequestBody AddOrderRequest addOrderRequest, BindingResult bindingResult) { + + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + + String code = addOrderRequest.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, "无效条码!"); + + if (StrUtil.isNotEmpty(addOrderRequest.getBatchNo())) { + udiEntity.setBatchNo(addOrderRequest.getBatchNo()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getProduceDate())) { + udiEntity.setProduceDate(addOrderRequest.getProduceDate()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getExpireDate())) { + udiEntity.setExpireDate(addOrderRequest.getExpireDate()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getSerialNo())) { + udiEntity.setSerialNo(addOrderRequest.getSerialNo()); + } + IoOrderEntity ioOrderEntity = orderService.findCorpOrderId(addOrderRequest.getCorpOrderId()); + if (ioOrderEntity != null) { + addOrderRequest.setBillNo(ioOrderEntity.getBillNo()); + } + //TODO 退货校验是否有库存 提示产品不存在 + if (StrUtil.equals("return", addOrderRequest.getSplitType())) { + //ioSplitFifoInvService.getOne(new LambdaQueryWrapper().eq(IoSplitFifoInv::getInvCode,"").last("limit 1")); + } + if (IntUtil.value(udiEntity.getProductType()) == 2) { + return adddGrugOrder(addOrderRequest, udiEntity, code); + } else { + return addMaterOrder(addOrderRequest, udiEntity, code); + } + } + + + @RepeatSubmit() + @AuthRuleAnnotation("") + @PostMapping("work/inout/batch/AddCode") + @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderCodeRequest.corpOrderId", "#addOrderCodeRequest.codeList"}, timeOutMsg = "系统正在处理,请勿重复提交") + @Log(title = "单据管理", businessType = BusinessType.INSERT) + public BaseResponse batchAddCode(@RequestBody AddOrderCodeRequest addOrderCodeRequest, BindingResult bindingResult) { + + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + AddCodeResult addCodeResult = new AddCodeResult(); + List codeList = addOrderCodeRequest.getCodeList(); + if (CollUtil.isEmpty(codeList)) + return ResultVOUtils.error(500, "追溯码不能为空"); + List vailCodeResultResponses = new ArrayList<>(); + for (String code : codeList) { + VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); + AddOrderRequest addOrderRequest = new AddOrderRequest(); + BeanUtils.copyProperties(addOrderCodeRequest, addOrderRequest); + addOrderRequest.setBillNo(addCodeResult.getOrderId()); + if (StringUtils.isBlank(code)) return ResultVOUtils.error(ResultEnum.DATA_ERROR); + code = code.trim(); + if (code.endsWith("\u001D")) { + code = code.replace("\u001D", ""); + } + UdiEntity udiEntity = FilterUdiUtils.getUdi(code); + if (udiEntity == null) { + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(2); + vailCodeResultResponse.setErrMsg("无效条码"); + } + if (StrUtil.isNotEmpty(addOrderRequest.getBatchNo())) { + udiEntity.setBatchNo(addOrderRequest.getBatchNo()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getProduceDate())) { + udiEntity.setProduceDate(addOrderRequest.getProduceDate()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getExpireDate())) { + udiEntity.setExpireDate(addOrderRequest.getExpireDate()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getSerialNo())) { + udiEntity.setSerialNo(addOrderRequest.getSerialNo()); + } + + AuthAdmin authAdmin = getUser(); + addOrderRequest.setInvCode(authAdmin.getLocInvCode()); + if (IntUtil.value(addOrderCodeRequest.getInoutType()) == 2) { + addOrderRequest.setAction(ConstantType.SPLIT_RETURN); + } else { + addOrderRequest.setAction(ConstantType.SPLIT_OUT); + } + addOrderRequest.setFromCorp(ConstantType.SPLIT_CORP); + + BaseResponse baseResponse = null; + addOrderRequest.setCode(code); + IoOrderEntity ioOrderEntity = orderService.findCorpOrderId(addOrderCodeRequest.getCorpOrderId()); + if (ioOrderEntity != null) { + addOrderRequest.setBillNo(ioOrderEntity.getBillNo()); + } + + if (IntUtil.value(udiEntity.getProductType()) == 2) { + baseResponse = adddGrugOrder(addOrderRequest, udiEntity, code); + } else { + baseResponse = addMaterOrder(addOrderRequest, udiEntity, code); + } + + if (baseResponse.getCode() == 20000) { + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(1); + vailCodeResultResponse.setErrMsg("正确"); + AddCodeResult temp = (AddCodeResult) baseResponse.getData(); + addCodeResult.setOrderId(temp.getOrderId()); + addOrderRequest.setBillNo(temp.getOrderId()); + } else { + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(2); + vailCodeResultResponse.setErrMsg(baseResponse.getMessage()); + } + vailCodeResultResponses.add(vailCodeResultResponse); + } + addCodeResult.setVailCodeResultResponses(vailCodeResultResponses); + return ResultVOUtils.success(addCodeResult); + } + + + @Transactional(rollbackFor = Exception.class) + public BaseResponse addMaterOrder(AddOrderRequest addOrderRequest, UdiEntity udiEntity, String code) { + + AddCodeResult addCodeResult = new AddCodeResult(); + BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(addOrderRequest.getAction()); + InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(addOrderRequest.getInvCode()); + + + if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && udiEntity.getSerialNo().length() > 20) { + return ResultVOUtils.error(500, "无效条码!序列号超出最大范围"); + } + + if (StrUtil.isNotEmpty(udiEntity.getBatchNo()) && udiEntity.getBatchNo().length() > 20) { + return ResultVOUtils.error(500, "无效条码!批次号超出最大范围"); + } + + + UdiProductEntity udiInfoEntity = udiProductService.findByNameCode(udiEntity.getUdi()); + if (udiInfoEntity == null) { + return ResultVOUtils.error(500, "耗材字典不存在此产品!"); + } + if (!IntUtil.value(udiInfoEntity.getAllowNoBatch())) { + if (StrUtil.isEmpty(udiEntity.getSerialNo()) && StrUtil.isEmpty(udiEntity.getBatchNo())) { + return ResultVOUtils.error(500, "序列号与批次号不能同时为空!"); + } + } + + + String orderId = addOrderRequest.getBillNo(); + //三期校验 + if (bussinessTypeEntity.isCodeFillCheck()) { + BaseResponse checkOriginCodeRes = checkOriginCode(udiEntity); + if (checkOriginCodeRes != null) { + IoCodeLostEntity codeLostEntity = codeLostService.findByCode(code); + if (codeLostEntity == null) { + if (StrUtil.isNotEmpty(orderId)) { + List ioCodeEnttities = codeTempService.findByOrderId(orderId); + IoCodeTempEntity ioCodeEnttity = isExitLocal(code, ioCodeEnttities); + if (ioCodeEnttity == null) { + return checkOriginCodeRes; + } + } else + return checkOriginCodeRes; + } else { + udiEntity.setBatchNo(codeLostEntity.getBatchNo()); + udiEntity.setExpireDate(codeLostEntity.getExpireDate()); + udiEntity.setProduceDate(codeLostEntity.getProduceDate()); + } + if (StrUtil.isNotEmpty(orderId)) { + List ioCodeEnttities = codeTempService.findByOrderId(orderId); + IoCodeTempEntity ioCodeEnttity = isExitLocal(code, ioCodeEnttities); + if (ioCodeEnttity == null) { + return checkOriginCodeRes; + } + } else + return checkOriginCodeRes; + } + } else { + BaseResponse checkOriginCodeRes = checkOriginCode(udiEntity); + if (checkOriginCodeRes != null) { + IoCodeLostEntity codeLostEntity = codeLostService.findByCode(code); + if (codeLostEntity != null) { + udiEntity.setBatchNo(codeLostEntity.getBatchNo()); + udiEntity.setExpireDate(codeLostEntity.getExpireDate()); + udiEntity.setProduceDate(codeLostEntity.getProduceDate()); + checkOriginCodeRes = checkOriginCode(udiEntity); + if (checkOriginCodeRes != null) + return checkOriginCodeRes; + } else + return checkOriginCodeRes; + } + } + + + //过期提醒: + if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 1 && !addOrderRequest.isIgnoreExpire()) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = MsDateUtil.parseDateExpire(expireDate); + if (expireTime - System.currentTimeMillis() < 0) { + return ResultVOUtils.error(504, "当前产品已过期,是否确定继续添加?"); + } + } + } + if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 2) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = MsDateUtil.parseDateExpire(expireDate); + if (expireTime - System.currentTimeMillis() < 0) { + return ResultVOUtils.error(604, "当前产品已过期,无法添加!"); + } + } + } + UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); + + //近效期提醒 + long recent = 0; + if (udiRelevanceResponse.getRecentDateTime() != null) + recent = udiRelevanceResponse.getRecentDateTime().longValue(); + if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 1 && recent > 0 && !addOrderRequest.isIgnoreRecentExpire() && udiRelevanceResponse.getIsDateBy() == 2) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = MsDateUtil.parseDateExpire(expireDate); + long recentTieme = Math.abs(recent * 24 * 60 * 60 * 1000); + long resultTime = expireTime - System.currentTimeMillis(); + + if (resultTime > 0) { + long time = resultTime / (60 * 60 * 1000); +// long time = resultTime / (24 * 60 * 60 * 1000); + if (resultTime < recentTieme) { + return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + "时,是否确定继续添加?"); + } + } + } + } + + if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 1 && recent > 0 && !addOrderRequest.isIgnoreRecentExpire() && udiRelevanceResponse.getIsDateBy() == 1) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = MsDateUtil.parseDateExpire(expireDate); + long recentTieme = Math.abs(recent * 24 * 60 * 60 * 1000); + long resultTime = expireTime - System.currentTimeMillis(); + + if (resultTime > 0) { + long time = resultTime / (24 * 60 * 60 * 1000); + if (resultTime < recentTieme) { + return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + "天,是否确定继续添加?"); + } + } + } + } + + + //校验工位存量是否存在 + if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_OUT)) { + IoSplitFifoCodeEntity fifoCodeEntity = fifoCodeService.findByCode(code, null); + if (fifoCodeEntity != null && StrUtil.isNotEmpty(fifoCodeEntity.getSerialNo())) { + return ResultVOUtils.error(500, "当前追溯码已存在!"); + } + } + + + //先生成扫码单据 + IoOrderEntity orderEntity = orderService.findByBillNo(orderId); + if (StringUtils.isBlank(orderId) || orderEntity == null) { + String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd")); + orderId = orderNo; + } + + List codeEnttitys = codeTempService.findByOrderId(orderId); + IoCodeTempEntity exitLocalEntity = null; + IoCodeTempEntity genDetaiEntity = new IoCodeTempEntity(); + List udiRelevanceResponses = null; + if (codeEnttitys.size() > 0) { + exitLocalEntity = isExitLocal(code, codeEnttitys); + if (exitLocalEntity != null) { + if (StrUtil.isEmpty(exitLocalEntity.getSupId()) || exitLocalEntity.getRelId() == null) { + return ResultVOUtils.error(500, "当前UDI码已存在,且存在异常未处理!"); + } + udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(exitLocalEntity.getNameCode(), null); + + BeanUtils.copyProperties(exitLocalEntity, genDetaiEntity); + genDetaiEntity.setCount(1); + + if (bussinessTypeEntity.isUse()) { + genDetaiEntity.setReCount(udiCalCountUtil.getUseActCount(udiRelevanceResponses.get(0))); + } else { + genDetaiEntity.setReCount(udiCalCountUtil.getCirActCount(udiRelevanceResponses.get(0))); + } + + + exitLocalEntity.setCount(exitLocalEntity.getMyCount() + 1); + + if (bussinessTypeEntity.isUse()) { + exitLocalEntity.setReCount(IntUtil.value(exitLocalEntity.getMyReCount()) * udiCalCountUtil.getUseActCount(udiRelevanceResponses.get(0))); + } else { + exitLocalEntity.setReCount(IntUtil.value(exitLocalEntity.getMyReCount()) * udiCalCountUtil.getCirActCount(udiRelevanceResponses.get(0))); + } + + if (!StringUtils.isBlank(exitLocalEntity.getSerialNo())) { + return ResultVOUtils.error(500, "重复扫码!"); + } + codeTempService.updateById(exitLocalEntity); + } + } + if (exitLocalEntity == null) { + IoCodeTempEntity codeEnttity = new IoCodeTempEntity(); + codeEnttity.setCode(code); + codeEnttity.setOrderId(orderId); + codeEnttity.setCorpOrderId(addOrderRequest.getCorpOrderId()); + codeEnttity.setCreateTime(new Date()); + codeEnttity.setUpdateTime(new Date()); + codeEnttity.setMainAction(bussinessTypeEntity.getMainAction()); + codeEnttity.setAction(bussinessTypeEntity.getAction()); + codeEnttity.setNameCode(udiEntity.getUdi()); + codeEnttity.setBatchNo(udiEntity.getBatchNo()); + codeEnttity.setProduceDate(udiEntity.getProduceDate()); + codeEnttity.setExpireDate(udiEntity.getExpireDate()); + codeEnttity.setSerialNo(udiEntity.getSerialNo()); + codeEnttity.setDeptCode(invWarehouseEntity.getParentId()); + codeEnttity.setInvCode(addOrderRequest.getInvCode()); + codeEnttity.setWarehouseCode(addOrderRequest.getCurSpaceCode()); + codeEnttity.setPreSpaceCode(addOrderRequest.getPreCurSpaceCode()); + codeEnttity.setProductType(1); + codeEnttity.setPreInSpaceCode(addOrderRequest.getCheckPreInSpaceCode()); + codeEnttity.setRelId(addOrderRequest.getRelId()); + codeEnttity.setFifoSplit(addOrderRequest.getFifoSplit()); + codeEnttity.setCount(1); + String unitFk = null; + if (bussinessTypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) { + unitFk = addOrderRequest.getFromCorp(); + } else if (StrUtil.isNotEmpty(addOrderRequest.getSelectSupId())) { + unitFk = addOrderRequest.getSelectSupId(); + } + //产品是否禁用 + udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(codeEnttity.getNameCode(), false); + if (udiRelevanceResponses.size() >= 1) { + udiRelevanceResponse = udiRelevanceResponses.get(0); + if (udiRelevanceResponse == null) { + return ResultVOUtils.error(500, "该产品信息未维护!"); + } else if (!udiRelevanceResponse.getUseDy() && udiRelevanceResponse.getDiType() == ConstantStatus.DITYPE_SYDY) { + return ResultVOUtils.error(500, "该产品不允许以使用单元入库!"); + } + +// if (IntUtil.value(addOrderRequest.getFifoSplit()) == 2 && IntUtil.value(udiRelevanceResponse.getSplitEnable())) { +// return ResultVOUtils.error(500, "当前上货只允许录入整取产品!"); +// } +// if (IntUtil.value(addOrderRequest.getFifoSplit()) == 1 && !IntUtil.value(udiRelevanceResponse.getSplitEnable())) { +// return ResultVOUtils.error(500, "当前上货只允许录入拆零产品!"); +// } + //计算实际数量 + if (bussinessTypeEntity.isUse()) { + codeEnttity.setReCount(IntUtil.value(codeEnttity.getMyReCount()) + udiCalCountUtil.getUseActCount(udiRelevanceResponse)); + } else { + codeEnttity.setReCount(IntUtil.value(codeEnttity.getMyReCount()) + udiCalCountUtil.getCirActCount(udiRelevanceResponse)); + } + } else if (udiRelevanceResponses.size() == 0) { + if (unitFk == null) + return ResultVOUtils.error(500, "耗材字典不存在此产品!"); + else + return ResultVOUtils.error(500, "当前供应商不存在此配送产品!"); + } + + IoOrderEntity isExit = orderService.findByBillNo(orderId); + if (isExit == null) { + orderEntity = new IoOrderEntity(); + orderEntity.setBillNo(orderId); + orderEntity.setCorpOrderId(addOrderRequest.getCorpOrderId()); + orderEntity.setMainAction(bussinessTypeEntity.getMainAction()); + orderEntity.setAction(bussinessTypeEntity.getAction()); + orderEntity.setFromCorp(addOrderRequest.getFromCorp()); + if (StrUtil.isNotEmpty(addOrderRequest.getFromInvCode())) { + InvWarehouseEntity invWarehouseEntity1 = invWarehouseService.findByInvSubByCode(addOrderRequest.getFromInvCode()); + orderEntity.setFromDeptCode(invWarehouseEntity1.getParentId()); + } + orderEntity.setFromInvCode(addOrderRequest.getFromInvCode()); + orderEntity.setFromType(ConstantStatus.FROM_WEBNEW); + orderEntity.setStatus(ConstantStatus.ORDER_STATUS_TEMP_SAVE); + orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_DRAFT); + AuthAdmin authAdmin = getUser(); + orderEntity.setCreateUser(authAdmin.getId() + ""); + orderEntity.setCreateTime(new Date()); + orderEntity.setUpdateUser(authAdmin.getId() + ""); + orderEntity.setUpdateTime(new Date()); + orderEntity.setCustomerId(authAdmin.getCustomerId() + ""); + orderEntity.setDeptCode(invWarehouseEntity.getParentId()); + orderEntity.setCheckPreInOrders(addOrderRequest.getCheckPreInOrders()); + orderEntity.setInvCode(addOrderRequest.getInvCode()); + orderEntity.setOrderType(addOrderRequest.getOrderType()); + orderEntity.setBusType(bussinessTypeEntity.getBusType()); + orderEntity.setSickerAdNum(addOrderRequest.getSickerAdNum()); + orderEntity.setWorkPlaceCode(addOrderRequest.getWorkPlaceCode()); + orderEntity.setProductType(1); + orderEntity.setFifoSplit(addOrderRequest.getFifoSplit()); + orderEntity.setSplitBusType(addOrderRequest.getSplitBusType()); + orderService.insertOrder(orderEntity); + } + + if (IntUtil.value(addOrderRequest.getOrderType()) == ConstantStatus.ORDER_TYPE_NORMAL && bussinessTypeEntity.isCheckEnable() && bussinessTypeEntity.getCheckWebNew() != 0) { + + boolean isBillExit = orderDetailBizService.isExit(orderEntity.getBillNo()); + if (!isBillExit) { + orderService.deleteByBillNo(orderEntity.getBillNo()); + return ResultVOUtils.error(500, "请先录入业务详情"); + } + } + + +// BaseResponse baseResponse = checkRelId(codeEnttity, unitFk); +// if (baseResponse != null) { +// deleteEmptyBillNo(orderEntity); +// } +// genDetaiEntity = codeEnttity; +// if (baseResponse == null) { +// baseResponse = checkSupId(bussinessTypeEntity, codeEnttity, unitFk); +// if (baseResponse != null) +// return baseResponse; +// } else { +// if (baseResponse.getCode() == 501) { +// return baseResponse; +// } else if (baseResponse.getCode() == 502) { +// return baseResponse; +// } +// checkSupId(bussinessTypeEntity, codeEnttity, unitFk); +// return baseResponse; +// } + + + //预出库退货校验队列库存 + if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN)) { + IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEnttity.getCode(), orderEntity.getWorkPlaceCode()); + if (ioSplitFifoCodeEntity == null) + return ResultVOUtils.error(500, "当前工位库存库存不足"); + + if (ioSplitFifoCodeEntity.getScanCount() < codeEnttity.getCount()) { + return ResultVOUtils.error(500, "当前工位库存库存不足"); + } + + } + codeTempService.insert(codeEnttity); + } + addCodeResult.setOrderId(orderId); + transInoutService.genOrderDetailCode(orderEntity, genDetaiEntity); + return ResultVOUtils.success(addCodeResult); + } + + @Transactional(rollbackFor = Exception.class) + public BaseResponse adddGrugOrder(AddOrderRequest addOrderRequest, UdiEntity udiEntity, String code) { + AddCodeResult addCodeResult = new AddCodeResult(); + BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(addOrderRequest.getAction()); + InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(addOrderRequest.getInvCode()); + + //批次号校验 + //判断此产品是否开启允许无批次号 + UdiProductEntity udiInfoEntity = udiProductService.findByNameCode(udiEntity.getUdi()); + if (udiInfoEntity == null) { + return ResultVOUtils.error(500, "药品字典不存在此产品!"); + } + if (StrUtil.isEmpty(udiEntity.getBatchNo())) { + IoCodeLostEntity codeLostEntity = codeLostService.findByCode(addOrderRequest.getCode()); + if (codeLostEntity != null) { + udiEntity.setBatchNo(codeLostEntity.getBatchNo()); + udiEntity.setProduceDate(codeLostEntity.getProduceDate()); + udiEntity.setExpireDate(codeLostEntity.getExpireDate()); + } + } + String orderId = addOrderRequest.getBillNo(); + + //过期提醒: + if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 1 && !addOrderRequest.isIgnoreExpire()) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = MsDateUtil.parseDateExpire(expireDate); + if (expireTime - System.currentTimeMillis() < 0) { + return ResultVOUtils.error(504, "当前产品已过期,是否确定继续添加?"); + } + } + } + if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 2) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = MsDateUtil.parseDateExpire(expireDate); + if (expireTime - System.currentTimeMillis() < 0) { + return ResultVOUtils.error(604, "当前产品已过期,无法添加!"); + } + } + } + UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); + + //近效期提醒 + long recent = 0; + if (udiRelevanceResponse.getRecentDateTime() != null) + recent = udiRelevanceResponse.getRecentDateTime().longValue(); + if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 1 && recent > 0 && !addOrderRequest.isIgnoreRecentExpire() && udiRelevanceResponse.getIsDateBy() == 2) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = MsDateUtil.parseDateExpire(expireDate); + long recentTieme = Math.abs(recent * 24 * 60 * 60 * 1000); + long resultTime = expireTime - System.currentTimeMillis(); + + if (resultTime > 0) { + long time = resultTime / (60 * 60 * 1000); + if (resultTime < recentTieme) { + return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + "时,是否确定继续添加?"); + } + } + } + } + + if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 1 && recent > 0 && !addOrderRequest.isIgnoreRecentExpire() && udiRelevanceResponse.getIsDateBy() == 1) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = MsDateUtil.parseDateExpire(expireDate); + long recentTieme = Math.abs(recent * 24 * 60 * 60 * 1000); + long resultTime = expireTime - System.currentTimeMillis(); + + if (resultTime > 0) { + long time = resultTime / (24 * 60 * 60 * 1000); + if (resultTime < recentTieme) { + return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + "天,是否确定继续添加?"); + } + } + } + } + + + //校验工位存量是否存在 + if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_OUT)) { + IoSplitFifoCodeEntity fifoCodeEntity = fifoCodeService.findByCode(code, null); + if (fifoCodeEntity != null && StrUtil.isNotEmpty(fifoCodeEntity.getSerialNo())) { + return ResultVOUtils.error(500, "当前追溯码已存在!"); + } + } + + + if (addOrderRequest.getFromCorp() == null || StrUtil.isNotEmpty(addOrderRequest.getSickerAdNum())) { + String fromCorp = ioAddInoutService.updateCorp(bussinessTypeEntity, addOrderRequest.getFromCorp(), addOrderRequest.getSickerAdNum()); + addOrderRequest.setFromCorp(fromCorp); + } + //先生成扫码单据 + IoOrderEntity orderEntity = orderService.findByBillNo(orderId); + String inBatch = ""; + if (StringUtils.isBlank(orderId) || orderEntity == null) { + String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd")); + orderId = orderNo; + } + + inBatch = orderId.substring((Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix())).length()); + List codeEnttitys = codeTempService.findByOrderId(orderId); + IoCodeTempEntity exitLocalEntity = null; + IoCodeTempEntity genDetaiEntity = new IoCodeTempEntity(); + List udiRelevanceResponses = null; + if (codeEnttitys.size() > 0) { + exitLocalEntity = isExitLocal(code, codeEnttitys); + if (exitLocalEntity != null) { + if (StrUtil.isEmpty(exitLocalEntity.getSupId()) || exitLocalEntity.getRelId() == null) { + return ResultVOUtils.error(500, "当前药品追溯码已存在,且存在异常未处理!"); + } + udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(exitLocalEntity.getNameCode(), null); + + BeanUtils.copyProperties(exitLocalEntity, genDetaiEntity); + genDetaiEntity.setCount(1); + + if (bussinessTypeEntity.isUse()) { + genDetaiEntity.setReCount(udiCalCountUtil.getUseActCount(udiRelevanceResponses.get(0))); + } else { + genDetaiEntity.setReCount(udiCalCountUtil.getCirActCount(udiRelevanceResponses.get(0))); + } + + exitLocalEntity.setCount(exitLocalEntity.getMyCount() + 1); + + if (bussinessTypeEntity.isUse()) { + exitLocalEntity.setReCount(exitLocalEntity.getMyReCount() * udiCalCountUtil.getUseActCount(udiRelevanceResponses.get(0))); + } else { + exitLocalEntity.setReCount(exitLocalEntity.getMyReCount() * udiCalCountUtil.getCirActCount(udiRelevanceResponses.get(0))); + } + + if (!StringUtils.isBlank(exitLocalEntity.getSerialNo())) { + return ResultVOUtils.error(500, "重复扫码!"); + } + codeTempService.updateById(exitLocalEntity); + } + } + if (exitLocalEntity == null) { + IoCodeTempEntity codeEnttity = new IoCodeTempEntity(); + codeEnttity.setCode(code); + codeEnttity.setOrderId(orderId); + codeEnttity.setCorpOrderId(addOrderRequest.getCorpOrderId()); + codeEnttity.setCreateTime(new Date()); + codeEnttity.setUpdateTime(new Date()); + codeEnttity.setMainAction(bussinessTypeEntity.getMainAction()); + codeEnttity.setAction(bussinessTypeEntity.getAction()); + codeEnttity.setNameCode(udiEntity.getUdi()); + codeEnttity.setBatchNo(udiEntity.getBatchNo()); + codeEnttity.setProduceDate(udiEntity.getProduceDate()); + codeEnttity.setExpireDate(udiEntity.getExpireDate()); + codeEnttity.setSerialNo(udiEntity.getSerialNo()); + codeEnttity.setDeptCode(invWarehouseEntity.getParentId()); + codeEnttity.setInvCode(addOrderRequest.getInvCode()); + codeEnttity.setWarehouseCode(addOrderRequest.getCurSpaceCode()); + codeEnttity.setPreSpaceCode(addOrderRequest.getPreCurSpaceCode()); + codeEnttity.setPreInSpaceCode(addOrderRequest.getCheckPreInSpaceCode()); + codeEnttity.setRelId(addOrderRequest.getRelId()); + codeEnttity.setFifoSplit(addOrderRequest.getFifoSplit()); + codeEnttity.setProductType(2); + codeEnttity.setCount(1); + String unitFk = null; + if (bussinessTypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) { + unitFk = addOrderRequest.getFromCorp(); + } else if (StrUtil.isNotEmpty(addOrderRequest.getSelectSupId())) { + unitFk = addOrderRequest.getSelectSupId(); + } + //产品是否禁用 + udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(codeEnttity.getNameCode(), false); + if (udiRelevanceResponses.size() >= 1) { + if (udiRelevanceResponse == null) { + return ResultVOUtils.error(500, "该产品信息未维护!"); + } else if (!udiRelevanceResponse.getUseDy() && udiRelevanceResponse.getDiType() == ConstantStatus.DITYPE_SYDY) { + return ResultVOUtils.error(500, "该产品不允许以使用单元入库!"); + } + +// if (bussinessTypeEntity.isVailDispatch() && !udiRelevanceResponse.isDispatch()) { +// return ResultVOUtils.error(500, "该产品不可配送,请联系院方!"); +// } +// +// if (bussinessTypeEntity.getVailGroupBuy() == 1 && !udiRelevanceResponse.isGroupBuy()) { //只采集集采产品 +// return ResultVOUtils.error(500, bussinessTypeEntity.getName() + "单只允许录入集采产品!"); +// } +// +// if (bussinessTypeEntity.getVailGroupBuy() == 2 && udiRelevanceResponse.isGroupBuy()) { //只采集非集采产品 +// return ResultVOUtils.error(500, bussinessTypeEntity.getName() + "单只允许录入非集采产品!"); +// } +// if (IntUtil.value(addOrderRequest.getFifoSplit()) == 2 && IntUtil.value(udiRelevanceResponse.getSplitEnable())) { +// return ResultVOUtils.error(500, "当前上货只允许录入整取产品!"); +// } +// if (IntUtil.value(addOrderRequest.getFifoSplit()) == 1 && !IntUtil.value(udiRelevanceResponse.getSplitEnable())) { +// return ResultVOUtils.error(500, "当前上货只允许录入拆零产品!"); +// } + //计算实际数量 + + if (bussinessTypeEntity.isUse()) { + codeEnttity.setReCount(codeEnttity.getMyReCount() + udiCalCountUtil.getUseActCount(udiRelevanceResponses.get(0))); + } else { + codeEnttity.setReCount(codeEnttity.getMyReCount() + udiCalCountUtil.getCirActCount(udiRelevanceResponses.get(0))); + } + } else if (udiRelevanceResponses.size() == 0) { + if (unitFk == null) + return ResultVOUtils.error(500, "耗材字典不存在此产品!"); + else + return ResultVOUtils.error(500, "当前供应商不存在此配送产品!"); + } + +// //校验供应商是否配送此产品 +// BaseResponse corpResponse = checkCorp(codeEnttity, bussinessTypeEntity, unitFk); +// if (corpResponse != null) { +// return corpResponse; +// } + + IoOrderEntity isExit = orderService.findByBillNo(orderId); + if (isExit == null) { + orderEntity = new IoOrderEntity(); + orderEntity.setBillNo(orderId); + orderEntity.setCorpOrderId(addOrderRequest.getCorpOrderId()); + orderEntity.setMainAction(bussinessTypeEntity.getMainAction()); + orderEntity.setAction(bussinessTypeEntity.getAction()); + orderEntity.setFromCorp(addOrderRequest.getFromCorp()); + if (StrUtil.isNotEmpty(addOrderRequest.getFromInvCode())) { + InvWarehouseEntity invWarehouseEntity1 = invWarehouseService.findByInvSubByCode(addOrderRequest.getFromInvCode()); + orderEntity.setFromDeptCode(invWarehouseEntity1.getParentId()); + } + orderEntity.setFromInvCode(addOrderRequest.getFromInvCode()); + orderEntity.setFromType(ConstantStatus.FROM_WEBNEW); + orderEntity.setStatus(ConstantStatus.ORDER_STATUS_TEMP_SAVE); + orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_DRAFT); + AuthAdmin authAdmin = getUser(); + orderEntity.setCreateUser(authAdmin.getId() + ""); + orderEntity.setCreateTime(new Date()); + orderEntity.setUpdateUser(authAdmin.getId() + ""); + orderEntity.setUpdateTime(new Date()); + orderEntity.setCustomerId(authAdmin.getCustomerId() + ""); + orderEntity.setDeptCode(invWarehouseEntity.getParentId()); + orderEntity.setCheckPreInOrders(addOrderRequest.getCheckPreInOrders()); + orderEntity.setInvCode(addOrderRequest.getInvCode()); + orderEntity.setOrderType(addOrderRequest.getOrderType()); + orderEntity.setBusType(bussinessTypeEntity.getBusType()); + orderEntity.setSickerAdNum(addOrderRequest.getSickerAdNum()); + orderEntity.setWorkPlaceCode(addOrderRequest.getWorkPlaceCode()); + orderEntity.setSplitBusType(addOrderRequest.getSplitBusType()); + orderEntity.setFifoSplit(addOrderRequest.getFifoSplit()); + orderEntity.setSplitBusType(addOrderRequest.getSplitBusType()); + orderEntity.setProductType(2); + orderService.insertOrder(orderEntity); + } + + if (IntUtil.value(addOrderRequest.getOrderType()) == ConstantStatus.ORDER_TYPE_NORMAL && bussinessTypeEntity.isCheckEnable() && bussinessTypeEntity.getCheckWebNew() != 0) { + + boolean isBillExit = orderDetailBizService.isExit(orderEntity.getBillNo()); + if (!isBillExit) { + orderService.deleteByBillNo(orderEntity.getBillNo()); + return ResultVOUtils.error(500, "请先录入业务详情"); + } + } + + + BaseResponse baseResponse = checkDrugRelId(codeEnttity, unitFk); + if (baseResponse != null) { + deleteEmptyBillNo(orderEntity); + } + genDetaiEntity = codeEnttity; +// if (baseResponse == null) { +// baseResponse = checkSupId(bussinessTypeEntity, codeEnttity, unitFk); +// if (baseResponse != null) +// return baseResponse; +// } else { +// if (baseResponse.getCode() == 501) { +// return baseResponse; +// } else if (baseResponse.getCode() == 502) { +// return baseResponse; +// } +// checkSupId(bussinessTypeEntity, codeEnttity, unitFk); +// return baseResponse; +// } + codeTempService.insert(codeEnttity); + } + addCodeResult.setOrderId(orderId); + transInoutService.genOrderDetailCode(orderEntity, genDetaiEntity); + return ResultVOUtils.success(addCodeResult); + } + + //校验条码完整性 + public BaseResponse checkOriginCode(UdiEntity udiEntity) { + //校验条码的完整性 + String errMsg = ""; + UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); + if (udiRelevanceResponse == null) { + return ResultVOUtils.error(501, "耗材字典不存在此产品!"); + } + if (StrUtil.isEmpty(udiEntity.getBatchNo()) && !udiRelevanceResponse.getAllowNoBatch()) { + errMsg = errMsg + ",批次号"; + } + if (StrUtil.isEmpty(udiEntity.getProduceDate()) && !udiRelevanceResponse.getAllowNoProduct()) { + errMsg = errMsg + ",生产日期"; + } + if (StrUtil.isEmpty(udiEntity.getExpireDate()) && !udiRelevanceResponse.getAllowNoExpire()) { + errMsg = errMsg + ",失效日期"; + } + if (StrUtil.isEmpty(udiEntity.getSerialNo()) && !IntUtil.value(udiRelevanceResponse.getAllowNoSerial())) { + errMsg = errMsg + ",序列号"; + } + if (StrUtil.isNotEmpty(errMsg)) { + BaseResponse baseResponse = ResultVOUtils.error(507, "产品三期缺失请补齐" + errMsg.substring(1) + ""); + baseResponse.setData(udiEntity); + return baseResponse; + } + return null; + } + + /** + * 判断本单是否存在 + * + * @param code + * @param codeEnttityList + * @return + */ + public IoCodeTempEntity isExitLocal(String code, List codeEnttityList) { + List codeTempEntities = isExitLocalList(code, codeEnttityList); + if (CollUtil.isNotEmpty(codeTempEntities)) { + return codeTempEntities.get(0); + } + return null; + } + + public BaseResponse checkDrugRelId(IoCodeTempEntity codeEnttity, String unitFk) { + + List udiRelevanceEntities = udiRelevanceService.selectDrugsByNameCode(codeEnttity, unitFk); + if (udiRelevanceEntities != null && udiRelevanceEntities.size() > 1 && codeEnttity.getRelId() == null) {//同一个DI绑定多个产品西信息 +// codeEnttity.setRelId(null); +// codeEnttity.setStatus(ConstantStatus.ORDER_DETAIL_DI_MUTI); +// codeTempService.insert(codeEnttity); +// codeEnttity = codeTempService.findByUnique(codeEnttity.getOrderId(), codeEnttity.getCode()); + BaseResponse baseResponse = ResultVOUtils.error(502, "DI绑定多个产品ID,请指定对应产品"); + baseResponse.setData(codeEnttity); + return baseResponse; + } else if (udiRelevanceEntities == null || udiRelevanceEntities.size() == 0) {//未找到产品信息,一般不会出现 + codeEnttity.setRelId(null); + codeEnttity.setStatus(2); + return ResultVOUtils.error(501, "耗材字典不存在此产品!"); + } else { + codeEnttity.setStatus(0); + if (codeEnttity.getRelId() == null) + codeEnttity.setRelId(udiRelevanceEntities.get(0).getId()); + } + + return null; + } + + public List isExitLocalList(String code, List codeEnttityList) { + UdiEntity udiEntity = FilterUdiUtils.getUdi(code); + List codeTempEntities = codeEnttityList.stream() + .filter(item -> { + if (item.getCode().equals(code)) { + if (StrUtil.emptyIfNull(item.getSerialNo()).equals(StrUtil.emptyIfNull(udiEntity.getSerialNo()))) { + return true; + } + if (!StrUtil.emptyIfNull(item.getNameCode()).equals(StrUtil.emptyIfNull(udiEntity.getUdi()))) { + return false; + } + if (!StrUtil.emptyIfNull(item.getBatchNo()).toUpperCase(Locale.ROOT).equals(StrUtil.emptyIfNull(udiEntity.getBatchNo()).toUpperCase(Locale.ROOT))) { + return false; + } + if (!StrUtil.emptyIfNull(item.getProduceDate()).equals(StrUtil.emptyIfNull(udiEntity.getProduceDate()))) { + return false; + } + if (!StrUtil.emptyIfNull(item.getExpireDate()).equals(StrUtil.emptyIfNull(udiEntity.getExpireDate()))) { + return false; + } + if (!StrUtil.emptyIfNull(item.getSerialNo()).equals(StrUtil.emptyIfNull(udiEntity.getSerialNo()))) { + return false; + } + return true; + } + return false; + }).sorted(Comparator.comparing(IoCodeTempEntity::getInBatchNo)).collect(Collectors.toList()); + Collections.reverse(codeTempEntities); + return codeTempEntities; + } + + public void deleteEmptyBillNo(IoOrderEntity orderEntity) { + boolean r1 = orderDetailBizService.isExit(orderEntity.getBillNo()); + boolean r2 = ioOrderDetailCodeService.isExit(orderEntity.getBillNo()); + boolean r3 = codeTempService.isExit(orderEntity.getBillNo()); + if (!r1 && !r2 && !r3) { + orderService.deleteByBillNo(orderEntity.getBillNo()); + } + } + +} diff --git a/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java b/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java index 4b8cebf9f..485ea208e 100644 --- a/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java +++ b/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java @@ -52,5 +52,7 @@ public class AddTagCodeReqeust { */ private String busType; + private String shipper; + }