diff --git a/src/main/java/com/glxp/api/constant/BasicExportTypeEnum.java b/src/main/java/com/glxp/api/constant/BasicExportTypeEnum.java index 1b301f29e..0acfe7c51 100644 --- a/src/main/java/com/glxp/api/constant/BasicExportTypeEnum.java +++ b/src/main/java/com/glxp/api/constant/BasicExportTypeEnum.java @@ -68,7 +68,7 @@ public enum BasicExportTypeEnum { /** * 药品关联信息任务同步 */ - DRUG_DATA_TASK("drug_data_task", "药品关联信息任"), + DRUG_DATA_TASK("drug_data_task", "药品关联信息数据"), // // NEW_ALL_ORDER("all_order", "出入库扫码单据"), // ALL_BUS_ORDER("all_bus_order", "业务单据"), diff --git a/src/main/java/com/glxp/api/controller/collect/RelCodeBatchController.java b/src/main/java/com/glxp/api/controller/collect/RelCodeBatchController.java index b854a721b..953052696 100644 --- a/src/main/java/com/glxp/api/controller/collect/RelCodeBatchController.java +++ b/src/main/java/com/glxp/api/controller/collect/RelCodeBatchController.java @@ -1,5 +1,6 @@ package com.glxp.api.controller.collect; +import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageInfo; import com.glxp.api.annotation.CusRedissonAnnotation; import com.glxp.api.annotation.RepeatSubmit; @@ -111,4 +112,16 @@ public class RelCodeBatchController extends BaseController { return ResultVOUtils.success("清空成功"); } + + /** + * 获取本地是否存在该层级码 + * @param parentCode + * @return + */ + @GetMapping("/udiwms/relCode/batch/exist") + public BaseResponse batchExist(@RequestParam("parentCode") String parentCode) { + if (StrUtil.isBlank(parentCode)) return ResultVOUtils.error(500,"层级编码格式错误!"); + return ResultVOUtils.success(relCodeBatchService.batchExist(parentCode)); + } + } diff --git a/src/main/java/com/glxp/api/entity/collect/RelCodeBatch.java b/src/main/java/com/glxp/api/entity/collect/RelCodeBatch.java index 035b75f82..7056f3691 100644 --- a/src/main/java/com/glxp/api/entity/collect/RelCodeBatch.java +++ b/src/main/java/com/glxp/api/entity/collect/RelCodeBatch.java @@ -111,4 +111,20 @@ public class RelCodeBatch implements Serializable { @ApiModelProperty(value = "") private String updateUser; + @TableField(value = "uploadFlagUp") + @ApiModelProperty(value = "") + private Integer uploadFlagUp; + + @TableField(value = "uploadFlagDown") + @ApiModelProperty(value = "") + private Integer uploadFlagDown; + + /** + * 父级码 + */ + + @TableField(value = "parentCode") + @ApiModelProperty(value = "") + private String parentCode; + } diff --git a/src/main/java/com/glxp/api/http/sync/SpsDirectClient.java b/src/main/java/com/glxp/api/http/sync/SpsDirectClient.java index 9bb0a83c3..9edb29eef 100644 --- a/src/main/java/com/glxp/api/http/sync/SpsDirectClient.java +++ b/src/main/java/com/glxp/api/http/sync/SpsDirectClient.java @@ -7,12 +7,15 @@ import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.entity.system.SyncDataSetEntity; import com.glxp.api.req.inout.PostOrderRequest; +import com.glxp.api.res.collect.RelCodeDetailByParentCodeResponse; import com.glxp.api.service.sync.SyncDataSetService; +import com.glxp.api.util.HttpClient; import com.glxp.api.util.OkHttpCli; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.HashMap; +import java.util.List; import java.util.Map; @Service @@ -100,4 +103,28 @@ public class SpsDirectClient { } + /** + * 层级编码查询spms同步库 + */ + public List detailByParentCode(String parentCode) { + Map paramMap = new HashMap<>(2); + paramMap.put("parentCode", parentCode); + String response = okHttpCli.doGet(getIpUrl() + "/udiwms/relCode/detailByParentCode", paramMap); + try { + BaseResponse> baseResponse = + JSONObject.parseObject(response, new TypeReference>>() { + }); + if (baseResponse.getCode() == 20000) { + List list = baseResponse.getData(); + return list; + } else { + return null; + } + + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + } diff --git a/src/main/java/com/glxp/api/res/collect/RelCodeDetailByParentCodeResponse.java b/src/main/java/com/glxp/api/res/collect/RelCodeDetailByParentCodeResponse.java new file mode 100644 index 000000000..09b5b9e75 --- /dev/null +++ b/src/main/java/com/glxp/api/res/collect/RelCodeDetailByParentCodeResponse.java @@ -0,0 +1,125 @@ +package com.glxp.api.res.collect; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.glxp.api.entity.collect.RelCodeDetail; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class RelCodeDetailByParentCodeResponse { + + @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value="") + private Integer id; + + /** + * 产品编码 + */ + @TableField(value = "productCode") + @ApiModelProperty(value="产品编码") + private String productCode; + + /** + * 类型编码 + */ + @TableField(value = "subTypeNo") + @ApiModelProperty(value="类型编码") + private String subTypeNo; + + /** + * 包装比例 + */ + @TableField(value = "cascadeRatio") + @ApiModelProperty(value="包装比例") + private String cascadeRatio; + + /** + * 包装规格 + */ + @TableField(value = "packageSpec") + @ApiModelProperty(value="包装规格") + private String packageSpec; + + /** + * 备注 + */ + @TableField(value = "comment") + @ApiModelProperty(value="备注") + private String comment; + + /** + * 批次号 + */ + @TableField(value = "batchNo") + @ApiModelProperty(value="批次号") + private String batchNo; + + /** + * 生产日期 + */ + @TableField(value = "madeDate") + @ApiModelProperty(value="生产日期") + private String madeDate; + + /** + * 有效期至 + */ + @TableField(value = "validateDate") + @ApiModelProperty(value="有效期至") + private String validateDate; + + /** + * 生产车间 + */ + @TableField(value = "workShop") + @ApiModelProperty(value="生产车间") + private String workShop; + + /** + * 生产线 + */ + @TableField(value = "lineName") + @ApiModelProperty(value="生产线") + private String lineName; + + /** + * 负责人 + */ + @TableField(value = "lineManager") + @ApiModelProperty(value="负责人") + private String lineManager; + + @TableField(value = "createTime") + @ApiModelProperty(value = "") + private Date createTime; + + @TableField(value = "`createUser`") + @ApiModelProperty(value = "") + private String createUser; + + @TableField(value = "updateTime") + @ApiModelProperty(value = "") + private Date updateTime; + + @TableField(value = "updateUser") + @ApiModelProperty(value = "") + private String updateUser; + + + /** + * 父级码 + */ + + @TableField(value = "parentCode") + @ApiModelProperty(value = "") + private String parentCode; + + private List relCodeDetail; + + private List RelCodeDetailSons; +} diff --git a/src/main/java/com/glxp/api/service/basic/ProductInfoService.java b/src/main/java/com/glxp/api/service/basic/ProductInfoService.java index c0cc49bf9..ff057fc21 100644 --- a/src/main/java/com/glxp/api/service/basic/ProductInfoService.java +++ b/src/main/java/com/glxp/api/service/basic/ProductInfoService.java @@ -53,5 +53,7 @@ public interface ProductInfoService { boolean updateProductInfo(ProductInfoEntity productInfoEntity); + ProductInfoEntity findByNameCode(String nameCode); + } diff --git a/src/main/java/com/glxp/api/service/basic/UdiProductService.java b/src/main/java/com/glxp/api/service/basic/UdiProductService.java index 44b15d9d2..2885e11ff 100644 --- a/src/main/java/com/glxp/api/service/basic/UdiProductService.java +++ b/src/main/java/com/glxp/api/service/basic/UdiProductService.java @@ -149,7 +149,7 @@ public class UdiProductService extends ServiceImpl ids) { return productInfoDao.deleteAll(ids); } + + @Override + public ProductInfoEntity findByNameCode(String nameCode) { + + ProductInfoFilterRequest productInfoFilterRequest = new ProductInfoFilterRequest(); + productInfoFilterRequest.setNameCode(nameCode); + List productInfoEntities = productInfoDao.filterProductGroup(productInfoFilterRequest); + return CollUtil.isNotEmpty(productInfoEntities) ? productInfoEntities.get(0) : null; + } } diff --git a/src/main/java/com/glxp/api/service/collect/RelCodeBatchService.java b/src/main/java/com/glxp/api/service/collect/RelCodeBatchService.java index 65f6d93d4..edc45091e 100644 --- a/src/main/java/com/glxp/api/service/collect/RelCodeBatchService.java +++ b/src/main/java/com/glxp/api/service/collect/RelCodeBatchService.java @@ -5,16 +5,31 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.XmlUtil; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.github.pagehelper.PageHelper; +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.entity.auth.AuthAdmin; +import com.glxp.api.entity.basic.ProductInfoEntity; +import com.glxp.api.entity.basic.UdiEntity; import com.glxp.api.entity.collect.RelCodeDetail; +import com.glxp.api.entity.thrsys.ThrSystemEntity; import com.glxp.api.exception.JsonException; +import com.glxp.api.http.sync.SpsDirectClient; import com.glxp.api.req.collect.RelCodeBatchRequest; import com.glxp.api.req.collect.RelCodeDetailRequest; +import com.glxp.api.req.inv.FilterInvProductRequest; +import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.collect.RelCodeBatchResponse; +import com.glxp.api.res.collect.RelCodeDetailByParentCodeResponse; +import com.glxp.api.res.inv.ThrInvResultResponse; import com.glxp.api.service.auth.CustomerService; +import com.glxp.api.service.basic.ProductInfoService; +import com.glxp.api.util.HttpClient; +import com.glxp.api.util.udi.FilterUdiUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -33,10 +48,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Service @@ -48,6 +60,8 @@ public class RelCodeBatchService extends ServiceImpl relCodeDetails = new ArrayList<>(); for(RelCodeDetailRequest request : detailList){ @@ -234,4 +250,100 @@ public class RelCodeBatchService extends ServiceImpl navList = this.list(new LambdaQueryWrapper() + .eq(RelCodeBatch::getParentCode, parentCode)); + if (CollUtil.isNotEmpty(navList)) return true; + + //3、查不到进行远程拉取更新 + return this.UpdateDetailByParentCode(parentCode); + + } + + /** + * 通过 parentCode 拉取spms同步库进行更新 + */ + public boolean UpdateDetailByParentCode(String parentCode) { + List list = this.detailByParentCode(parentCode); + if (CollUtil.isNotEmpty(list)) { + for (int i = 0; i < list.size(); i++) { + try { + RelCodeDetailByParentCodeResponse relCodeDetailByParentCodeResponse = list.get(i); + this.saveDetailByParentCode(relCodeDetailByParentCodeResponse); + List relCodeDetailSons = relCodeDetailByParentCodeResponse.getRelCodeDetailSons(); + if (CollUtil.isNotEmpty(relCodeDetailSons)) { + relCodeDetailSons.forEach( item ->{ + this.saveDetailByParentCode(item); + }); + } + }catch (Exception e){ + log.error("拉取SPMS同步库进行更新失败:[" + parentCode + "]" ); + log.error(e.getMessage(), e); + } + } + return true; + }else + return false; + } + + public void saveDetailByParentCode( RelCodeDetailByParentCodeResponse relCodeDetailByParentCodeResponse) { + String productCode = relCodeDetailByParentCodeResponse.getProductCode(); + String subTypeNo = relCodeDetailByParentCodeResponse.getSubTypeNo(); + String batchNo = relCodeDetailByParentCodeResponse.getBatchNo(); + String parentCode1 = relCodeDetailByParentCodeResponse.getParentCode(); + + //如果不存在就添加 + List navList = this.list(new LambdaQueryWrapper() + .eq(RelCodeBatch::getProductCode, productCode) + .eq(StrUtil.isNotBlank(subTypeNo), RelCodeBatch::getSubTypeNo, subTypeNo) + .eq(RelCodeBatch::getBatchNo, batchNo) + .eq(RelCodeBatch::getParentCode, parentCode1)); + + if (CollUtil.isEmpty(navList)) { + RelCodeBatch relCodeBatch = new RelCodeBatch(); + BeanUtils.copyProperties(relCodeDetailByParentCodeResponse, relCodeBatch); + relCodeBatch.setId(null); + relCodeBatch.setCreateTime(new Date()); + relCodeBatch.setUpdateTime(new Date()); + relCodeBatch.setUploadFlagUp(1); + relCodeBatch.setUploadFlagDown(0); + this.save(relCodeBatch); + + List detailList = relCodeDetailByParentCodeResponse.getRelCodeDetail(); + List relCodeDetails = new ArrayList<>(); + for (RelCodeDetail relCodeDetail : detailList) { + relCodeDetail.setId(null); + relCodeDetail.setBatchIdFk(relCodeBatch.getId()); + relCodeDetails.add(relCodeDetail); + } + relCodeDetailService.saveBatch(relCodeDetails); + } + } + + @Resource + SpsDirectClient spsDirectClient; + + /** + * 层级编码查询spms同步库 + */ + public List detailByParentCode(String parentCode) { + try { + return spsDirectClient.detailByParentCode(parentCode); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + + } diff --git a/src/main/java/com/glxp/api/service/sync/HeartService.java b/src/main/java/com/glxp/api/service/sync/HeartService.java index d61cec085..0fb8d8523 100644 --- a/src/main/java/com/glxp/api/service/sync/HeartService.java +++ b/src/main/java/com/glxp/api/service/sync/HeartService.java @@ -1,6 +1,9 @@ package com.glxp.api.service.sync; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.glxp.api.dao.collect.RelCodeBatchMapper; import com.glxp.api.dao.collect.RelCodeDetailMapper; import com.glxp.api.dao.dev.*; @@ -1200,10 +1203,7 @@ public class HeartService { if (needExec(info.getDrugDataTask())) { Map map = basicExportStatusTimeInfo(now, BasicExportStatusTimeEnum.DRUG_DATA_TASK); List relCodeBatches = relCodeBatchService.list(Wrappers.lambdaQuery(RelCodeBatch.class) - .le(!ge && (boolean) map.get("isNew"), RelCodeBatch::getUpdateTime, now) - .between(ge, RelCodeBatch::getUpdateTime, syncTime, now) - .between(!ge && !(boolean) map.get("isNew"), RelCodeBatch::getUpdateTime - , map.get("oldDate"), now) + .in(RelCodeBatch::getUploadFlagUp,0,2) ); if (CollectionUtil.isNotEmpty(relCodeBatches)) { dataResponse = new SpsSyncDrugDataTaskResponse(); @@ -1216,6 +1216,7 @@ public class HeartService { dataResponse.setRelCodeDetails(list); remark.append("药品关联信息任务:").append(relCodeBatches.size()).append("条\n"); + boolean update = relCodeBatchService.update(new LambdaUpdateWrapper().set(RelCodeBatch::getUploadFlagUp, 1).in(RelCodeBatch::getId, batchIds)); } } if (dataResponse != null) { diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 794856e96..550f24925 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,9 +4,9 @@ server: spring: datasource: driver-class-name: com.p6spy.engine.spy.P6SpyDriver - jdbc-url: jdbc:p6spy:mysql://192.168.0.206:3306/udiwms81?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true + jdbc-url: jdbc:p6spy:mysql://127.0.0.1:3306/udi_wms?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root - password: Glxp@6066 + password: 123456 hikari: connection-timeout: 60000 maximum-pool-size: 20