diff --git a/src/main/java/com/glxp/api/constant/BusTypeConstant.java b/src/main/java/com/glxp/api/constant/BusTypeConstant.java new file mode 100644 index 000000000..a45e0f1e9 --- /dev/null +++ b/src/main/java/com/glxp/api/constant/BusTypeConstant.java @@ -0,0 +1,33 @@ +package com.glxp.api.constant; + +public enum BusTypeConstant { + YPCF002("药品处方单","YPCF002"), + CGJH001("采购计划","CGJH001"), + LYRK("领药入库","LYRK"), + GMRK("购买入库","GMRK"), + LYCK("领药出库","LYCK"), + ; + + private String name; + private String busType; + BusTypeConstant(String name, String busType) { + this.name = name; + this.busType = busType; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getBusType() { + return busType; + } + + public void setBusType(String busType) { + this.busType = busType; + } +} diff --git a/src/main/java/com/glxp/api/constant/ConstantType.java b/src/main/java/com/glxp/api/constant/ConstantType.java index cc53b64c8..abfb05ee2 100644 --- a/src/main/java/com/glxp/api/constant/ConstantType.java +++ b/src/main/java/com/glxp/api/constant/ConstantType.java @@ -10,4 +10,7 @@ public interface ConstantType { String SPLIT_RETURN = "SC72249388338364"; //拆零退货 String SPLIT_OUT = "SC72197936495755"; //拆零出库 + + String SPLIT_CORP = "72198012799726"; + } diff --git a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java index 99f9ad48b..673272fa5 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java @@ -1,5 +1,6 @@ package com.glxp.api.controller.collect; +import cn.hutool.core.collection.CollUtil; import com.github.pagehelper.PageInfo; import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.res.BaseResponse; @@ -11,6 +12,8 @@ import com.glxp.api.req.inout.AddTagCodeReqeust; import com.glxp.api.req.inout.DeleteTageCodeRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.collect.CollectOrderCodeManResponse; +import com.glxp.api.res.inout.VailCodeResultResponse; +import com.glxp.api.res.inout.VailTagResultResponse; import com.glxp.api.service.auth.SysWorkplaceService; import com.glxp.api.service.basic.UdiRelevanceService; import com.glxp.api.service.collect.IoCollectOrderBizService; @@ -18,6 +21,7 @@ import com.glxp.api.service.collect.IoCollectOrderCodeManService; import com.glxp.api.service.collect.IoCollectOrderService; import com.glxp.api.util.GennerOrderUtils; import lombok.extern.slf4j.Slf4j; +import org.json.JSONException; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -26,6 +30,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.ArrayList; import java.util.List; @Slf4j @@ -37,15 +42,6 @@ public class IoCollectOrderCodeManController extends BaseController { IoCollectOrderService collectOrderService; @Resource IoCollectOrderCodeManService collectOrderCodeManService; - @Resource - IoCollectOrderBizService collectOrderBizService; - - @Resource - UdiRelevanceService udiRelevanceService; - @Resource - GennerOrderUtils gennerOrderUtils; - @Resource - SysWorkplaceService sysWorkPlaceService; /** * 器械拆零处方赋码明细 @@ -82,6 +78,38 @@ public class IoCollectOrderCodeManController extends BaseController { return ResultVOUtils.success(collectOrder); } + /** + * 器械拆零处方赋码(批量赋码) + * + * @return + */ + @PostMapping("/udiwms/ioSplit/collect/order/batchAddCode") + public BaseResponse batchAddCode(@RequestBody @Valid AddTagCodeReqeust addTagCodeReqeust, + BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + IoCollectOrder collectOrder = null; + VailTagResultResponse vailTagResultResponse = new VailTagResultResponse(); + List vailCodeResultResponses = new ArrayList<>(); + if (CollUtil.isNotEmpty(addTagCodeReqeust.getCodeList())) { + for (String code : addTagCodeReqeust.getCodeList()) { + VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); + addTagCodeReqeust.setCode(code); + vailCodeResultResponse.setCode(code); + try { + collectOrder = collectOrderCodeManService.prescribeTagCode(addTagCodeReqeust); + } catch (JSONException e) { + vailCodeResultResponse.setErrMsg(e.getMessage()); + vailCodeResultResponse.setStatus(2); + } + } + } + vailTagResultResponse.setCollectOrder(collectOrder); + vailTagResultResponse.setVailCodeResultResponses(vailCodeResultResponses); + return ResultVOUtils.success(vailCodeResultResponses); + } + @PostMapping("/udiwms/ioSplit/collect/code/remove") public BaseResponse removeCode(@RequestBody @Valid DeleteTageCodeRequest deleteTageCodeRequest, diff --git a/src/main/java/com/glxp/api/controller/collect/IoCollectOriginController.java b/src/main/java/com/glxp/api/controller/collect/IoCollectOriginController.java index 2b94e7256..98ca7fa19 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOriginController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOriginController.java @@ -30,6 +30,7 @@ public class IoCollectOriginController { /** * 异常处理 + * * @param collectOrderRequest * @return */ diff --git a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java index dc07e2d68..a4b9a81b5 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -8,6 +8,7 @@ import com.glxp.api.entity.inv.InvProductDetailEntity; import com.glxp.api.exception.JsonException; import com.glxp.api.req.collect.CollectOrderRequest; import com.glxp.api.res.inout.IoOrderDetailCodeResponse; +import com.glxp.api.res.inout.VailCodeResultResponse; import com.glxp.api.service.collect.IoCollectOrderService; import com.glxp.api.service.collect.IoCollectOriginService; import com.glxp.api.service.inout.impl.IoCodeService; @@ -44,6 +45,7 @@ import com.glxp.api.util.*; import com.glxp.api.util.udi.FilterUdiUtils; import com.glxp.api.util.udi.UdiCalCountUtil; import org.apache.commons.lang3.StringUtils; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; @@ -91,8 +93,6 @@ public class IoCodeTempController extends BaseController { @Resource IoCodeService codeService; @Resource - InvPreProductDetailService invPreProductDetailService; - @Resource IoAddInoutService ioAddInoutService; @Resource IoOrderDetailCodeService ioOrderDetailCodeService; @@ -225,9 +225,9 @@ public class IoCodeTempController extends BaseController { UdiEntity udiEntity = FilterUdiUtils.getUdi(code); if (udiEntity == null) { String viewType = addEnterCodeRequest.getViewType(); - if (viewType.equals("tagCode")){ + if (viewType.equals("tagCode")) { IoCollectOrder collectOrder = collectOrderService.getByBillNo(code); - if (collectOrder == null ){ + if (collectOrder == null) { //=============================================// //本地数据库 无此单据时 触发 用billNo 到 处方下载方法 进行下载 CollectOrderRequest collectOrderRequest = new CollectOrderRequest(); @@ -235,23 +235,23 @@ public class IoCodeTempController extends BaseController { collectOrderRequest.setWorkPlaceCode(collectOrderRequest.getWorkPlaceCode()); collectOrderRequest.setBillNo(code); BaseResponse baseResponse = collectOriginService.downloadOrderV2(collectOrderRequest); - if (ResultEnum.SUCCESS.getCode() == baseResponse.getCode()){ + if (ResultEnum.SUCCESS.getCode() == baseResponse.getCode()) { collectOrder = collectOrderService.getByBillNo(code); //=============================================// BaseResponse response = ResultVOUtils.error(601, code); response.setData(collectOrder); return response; - }else { + } else { BaseResponse response = ResultVOUtils.error(501, "UDI码格式错误"); response.setData(originCode); return response; } - }else { + } else { BaseResponse response = ResultVOUtils.error(601, code); response.setData(collectOrder); return response; } - } else{ + } else { String sptmtodi = systemParamConfigService.selectValueByParamKey(Constant.SPTM_TO_DI); if (sptmtodi.equals("1")) { if (code.length() == 13) { @@ -282,7 +282,7 @@ public class IoCodeTempController extends BaseController { UdiRelevanceResponse checkUdi = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); if (checkUdi == null) { - return ResultVOUtils.error(500, "耗材字典不存在此产品!"); + return ResultVOUtils.error(500, "产品字典不存在此产品!"); } boolean checkSuccess = true; String lostMsg = ""; @@ -338,6 +338,110 @@ public class IoCodeTempController extends BaseController { } + @AuthRuleAnnotation("") + @PostMapping("warehouse/inout/batchVailCode") + public BaseResponse batchVailCode(@RequestBody AddEnterCodeRequest addEnterCodeRequest) { + List codeList = addEnterCodeRequest.getCodeList(); + if (CollUtil.isEmpty(codeList)) + return ResultVOUtils.error(500, "追溯码不能为空"); + codeList = codeList.stream().distinct().collect(Collectors.toList()); + List vailCodeResultResponses = new ArrayList<>(); + for (String code : codeList) { + VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); + UdiEntity udiEntity = FilterUdiUtils.getUdi(code); + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(1); + vailCodeResultResponse.setErrMsg("解析正确"); + vailCodeResultResponses.add(vailCodeResultResponse); + if (udiEntity == null) { + vailCodeResultResponse.setStatus(2); + vailCodeResultResponse.setErrMsg("追溯码格式错误"); + continue; + } + UdiRelevanceResponse checkUdi = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); + if (checkUdi == null) { + vailCodeResultResponse.setStatus(2); + vailCodeResultResponse.setErrMsg("产品字典不存在此产品"); + continue; + } + } + return ResultVOUtils.success(vailCodeResultResponses); + } + + + @RepeatSubmit() + @AuthRuleAnnotation("") + @PostMapping("warehouse/inout/batchAddCode") + @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) { + AddOrderRequest addOrderRequest = new AddOrderRequest(); + BeanUtils.copyProperties(addOrderCodeRequest, addOrderRequest); + 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()); + } + + 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; + if (IntUtil.value(udiEntity.getProductType()) == 2) { + baseResponse = adddGrugOrder(addOrderRequest, udiEntity, code); + } else { + baseResponse = addMaterOrder(addOrderRequest, udiEntity, code); + } + VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); + if (baseResponse.getCode() == 20000) { + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(1); + vailCodeResultResponse.setErrMsg("正确"); + AddCodeResult temp = (AddCodeResult) baseResponse.getData(); + addCodeResult.setOrderId(temp.getOrderId()); + } else { + vailCodeResultResponse.setCode(code); + vailCodeResultResponse.setStatus(2); + vailCodeResultResponse.setErrMsg(baseResponse.getMessage()); + } + vailCodeResultResponses.add(vailCodeResultResponse); + } + addCodeResult.setVailCodeResultResponses(vailCodeResultResponses); + return ResultVOUtils.success(); + } + + public String checkNewCode(UdiEntity originEnity, String newCode) { UdiEntity newEntity = FilterUdiUtils.getUdi(originEnity.getUdi() + newCode); if (newEntity == null || originEnity == null) { @@ -396,10 +500,9 @@ public class IoCodeTempController extends BaseController { } else { return addMaterOrder(addOrderRequest, udiEntity, code); } - } - + @Transactional(rollbackFor = Exception.class) public BaseResponse addMaterOrder(AddOrderRequest addOrderRequest, UdiEntity udiEntity, String code) { AddCodeResult addCodeResult = new AddCodeResult(); @@ -981,12 +1084,12 @@ public class IoCodeTempController extends BaseController { 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()); diff --git a/src/main/java/com/glxp/api/http/ErpBasicClient.java b/src/main/java/com/glxp/api/http/ErpBasicClient.java index a69a2d046..be4a3b21a 100644 --- a/src/main/java/com/glxp/api/http/ErpBasicClient.java +++ b/src/main/java/com/glxp/api/http/ErpBasicClient.java @@ -12,6 +12,7 @@ import com.glxp.api.entity.basic.BasicSkProjectEntity; import com.glxp.api.entity.basic.BasicSkSickerEntity; import com.glxp.api.entity.collect.IoCollectOrder; import com.glxp.api.entity.thrsys.ThrManufacturerEntity; +import com.glxp.api.entity.thrsys.ThrOrderEntity; import com.glxp.api.entity.thrsys.ThrSystemBusApiEntity; import com.glxp.api.entity.thrsys.ThrSystemEntity; import com.glxp.api.exception.JsonException; @@ -32,6 +33,7 @@ import com.glxp.api.res.basic.BasicSkSickerResponse; import com.glxp.api.res.chs.YbHcflEntityResponse; import com.glxp.api.res.collect.IoCollectOrderResponse; import com.glxp.api.res.thrsys.ThrCorpsResponse; +import com.glxp.api.res.thrsys.ThrOrderResponse; import com.glxp.api.res.thrsys.ThrProductsResponse; import com.glxp.api.res.thrsys.UdiwmsWarehouseDetail; import com.glxp.api.service.thrsys.ThrSystemService; @@ -233,6 +235,28 @@ public class ErpBasicClient { } + /** + * 获取三方单据信息 + * @param filterThrOrderRequest + * @return + */ + public BaseResponse> getThrOrders(FilterThrOrderRequest filterThrOrderRequest) { + ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectByThirdId(filterThrOrderRequest.getThirdSys()); + String url = basicThirdSysEntity.getThridUrl() + "/udiwms/erp/getThrOrders"; + try { + String response = httpOkClient.uCloudPost(url, filterThrOrderRequest); + BaseResponse> listBaseResponse = + JSONObject.parseObject(response, new TypeReference>>() { + }); + + return listBaseResponse; + } catch (Exception e) { + log.error("获取三方单据信息", e); + return ResultVOUtils.error(500, "连接第三方系统接口服务出错"); + } + } + + /** * 获取医保单据 * diff --git a/src/main/java/com/glxp/api/req/inout/AddEnterCodeRequest.java b/src/main/java/com/glxp/api/req/inout/AddEnterCodeRequest.java index db6a5a7e1..6068851d5 100644 --- a/src/main/java/com/glxp/api/req/inout/AddEnterCodeRequest.java +++ b/src/main/java/com/glxp/api/req/inout/AddEnterCodeRequest.java @@ -2,10 +2,14 @@ package com.glxp.api.req.inout; import lombok.Data; +import java.util.List; + @Data public class AddEnterCodeRequest { private String originCode; private String workPlaceCode; + private String busType; private String code; + private List codeList; private String viewType; } diff --git a/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java b/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java new file mode 100644 index 000000000..716e276eb --- /dev/null +++ b/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java @@ -0,0 +1,47 @@ +package com.glxp.api.req.inout; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class AddOrderCodeRequest { + + /** + * 工位 + */ + @NotNull(message = "工位编码不能为空") + private Long workPlaceCode; + /** + * 业务类型 + */ + @NotNull(message = "业务类型不能为空") + private String splitBusType; + /** + * 本地订单号 + */ + @NotNull(message = "本地单号不能为空") + private String corpOrderId; + /** + * 追溯码 + */ + private String code; + /** + * 追溯码列表 + */ + @NotNull(message = "溯码不能为空") + private List codeList; + /** + * 1:上货;2:退货 + */ + @NotNull(message = "上货方式不能为空") + private Integer inoutType; + + + /** + * 单据号 + */ + private String billNo; + +} 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 b479396d2..4b8cebf9f 100644 --- a/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java +++ b/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java @@ -3,6 +3,7 @@ package com.glxp.api.req.inout; import lombok.Data; import javax.validation.constraints.NotNull; +import java.util.List; @Data public class AddTagCodeReqeust { @@ -15,16 +16,40 @@ public class AddTagCodeReqeust { /** * udi码/药品追溯码 */ - @NotNull(message = "追溯码不能为空") private String code; + /** + * 扫码列表 + */ + private List codeList; + /** + * 单据号 + */ private String billNo; + /** + * 工位编码 + */ private Long workPlaceCode; + /** + * 往来单位 + */ private String fromCorp; + /** + * 往来单位名称 + */ + private String fromCorpName; + /** + * 仓库号码 + */ private String invCode; + /** + * 是否确认插入 + */ private Boolean insert; - + /** + * 业务类型 + */ private String busType; diff --git a/src/main/java/com/glxp/api/req/thrsys/FilterThrOrderRequest.java b/src/main/java/com/glxp/api/req/thrsys/FilterThrOrderRequest.java index dc51f5d07..b76faf883 100644 --- a/src/main/java/com/glxp/api/req/thrsys/FilterThrOrderRequest.java +++ b/src/main/java/com/glxp/api/req/thrsys/FilterThrOrderRequest.java @@ -33,5 +33,14 @@ public class FilterThrOrderRequest extends ListPageRequest { private String thirdAction; private String thirdOrderFk; private Integer allocateStatus; + /** + * 工位编码 + */ + private Long workPlaceCode; + /** + * 来源业务 + */ + private String fromType; + private String busType; private List erpOrderResponses; } diff --git a/src/main/java/com/glxp/api/res/inout/AddCodeResult.java b/src/main/java/com/glxp/api/res/inout/AddCodeResult.java index 1cec863cb..69fd32ef6 100644 --- a/src/main/java/com/glxp/api/res/inout/AddCodeResult.java +++ b/src/main/java/com/glxp/api/res/inout/AddCodeResult.java @@ -2,8 +2,11 @@ package com.glxp.api.res.inout; import lombok.Data; +import java.util.List; + @Data public class AddCodeResult { private String orderId; private String errMsg; + List vailCodeResultResponses; } diff --git a/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java b/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java new file mode 100644 index 000000000..11d17fcce --- /dev/null +++ b/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java @@ -0,0 +1,14 @@ +package com.glxp.api.res.inout; + +import lombok.Data; + +@Data +public class VailCodeResultResponse { + + private String code; + /** + * 1:正常;2:异常 + */ + private Integer status; + private String errMsg; +} diff --git a/src/main/java/com/glxp/api/res/inout/VailTagResultResponse.java b/src/main/java/com/glxp/api/res/inout/VailTagResultResponse.java new file mode 100644 index 000000000..322e1f845 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inout/VailTagResultResponse.java @@ -0,0 +1,13 @@ +package com.glxp.api.res.inout; + +import com.glxp.api.entity.collect.IoCollectOrder; +import lombok.Data; + +import java.util.List; + +@Data +public class VailTagResultResponse { + IoCollectOrder collectOrder; + private List vailCodeResultResponses; + +} diff --git a/src/main/java/com/glxp/api/res/thrsys/ThrOrderResponse.java b/src/main/java/com/glxp/api/res/thrsys/ThrOrderResponse.java index ca4195a68..8d0a582ae 100644 --- a/src/main/java/com/glxp/api/res/thrsys/ThrOrderResponse.java +++ b/src/main/java/com/glxp/api/res/thrsys/ThrOrderResponse.java @@ -1,6 +1,7 @@ package com.glxp.api.res.thrsys; import com.baomidou.mybatisplus.annotation.TableField; +import com.glxp.api.entity.thrsys.ThrOrderDetailEntity; import lombok.Data; import java.math.BigDecimal; @@ -20,7 +21,7 @@ public class ThrOrderResponse { private String fromInvCode; //往来仓库 private String thirdSysFk; - + private List detailList; private List subErpOrders; //增加字段 diff --git a/src/main/java/com/glxp/api/service/collect/DownloadFactory.java b/src/main/java/com/glxp/api/service/collect/DownloadFactory.java new file mode 100644 index 000000000..6f7934ed0 --- /dev/null +++ b/src/main/java/com/glxp/api/service/collect/DownloadFactory.java @@ -0,0 +1,49 @@ +package com.glxp.api.service.collect; + +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.constant.BusTypeConstant; +import com.glxp.api.req.collect.CollectOrderRequest; +import com.glxp.api.service.collect.down.*; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 下载工厂 + */ +@Component +public class DownloadFactory { + + @Resource + private YPCF002Download ypcf002Download; + + @Resource + private ThrOrderDownload thrOrderDownload; + + /** + * 第三方单据类型 + * + * @param collectOrderRequest + * @return + */ + public BaseResponse downloadOrder(CollectOrderRequest collectOrderRequest) { + String busType = collectOrderRequest.getBusType(); + if (busType == null) { + return ResultVOUtils.error("下载失败,未配置业务类型"); + } + if (busType.equals(BusTypeConstant.YPCF002.getBusType())) { + return ypcf002Download.downloadOrder(collectOrderRequest); + } else if (busType.equals(BusTypeConstant.CGJH001.getBusType())) { + return thrOrderDownload.downloadOrder(collectOrderRequest); + } else if (busType.equals(BusTypeConstant.LYRK.getBusType())) { + return thrOrderDownload.downloadOrder(collectOrderRequest); + } else if (busType.equals(BusTypeConstant.GMRK.getBusType())) { + return thrOrderDownload.downloadOrder(collectOrderRequest); + } else if (busType.equals(BusTypeConstant.LYCK.getBusType())) { + return thrOrderDownload.downloadOrder(collectOrderRequest); + } + return ResultVOUtils.error("下载失败,未配置业务类型"); + } + +} diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java index e058cb146..ee862f409 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java @@ -141,6 +141,7 @@ public class IoCollectOrderCodeManService extends ServiceImpl ioCollectOrderList,String addr) { + public void importPrescribe(List ioCollectOrderList, String addr) { //下载处方 - if (CollUtil.isNotEmpty(ioCollectOrderList)){ + if (CollUtil.isNotEmpty(ioCollectOrderList)) { for (IoCollectOrder collectOrder : ioCollectOrderList) { if (collectOrderMapper.exists(new LambdaQueryWrapper().eq(IoCollectOrder::getBillNo, collectOrder.getBillNo()))) { continue; } SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(addr); - if (sysWorkplaceDocumentEntity == null){ + if (sysWorkplaceDocumentEntity == null) { continue; } - if(collectOrder.getWorkPlaceCode() == null){ + if (collectOrder.getWorkPlaceCode() == null) { //自动分配工位 final Long[] defaultWorkplace = {null}; List sysWorkplaces = sysWorkplaceService.getAllByBusType(addr); @@ -499,16 +498,15 @@ public class IoCollectOrderService extends ServiceImpl bizList = collectOrder.getBizList(); - if (CollUtil.isNotEmpty(bizList)){ - for(IoCollectOrderBiz collectOrderBiz : bizList){ - if(collectOrderBiz.getRelId() != null){ + if (CollUtil.isNotEmpty(bizList)) { + for (IoCollectOrderBiz collectOrderBiz : bizList) { + if (collectOrderBiz.getRelId() != null) { UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByRelId(collectOrderBiz.getRelId() + ""); if (udiRelevanceResponse != null) { collectOrderBiz.setYbbm(udiRelevanceResponse.getYbbm()); collectOrderBiz.setPayFeeCode(udiRelevanceResponse.getPayFeeCode()); collectOrderBiz.setNameCode(udiRelevanceResponse.getNameCode()); if (IntUtil.value(udiRelevanceResponse.getProductsType()) == 2) { - collectOrderBiz.setGgxh(udiRelevanceResponse.getBzgg()); collectOrderBiz.setMeasureUnit(udiRelevanceResponse.getPrepnUnit()); } } @@ -688,6 +686,9 @@ public class IoCollectOrderService extends ServiceImpl> baseResponse = erpBasicClient.getPrescribeV2(getSickPrescribeRequest); - if (baseResponse.getCode() == 20000) { - List list = baseResponse.getData().getList(); - collectOrderService.importPrescribe(list,collectOrderRequest.getBusType()); - return ResultVOUtils.success("下载成功"); - } - } - return ResultVOUtils.error("下载失败"); + //条件 + return downloadFactory.downloadOrder(collectOrderRequest); } diff --git a/src/main/java/com/glxp/api/service/collect/down/IDownload.java b/src/main/java/com/glxp/api/service/collect/down/IDownload.java new file mode 100644 index 000000000..0015890f6 --- /dev/null +++ b/src/main/java/com/glxp/api/service/collect/down/IDownload.java @@ -0,0 +1,12 @@ +package com.glxp.api.service.collect.down; + +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.req.collect.CollectOrderRequest; + +/** + * 下载接口 + */ +public interface IDownload { + BaseResponse downloadOrder(CollectOrderRequest collectOrderRequest); + +} diff --git a/src/main/java/com/glxp/api/service/collect/down/ThrOrderDownload.java b/src/main/java/com/glxp/api/service/collect/down/ThrOrderDownload.java new file mode 100644 index 000000000..2ec727114 --- /dev/null +++ b/src/main/java/com/glxp/api/service/collect/down/ThrOrderDownload.java @@ -0,0 +1,149 @@ +package com.glxp.api.service.collect.down; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.dao.thrsys.ThrOrderDao; +import com.glxp.api.dao.thrsys.ThrOrderDetailDao; +import com.glxp.api.entity.collect.IoCollectOrder; +import com.glxp.api.entity.collect.IoCollectOrderBiz; +import com.glxp.api.entity.thrsys.ThrOrderDetailEntity; +import com.glxp.api.entity.thrsys.ThrOrderEntity; +import com.glxp.api.http.ErpBasicClient; +import com.glxp.api.req.collect.CollectOrderRequest; +import com.glxp.api.req.thrsys.FilterThrOrderRequest; +import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.res.thrsys.ThrOrderResponse; +import com.glxp.api.service.collect.IoCollectOrderService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + * 采购计划 CGJH001 + * 出入信息 LYRK GMRK LYCK + */ +@Service +public class ThrOrderDownload implements IDownload { + @Resource + private ErpBasicClient erpBasicClient; + @Resource + private IoCollectOrderService collectOrderService; + @Resource + private ThrOrderDao thrOrderDao; + @Resource + private ThrOrderDetailDao thrOrderDetailDao; + + @Override + public BaseResponse downloadOrder(CollectOrderRequest collectOrderRequest) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(StrUtil.isNotBlank(collectOrderRequest.getBillNo()), ThrOrderEntity::getBillNo, collectOrderRequest.getBillNo()); + List thrOrderEntities = thrOrderDao.selectList(w); + if (CollUtil.isNotEmpty(thrOrderEntities)) { + return this.importThrOrder(thrOrderEntities, collectOrderRequest); + } else { + //三方拉取 + FilterThrOrderRequest filterThrOrderRequest = new FilterThrOrderRequest(); + filterThrOrderRequest.setPage(1); + filterThrOrderRequest.setLimit(100); + filterThrOrderRequest.setBillNo(collectOrderRequest.getBillNo()); + filterThrOrderRequest.setThirdSys("thirdId"); + filterThrOrderRequest.setBusType(collectOrderRequest.getBusType()); + filterThrOrderRequest.setWorkPlaceCode(collectOrderRequest.getWorkPlaceCode()); + filterThrOrderRequest.setFromType(collectOrderRequest.getFromType()); + BaseResponse> baseResponse = erpBasicClient.getThrOrders(filterThrOrderRequest); + if (baseResponse.getCode() == 20000) { + List list = baseResponse.getData().getList(); + if (CollUtil.isNotEmpty(list)) { + list.forEach(item -> { + ThrOrderEntity thrOrderEntity = new ThrOrderEntity(); + BeanUtil.copyProperties(item, thrOrderEntity); + thrOrderEntity.setCreateTime(new Date()); + thrOrderEntity.setUpdateTime(new Date()); + List detailList = item.getDetailList(); + if (CollUtil.isNotEmpty(detailList)) { + thrOrderDetailDao.delete(new LambdaQueryWrapper().eq(ThrOrderDetailEntity::getOrderIdFk, item.getBillNo())); + for (ThrOrderDetailEntity detail : detailList) { + detail.setCreateTime(thrOrderEntity.getCreateTime()); + detail.setUpdateTime(thrOrderEntity.getUpdateTime()); + thrOrderDetailDao.insert(detail); + } + } + thrOrderDao.insertOrUpdate(thrOrderEntity); + }); + //再次获取 + thrOrderEntities = thrOrderDao.selectList(w); + return this.importThrOrder(thrOrderEntities, collectOrderRequest); + } + } + } + return ResultVOUtils.error("下载失败"); + } + + + /** + * 下载至单据 + * + * @param thrOrderEntities + * @param collectOrderRequest + */ + private BaseResponse importThrOrder(List thrOrderEntities, CollectOrderRequest collectOrderRequest) { + List ioCollectOrderList = new ArrayList<>(); + if (CollUtil.isNotEmpty(thrOrderEntities)) { + for (ThrOrderEntity thrOrder : thrOrderEntities) { + IoCollectOrder ioCollectOrder = new IoCollectOrder(); + StringBuilder errorMsg = new StringBuilder(); + ioCollectOrder.setBillNo(thrOrder.getBillNo()); + ioCollectOrder.setFromType("HIS系统"); + ioCollectOrder.setFromCorp(null); + ioCollectOrder.setWorkPlaceCode(collectOrderRequest.getWorkPlaceCode()); + ioCollectOrder.setFromCorpName(""); + ioCollectOrder.setBillTime(DateUtil.parseTime(thrOrder.getBilldate())); + ioCollectOrder.setCreateTime(new Date()); + ioCollectOrder.setCreateUser(collectOrderRequest.getCreateUser()); + ioCollectOrder.setBackupOrderRemark1(null); + ioCollectOrder.setUpdateTime(new Date()); + ioCollectOrder.setSplitStatus(0); + ioCollectOrder.setTagStatus(0); + List thrOrderDetailEntities = thrOrderDetailDao.selectList(new LambdaQueryWrapper().eq(ThrOrderDetailEntity::getOrderIdFk, thrOrder.getBillNo())); + List bizList = new ArrayList<>(); + for (ThrOrderDetailEntity entity : thrOrderDetailEntities) { + IoCollectOrderBiz collectOrderBiz = new IoCollectOrderBiz(); +// BasicUdirelEntity basicUdirelEntity = basicUdirelDao.selectOne(new LambdaQueryWrapper().eq(BasicUdirelEntity::getMainId, entity.getPHYSIC_CODE())); +// if (basicUdirelEntity != null) { +// collectOrderBiz.setRelId(basicUdirelEntity.getId()); +// } else { +// errorMsg.append(entity.getPHYSIC_NAME()).append("字典未对照").append(";"); +// } + collectOrderBiz.setThrCode(null); + collectOrderBiz.setCpmctymc(null); + collectOrderBiz.setGgxh(null); + collectOrderBiz.setBatchNo(entity.getBatchNo()); + collectOrderBiz.setOrderIdFk(ioCollectOrder.getBillNo()); + collectOrderBiz.setCount(entity.getCount()); + collectOrderBiz.setMeasureUnit(null); + collectOrderBiz.setTagStatus(1); + collectOrderBiz.setUnTagCount(0); + bizList.add(collectOrderBiz); + } + if (StrUtil.isNotBlank(errorMsg)) { + ioCollectOrder.setErrorMsg(errorMsg.toString()); + ioCollectOrder.setTagStatus(4); + } + ioCollectOrder.setBizList(bizList); + ioCollectOrderList.add(ioCollectOrder); + } + collectOrderService.importPrescribe(ioCollectOrderList, collectOrderRequest.getBusType()); + return ResultVOUtils.success("下载成功"); + } + return ResultVOUtils.error("下载失败"); + } +} diff --git a/src/main/java/com/glxp/api/service/collect/down/YPCF002Download.java b/src/main/java/com/glxp/api/service/collect/down/YPCF002Download.java new file mode 100644 index 000000000..3b5a078fb --- /dev/null +++ b/src/main/java/com/glxp/api/service/collect/down/YPCF002Download.java @@ -0,0 +1,40 @@ +package com.glxp.api.service.collect.down; + +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.entity.collect.IoCollectOrder; +import com.glxp.api.http.ErpBasicClient; +import com.glxp.api.req.basic.GetSickPrescribeRequest; +import com.glxp.api.req.collect.CollectOrderRequest; +import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.service.collect.IoCollectOrderService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class YPCF002Download implements IDownload{ + @Resource + private ErpBasicClient erpBasicClient; + @Resource + private IoCollectOrderService collectOrderService; + + @Override + public BaseResponse downloadOrder(CollectOrderRequest collectOrderRequest) { + GetSickPrescribeRequest getSickPrescribeRequest = new GetSickPrescribeRequest(); + getSickPrescribeRequest.setPage(1); + getSickPrescribeRequest.setLimit(100); + getSickPrescribeRequest.setCode(collectOrderRequest.getBillNo()); + getSickPrescribeRequest.setThirdSys("thirdId"); + getSickPrescribeRequest.setWorkPlaceCode(collectOrderRequest.getWorkPlaceCode()); + getSickPrescribeRequest.setFromType(collectOrderRequest.getFromType()); + BaseResponse> baseResponse = erpBasicClient.getPrescribeV2(getSickPrescribeRequest); + if (baseResponse.getCode() == 20000) { + List list = baseResponse.getData().getList(); + collectOrderService.importPrescribe(list,collectOrderRequest.getBusType()); + return ResultVOUtils.success("下载成功"); + } + return ResultVOUtils.error("下载失败"); + } +} diff --git a/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java b/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java index eefb8743d..46bfe88d7 100644 --- a/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java +++ b/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java @@ -587,10 +587,11 @@ public class IoSplitCodeService extends ServiceImpl 0 ? lockCount : 0); + splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount())); + splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getLockCount()) - IntUtil.value(splitFifoInv.getOutCount())); splitFifoInvService.updateById(splitFifoInv); } if (count >= needCount) { diff --git a/src/main/resources/mybatis/mapper/collect/IoCollectOrderBizMapper.xml b/src/main/resources/mybatis/mapper/collect/IoCollectOrderBizMapper.xml index 1e8517966..f65a7ce9f 100644 --- a/src/main/resources/mybatis/mapper/collect/IoCollectOrderBizMapper.xml +++ b/src/main/resources/mybatis/mapper/collect/IoCollectOrderBizMapper.xml @@ -3,7 +3,11 @@