diff --git a/api-sync/src/main/java/com/glxp/mipsdl/admin/client/http/UdPlatClient.java b/api-sync/src/main/java/com/glxp/mipsdl/admin/client/http/UdPlatClient.java index a968f7c..fc71369 100644 --- a/api-sync/src/main/java/com/glxp/mipsdl/admin/client/http/UdPlatClient.java +++ b/api-sync/src/main/java/com/glxp/mipsdl/admin/client/http/UdPlatClient.java @@ -18,6 +18,7 @@ import com.glxp.mipsdl.admin.req.UdiwmsOrderRequest; import com.glxp.mipsdl.admin.req.UdiwmsProductRequest; import com.glxp.mipsdl.admin.req.UdiwmsUnitRequest; import com.glxp.mipsdl.admin.res.system.UdiwmsProductInfoResponse; +import com.glxp.mipsdl.admin.util.CustomUtil; import com.glxp.mipsdl.admin.util.Md5Utils; import com.glxp.mipsdl.common.res.BaseResponse; import com.glxp.mipsdl.common.util.ResultVOUtils; @@ -26,10 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; @Slf4j @Service @@ -46,7 +44,7 @@ public class UdPlatClient implements BaseHttpClient { @Override public BaseResponse getPrdoucts(UdiwmsProductRequest udiwmsProductRequest) { StringBuilder builder = new StringBuilder(); - Map params = new TreeMap<>(); + Map params = new TreeMap<>(); if (null != udiwmsProductRequest) { Field[] fields = ReflectUtil.getFields(UdiwmsProductRequest.class); for (Field field : fields) { @@ -83,12 +81,12 @@ public class UdPlatClient implements BaseHttpClient { String url = udPlatConfig.getHost() + "/hsapi/purchase/hosp/goods/query"; url += builder; - HttpResponse response = HttpRequest.get(url).headerMap(getHeader(params), true).execute(); + HttpResponse response = HttpRequest.get(url).headerMap(getHeader(params, "get"), true).execute(); List result = new ArrayList<>(); if (!response.body().contains("校验失败")) { JSONObject jsonObject = JSON.parseObject(response.body()); List udplatGoodsEntities = JSON.parseArray(jsonObject.getJSONObject("data").getString("data"), UdplatGoodsEntity.class); - udplatGoodsEntities = getSingleSpecProduct(udplatGoodsEntities); + //udplatGoodsEntities = getSingleSpecProduct(udplatGoodsEntities); result.addAll(convertProduct(udplatGoodsEntities)); } return ResultVOUtils.success(result); @@ -104,12 +102,12 @@ public class UdPlatClient implements BaseHttpClient { for (UdplatGoodsEntity udplatGoodsEntity : udplatGoodsEntities) { if (udplatGoodsEntity.getMatchLevel().equals(1)) { //对照层级为产品,调用院内目录查询此产品关联的所有规格型号 - Map params = new TreeMap<>(); + Map params = new TreeMap<>(); params.put("hospGoodsId", String.valueOf(udplatGoodsEntity.getId())); params.put("compId", udplatGoodsEntity.getCompId()); String paramUrl = "?hospGoodsId=" + udplatGoodsEntity.getId() + "&compId=" + udplatGoodsEntity.getCompId(); - HttpResponse response = HttpRequest.get(udPlatConfig.getHost() + "/hsapi/purchase/hospGoods/spec/query" + paramUrl).headerMap(getHeader(params), true).execute(); + HttpResponse response = HttpRequest.get(udPlatConfig.getHost() + "/hsapi/purchase/hospGoods/spec/query" + paramUrl).headerMap(getHeader(params, "get"), true).execute(); JSONObject resp = JSON.parseObject(response.body()); if (resp.getBoolean("success").equals(true)) { JSONArray jsonArray = resp.getJSONObject("data").getJSONArray("data"); @@ -153,6 +151,7 @@ public class UdPlatClient implements BaseHttpClient { for (UdplatGoodsEntity udplatGoodsEntity : udplatGoodsEntities) { UdiwmsProductInfoResponse productInfoResponse = new UdiwmsProductInfoResponse(); BeanUtil.copyProperties(udplatGoodsEntity, productInfoResponse); + productInfoResponse.setCode(String.valueOf(udplatGoodsEntity.getId())); productInfoResponse.setRegisterNo(udplatGoodsEntity.getRegNum()); productInfoResponse.setYlqxzcrbarmc(udplatGoodsEntity.getRegName()); productInfoResponse.setSupName(udplatGoodsEntity.getDistributorName()); @@ -162,12 +161,14 @@ public class UdPlatClient implements BaseHttpClient { productInfoResponse.setStandard(udplatGoodsEntity.getSpec()); productInfoResponse.setSpec(udplatGoodsEntity.getSpec() + udplatGoodsEntity.getModel()); productInfoResponse.setName(udplatGoodsEntity.getProductName()); + productInfoResponse.setProductSpecId(udplatGoodsEntity.getCompId()); + list.add(productInfoResponse); } return list; } - private Map getHeader(Map mapParam) { + private Map getHeader(Map mapParam, String reqType) { Map map = new TreeMap<>(); String time = String.valueOf(System.currentTimeMillis()); mapParam.put("time", time); @@ -176,7 +177,7 @@ public class UdPlatClient implements BaseHttpClient { map.put("userName", udPlatConfig.getUserName()); map.put("time", time); map.put("secretKey", udPlatConfig.getSecretKey()); - map.put("sign", getSign(mapParam)); + map.put("sign", getSign(mapParam, reqType)); log.info(map.toString()); return map; } @@ -185,23 +186,114 @@ public class UdPlatClient implements BaseHttpClient { * 获取签名 * * @param mapParam + * @param reqType 请求类型 * @return */ - private String getSign(Map mapParam) { - TreeMap map = new TreeMap<>(); + private String getSign(Map mapParam, String reqType) { + TreeMap map = new TreeMap<>(); map.put("appId", udPlatConfig.getAppId()); map.put("userName", udPlatConfig.getUserName()); map.put("secretKey", udPlatConfig.getUdPlatConfig().getSecretKey()); - map.put("time", mapParam.get("time")); - map.putAll(mapParam); + map.put("time", String.valueOf(mapParam.get("time"))); StringBuilder sb = new StringBuilder(); - for (Map.Entry entry : map.entrySet()) { - sb.append(entry.getKey()).append("=").append(entry.getValue()); - sb.append("&"); + if ("post".equals(reqType)) { + mapParam.remove("time"); + //拼接body参数 + sb.append("appId=").append(udPlatConfig.getAppId()).append("&body=").append(JSON.toJSONString(mapParam)).append("&"); + map.remove("appId"); + for (Map.Entry entry : map.entrySet()) { + sb.append(entry.getKey()).append("=").append(entry.getValue()); + sb.append("&"); + } + } else { + map.putAll(mapParam); + for (Map.Entry entry : map.entrySet()) { + sb.append(entry.getKey()).append("=").append(entry.getValue()); + sb.append("&"); + } } + String str = sb.toString(); String str0 = str.substring(0, str.length() - 1); + log.info("签名---------------"); + log.info(str0); return Md5Utils.stringToMD5(str0); } + /** + * 提交采购计划 + * + * @param udiwmsOrderRequest + * @return + */ + public BaseResponse postOrder(UdiwmsOrderRequest udiwmsOrderRequest) { + Map orderParam = new TreeMap<>(); + orderParam.put("hisOrderId", udiwmsOrderRequest.getBillNo()); //医院计划单或订单主键(医院系统存储主键) + orderParam.put("remark", udiwmsOrderRequest.getRemark()); //医院采购计划备注 + orderParam.put("shippingAddress", udiwmsOrderRequest.getAddress()); //收货地址 + orderParam.put("shippingLinkMan", udiwmsOrderRequest.getLinkMan()); //收货联系人 + orderParam.put("shippingLinkTel", udiwmsOrderRequest.getLinkTel()); //收货联系电话 + orderParam.put("shippingInvoice", udiwmsOrderRequest.getCorpName()); //开票抬头 + //orderParam.put("planTime", null); //期望到货时间,参数中无此字段,暂时不传 + + List detailsMap = new ArrayList<>(); + Map orderDetailParamMap = new TreeMap<>(); + orderDetailParamMap.put("hisOrderDetailId", CustomUtil.getId()); //医院订单明细主键 + orderDetailParamMap.put("hospHisCode", udiwmsOrderRequest.getProductId()); //院内目录商品编码 + orderDetailParamMap.put("planBuyNum", udiwmsOrderRequest.getCount()); //采购数量 + //orderDetailParamMap.put("purchaseRemark", null); //自定义订单备注信息,参数中无此字段,暂时不传 + orderDetailParamMap.put("productSpecId", udiwmsOrderRequest.getProductId()); + //查询产品规格型号信息 + UdplatGoodsEntity udplatGoods = getGoodsInfoByProductSpecId(udiwmsOrderRequest.getProductId(), udiwmsOrderRequest.getProductSpecId()); + if (null != udplatGoods) { + orderDetailParamMap.put("spec", udplatGoods.getSpec()); + orderDetailParamMap.put("model", udplatGoods.getModel()); + } + detailsMap.add(orderDetailParamMap); + orderParam.put("items", detailsMap); + + log.info("参数-----"); + log.info(JSON.toJSONString(orderParam)); + + //向阳光采购平台提交采购计划 + HttpResponse response = HttpRequest.post(udPlatConfig.getHost() + "/hsapi/purchase/planOrder/submit").headerMap(getHeader(orderParam, "post"), true) + .body(JSON.toJSONString(orderParam)) + .execute(); + JSONObject resp = JSON.parseObject(response.body()); + if (resp.getBoolean("success").equals(false)) { + log.info("提交采购计划失败"); + log.info(response.body()); + } + return ResultVOUtils.success(resp.get("data")); + } + + + /** + * 阳光采购平台院内目录查询 + * + * @param hospGoodsId 院内目录ID + * @param productSpecId 组件ID + * @return + */ + public UdplatGoodsEntity getGoodsInfoByProductSpecId(String hospGoodsId, String productSpecId) { + Map params = new HashMap<>(); + params.put("hospGoodsId", hospGoodsId); + params.put("compId", productSpecId); + + //拼接参数 + String paramsUrl = "?hospGoodsId=" + hospGoodsId + "&compId=" + productSpecId; + HttpResponse response = HttpRequest.get(udPlatConfig.getHost() + "/hsapi/purchase/hospGoods/spec/query" + paramsUrl).headerMap(getHeader(params, "get"), true).execute(); + JSONObject resp = JSON.parseObject(response.body()); + if (resp.getBoolean("success").equals(true)) { + JSONArray jsonArray = resp.getJSONObject("data").getJSONArray("data"); + if (!jsonArray.isEmpty()) { + for (Object o : jsonArray) { + UdplatGoodsEntity entity = JSON.parseObject(JSON.toJSONString(o), UdplatGoodsEntity.class); + return entity; + } + } + } + return null; + } + } diff --git a/api-sync/src/main/java/com/glxp/mipsdl/admin/controller/UdiWmsController.java b/api-sync/src/main/java/com/glxp/mipsdl/admin/controller/UdiWmsController.java index 0b12d09..d55fa62 100644 --- a/api-sync/src/main/java/com/glxp/mipsdl/admin/controller/UdiWmsController.java +++ b/api-sync/src/main/java/com/glxp/mipsdl/admin/controller/UdiWmsController.java @@ -45,10 +45,10 @@ public class UdiWmsController { public BaseResponse getProducts(@RequestBody UdiwmsProductRequest udiwmsProductRequest) { if (curFlag.equals("YONGYOU_U8_V3.1")) { return pzhzdClient.getPrdoucts(udiwmsProductRequest); - } else if (curFlag.equals("YG_UDPLAT_V1.0")){ + } else if (curFlag.equals("YG_UDPLAT_V1.0")) { return udPlatClient.getPrdoucts(udiwmsProductRequest); } - return ResultVOUtils.error(500, "未设置系统版本!"); + return ResultVOUtils.error(500, "未设置系统版本!"); } @@ -103,4 +103,18 @@ public class UdiWmsController { } + /** + * 提交采购计划 + * + * @param udiwmsOrderRequest + * @return + */ + @PostMapping("/udiwms/erp/order/postOrder") + public BaseResponse postOrder(@RequestBody UdiwmsOrderRequest udiwmsOrderRequest) { + if (curFlag.equals("YG_UDPLAT_V1.0")) { + return udPlatClient.postOrder(udiwmsOrderRequest); + } + return ResultVOUtils.error(500, "未设置系统版本"); + } + } diff --git a/api-sync/src/main/java/com/glxp/mipsdl/admin/entity/ygudplat/UdplatGoodsEntity.java b/api-sync/src/main/java/com/glxp/mipsdl/admin/entity/ygudplat/UdplatGoodsEntity.java index 6f83b8e..b85a6c3 100644 --- a/api-sync/src/main/java/com/glxp/mipsdl/admin/entity/ygudplat/UdplatGoodsEntity.java +++ b/api-sync/src/main/java/com/glxp/mipsdl/admin/entity/ygudplat/UdplatGoodsEntity.java @@ -44,4 +44,7 @@ public class UdplatGoodsEntity { private Date updateTime;//最后更新时间 private Integer matchLevel; //对照层级 1.产品 2.单一规格 + + private String hospHisCode; + } diff --git a/api-sync/src/main/java/com/glxp/mipsdl/admin/req/UdiwmsOrderRequest.java b/api-sync/src/main/java/com/glxp/mipsdl/admin/req/UdiwmsOrderRequest.java index 94fe8ee..9e77c40 100644 --- a/api-sync/src/main/java/com/glxp/mipsdl/admin/req/UdiwmsOrderRequest.java +++ b/api-sync/src/main/java/com/glxp/mipsdl/admin/req/UdiwmsOrderRequest.java @@ -14,4 +14,29 @@ public class UdiwmsOrderRequest { private Integer limit; private Integer page; + private String billdate; //单据日期 + private String billType; //单据类型 + + private Integer createUser; + private Integer reviewUser; + + private String remark; //备注 + private String remark1; //备注1/规格型号ID + private String remark2; //备注2/型号 + private String remark3; //备注3/规格 + + private String address; //地址 + private String linkMan; //联系人 + private String linkTel; //电话 + private String corpName; //往来单位 + private String batchNo; //批次号 + private String expireDate; //失效日期 + private String productDate; //生产日期 + private String count; //数量 + private String productId; //产品编码 + private String detailCode; //明细编码 + + //阳光采购平台 耗材目录规格id + private String productSpecId; + } diff --git a/api-sync/src/main/java/com/glxp/mipsdl/admin/req/UdiwmsUnitRequest.java b/api-sync/src/main/java/com/glxp/mipsdl/admin/req/UdiwmsUnitRequest.java index 2d91d3e..399ec00 100644 --- a/api-sync/src/main/java/com/glxp/mipsdl/admin/req/UdiwmsUnitRequest.java +++ b/api-sync/src/main/java/com/glxp/mipsdl/admin/req/UdiwmsUnitRequest.java @@ -4,7 +4,10 @@ import lombok.Data; @Data public class UdiwmsUnitRequest extends ListPageRequest { + String key; private String unitId; private String name; + + } diff --git a/api-sync/src/main/java/com/glxp/mipsdl/admin/res/system/UdiwmsProductInfoResponse.java b/api-sync/src/main/java/com/glxp/mipsdl/admin/res/system/UdiwmsProductInfoResponse.java index f99081c..b240334 100644 --- a/api-sync/src/main/java/com/glxp/mipsdl/admin/res/system/UdiwmsProductInfoResponse.java +++ b/api-sync/src/main/java/com/glxp/mipsdl/admin/res/system/UdiwmsProductInfoResponse.java @@ -72,4 +72,9 @@ public class UdiwmsProductInfoResponse { //备注3 private String remark3; + //阳光采购平台 耗材目录规格id + private String productSpecId; + + private String hospHisCode; + } diff --git a/api-sync/src/main/java/com/glxp/mipsdl/admin/util/CustomUtil.java b/api-sync/src/main/java/com/glxp/mipsdl/admin/util/CustomUtil.java new file mode 100644 index 0000000..1f5b790 --- /dev/null +++ b/api-sync/src/main/java/com/glxp/mipsdl/admin/util/CustomUtil.java @@ -0,0 +1,46 @@ +package com.glxp.mipsdl.admin.util; + +import java.util.*; + +public class CustomUtil { + + public static String getUUId() { + UUID uuid = UUID.randomUUID(); + return uuid.toString().replace("-", ""); + } + + //随机生成ID + public static String getId() { + String id = System.currentTimeMillis() + ""; + int number = new Random().nextInt(90) + 10; + id = id + number; + return id.substring(4); + } + + //随机生成往来单位ID + public static String getUnitId() { + String id = System.currentTimeMillis() + ""; + int number = new Random().nextInt(90) + 10; + id = id + number; + return "HZ" + id.substring(4); + } + + public static List> splitList(List list, int len) { + + if (list == null || list.isEmpty() || len < 1) { + return Collections.emptyList(); + } + + List> result = new ArrayList<>(); + + int size = list.size(); + int count = (size + len - 1) / len; + + for (int i = 0; i < count; i++) { + List subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1))); + result.add(subList); + } + + return result; + } +}