Merge remote-tracking branch 'origin/dev_fifo_z' into dev_fifo_z

dev_no_inv
yewj 9 months ago
commit 714531279f

@ -68,7 +68,7 @@ public enum BasicExportTypeEnum {
/** /**
* *
*/ */
DRUG_DATA_TASK("drug_data_task", "药品关联信息"), DRUG_DATA_TASK("drug_data_task", "药品关联信息数据"),
// //
// NEW_ALL_ORDER("all_order", "出入库扫码单据"), // NEW_ALL_ORDER("all_order", "出入库扫码单据"),
// ALL_BUS_ORDER("all_bus_order", "业务单据"), // ALL_BUS_ORDER("all_bus_order", "业务单据"),

@ -1,5 +1,6 @@
package com.glxp.api.controller.collect; package com.glxp.api.controller.collect;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.glxp.api.annotation.CusRedissonAnnotation; import com.glxp.api.annotation.CusRedissonAnnotation;
import com.glxp.api.annotation.RepeatSubmit; import com.glxp.api.annotation.RepeatSubmit;
@ -111,4 +112,16 @@ public class RelCodeBatchController extends BaseController {
return ResultVOUtils.success("清空成功"); 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));
}
} }

@ -111,4 +111,20 @@ public class RelCodeBatch implements Serializable {
@ApiModelProperty(value = "") @ApiModelProperty(value = "")
private String updateUser; 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;
} }

@ -7,12 +7,15 @@ import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.entity.system.SyncDataSetEntity; import com.glxp.api.entity.system.SyncDataSetEntity;
import com.glxp.api.req.inout.PostOrderRequest; 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.service.sync.SyncDataSetService;
import com.glxp.api.util.HttpClient;
import com.glxp.api.util.OkHttpCli; import com.glxp.api.util.OkHttpCli;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
@ -100,4 +103,28 @@ public class SpsDirectClient {
} }
/**
* spms
*/
public List<RelCodeDetailByParentCodeResponse> detailByParentCode(String parentCode) {
Map<String, String> paramMap = new HashMap<>(2);
paramMap.put("parentCode", parentCode);
String response = okHttpCli.doGet(getIpUrl() + "/udiwms/relCode/detailByParentCode", paramMap);
try {
BaseResponse<List<RelCodeDetailByParentCodeResponse>> baseResponse =
JSONObject.parseObject(response, new TypeReference<BaseResponse<List<RelCodeDetailByParentCodeResponse>>>() {
});
if (baseResponse.getCode() == 20000) {
List<RelCodeDetailByParentCodeResponse> list = baseResponse.getData();
return list;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
} }

@ -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> relCodeDetail;
private List<RelCodeDetailByParentCodeResponse> RelCodeDetailSons;
}

@ -53,5 +53,7 @@ public interface ProductInfoService {
boolean updateProductInfo(ProductInfoEntity productInfoEntity); boolean updateProductInfo(ProductInfoEntity productInfoEntity);
ProductInfoEntity findByNameCode(String nameCode);
} }

@ -495,7 +495,8 @@ public class BasicBussinessTypeServiceImpl extends ServiceImpl<BasicBussinessTyp
break; break;
case Constant.ORDER_ACTION_WAIT_DEAL: //待配货/拣货页面 case Constant.ORDER_ACTION_WAIT_DEAL: //待配货/拣货页面
bussinessTypeEntities = basicBussinessTypeDao.selectList(new QueryWrapper<BasicBussinessTypeEntity>() bussinessTypeEntities = basicBussinessTypeDao.selectList(new QueryWrapper<BasicBussinessTypeEntity>()
.eq("enable", true).eq(bussinessTypeFilterRequest.getProductType() != null, "productType", bussinessTypeFilterRequest.getProductType()).and( .eq("enable", true)
.eq(bussinessTypeFilterRequest.getProductType() != null, "productType", bussinessTypeFilterRequest.getProductType()).and(
webNew -> webNew.in("checkWebNew", 1, 2) webNew -> webNew.in("checkWebNew", 1, 2)
.or().in("checkPdaUn", 1, 2) .or().in("checkPdaUn", 1, 2)
.or().in("checkPdaEd", 1, 2) .or().in("checkPdaEd", 1, 2)

@ -1,5 +1,6 @@
package com.glxp.api.service.basic.impl; package com.glxp.api.service.basic.impl;
import cn.hutool.core.collection.CollUtil;
import com.glxp.api.req.basic.AddProductRequest; import com.glxp.api.req.basic.AddProductRequest;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
@ -206,4 +207,13 @@ public class ProductInfoServiceImpl implements ProductInfoService {
public boolean deleteAll(List<String> ids) { public boolean deleteAll(List<String> ids) {
return productInfoDao.deleteAll(ids); return productInfoDao.deleteAll(ids);
} }
@Override
public ProductInfoEntity findByNameCode(String nameCode) {
ProductInfoFilterRequest productInfoFilterRequest = new ProductInfoFilterRequest();
productInfoFilterRequest.setNameCode(nameCode);
List<ProductInfoEntity> productInfoEntities = productInfoDao.filterProductGroup(productInfoFilterRequest);
return CollUtil.isNotEmpty(productInfoEntities) ? productInfoEntities.get(0) : null;
}
} }

@ -5,16 +5,31 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil; 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.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.github.pagehelper.PageHelper; 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.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.collect.RelCodeDetail;
import com.glxp.api.entity.thrsys.ThrSystemEntity;
import com.glxp.api.exception.JsonException; 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.RelCodeBatchRequest;
import com.glxp.api.req.collect.RelCodeDetailRequest; 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.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.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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -33,10 +48,7 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -48,6 +60,8 @@ public class RelCodeBatchService extends ServiceImpl<RelCodeBatchMapper, RelCode
private RelCodeDetailService relCodeDetailService; private RelCodeDetailService relCodeDetailService;
@Resource @Resource
private CustomerService customerService; private CustomerService customerService;
@Resource
private ProductInfoService productInfoService;
/** /**
* *
@ -166,12 +180,14 @@ public class RelCodeBatchService extends ServiceImpl<RelCodeBatchMapper, RelCode
throw new JsonException("关联明细不能为空!"); throw new JsonException("关联明细不能为空!");
} }
AuthAdmin user = customerService.getUserBean(); AuthAdmin user = customerService.getUserBean();
RelCodeDetailRequest relCodeDetailRequest = detailList.get(0);
RelCodeBatch relCodeBatch = new RelCodeBatch(); RelCodeBatch relCodeBatch = new RelCodeBatch();
BeanUtils.copyProperties(relCodeBatchRequest,relCodeBatch); BeanUtils.copyProperties(relCodeBatchRequest,relCodeBatch);
relCodeBatch.setCreateTime(new Date()); relCodeBatch.setCreateTime(new Date());
relCodeBatch.setCreateUser(user.getUserName()); relCodeBatch.setCreateUser(user.getUserName());
relCodeBatch.setUpdateTime(new Date()); relCodeBatch.setUpdateTime(new Date());
relCodeBatch.setUpdateUser(user.getUserName()); relCodeBatch.setUpdateUser(user.getUserName());
relCodeBatch.setParentCode(relCodeDetailRequest.getParentCode());
this.save(relCodeBatch); this.save(relCodeBatch);
List<RelCodeDetail> relCodeDetails = new ArrayList<>(); List<RelCodeDetail> relCodeDetails = new ArrayList<>();
for(RelCodeDetailRequest request : detailList){ for(RelCodeDetailRequest request : detailList){
@ -234,4 +250,100 @@ public class RelCodeBatchService extends ServiceImpl<RelCodeBatchMapper, RelCode
}); });
} }
} }
public boolean batchExist(String parentCode) {
//1、排除掉层级是1的
UdiEntity udi = FilterUdiUtils.getUdi(parentCode);
String udi1 = udi.getUdi();
ProductInfoEntity byNameCode = productInfoService.findByNameCode(udi1);
if (byNameCode != null && "1".equals(byNameCode.getPackLevel())) return true;
//2、本地查询
List<RelCodeBatch> navList = this.list(new LambdaQueryWrapper<RelCodeBatch>()
.eq(RelCodeBatch::getParentCode, parentCode));
if (CollUtil.isNotEmpty(navList)) return true;
//3、查不到进行远程拉取更新
return this.UpdateDetailByParentCode(parentCode);
}
/**
* parentCode spms
*/
public boolean UpdateDetailByParentCode(String parentCode) {
List<RelCodeDetailByParentCodeResponse> 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<RelCodeDetailByParentCodeResponse> 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<RelCodeBatch> navList = this.list(new LambdaQueryWrapper<RelCodeBatch>()
.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<RelCodeDetail> detailList = relCodeDetailByParentCodeResponse.getRelCodeDetail();
List<RelCodeDetail> 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<RelCodeDetailByParentCodeResponse> detailByParentCode(String parentCode) {
try {
return spsDirectClient.detailByParentCode(parentCode);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
} }

@ -1,6 +1,9 @@
package com.glxp.api.service.sync; package com.glxp.api.service.sync;
import cn.hutool.core.bean.BeanUtil; 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.RelCodeBatchMapper;
import com.glxp.api.dao.collect.RelCodeDetailMapper; import com.glxp.api.dao.collect.RelCodeDetailMapper;
import com.glxp.api.dao.dev.*; import com.glxp.api.dao.dev.*;
@ -1200,10 +1203,7 @@ public class HeartService {
if (needExec(info.getDrugDataTask())) { if (needExec(info.getDrugDataTask())) {
Map<String, Object> map = basicExportStatusTimeInfo(now, BasicExportStatusTimeEnum.DRUG_DATA_TASK); Map<String, Object> map = basicExportStatusTimeInfo(now, BasicExportStatusTimeEnum.DRUG_DATA_TASK);
List<RelCodeBatch> relCodeBatches = relCodeBatchService.list(Wrappers.lambdaQuery(RelCodeBatch.class) List<RelCodeBatch> relCodeBatches = relCodeBatchService.list(Wrappers.lambdaQuery(RelCodeBatch.class)
.le(!ge && (boolean) map.get("isNew"), RelCodeBatch::getUpdateTime, now) .in(RelCodeBatch::getUploadFlagUp,0,2)
.between(ge, RelCodeBatch::getUpdateTime, syncTime, now)
.between(!ge && !(boolean) map.get("isNew"), RelCodeBatch::getUpdateTime
, map.get("oldDate"), now)
); );
if (CollectionUtil.isNotEmpty(relCodeBatches)) { if (CollectionUtil.isNotEmpty(relCodeBatches)) {
dataResponse = new SpsSyncDrugDataTaskResponse(); dataResponse = new SpsSyncDrugDataTaskResponse();
@ -1216,6 +1216,7 @@ public class HeartService {
dataResponse.setRelCodeDetails(list); dataResponse.setRelCodeDetails(list);
remark.append("药品关联信息任务:").append(relCodeBatches.size()).append("条\n"); remark.append("药品关联信息任务:").append(relCodeBatches.size()).append("条\n");
boolean update = relCodeBatchService.update(new LambdaUpdateWrapper<RelCodeBatch>().set(RelCodeBatch::getUploadFlagUp, 1).in(RelCodeBatch::getId, batchIds));
} }
} }
if (dataResponse != null) { if (dataResponse != null) {

@ -60,9 +60,7 @@
<if test="productType != null and productType != ''"> <if test="productType != null and productType != ''">
AND io.productType = #{productType} AND io.productType = #{productType}
</if> </if>
<!-- <if test="keyWords != null and keyWords != ''">-->
<!-- AND (aw.name like concat('%', #{keyWords}, '%') or bc.name like concat('%', #{keyWords}, '%'))-->
<!-- </if>-->
<if test="corpName != null and corpName != ''"> <if test="corpName != null and corpName != ''">
AND (SELECT NAME FROM auth_warehouse aw2 WHERE aw2.CODE = io.fromInvCode) like AND (SELECT NAME FROM auth_warehouse aw2 WHERE aw2.CODE = io.fromInvCode) like
@ -199,7 +197,7 @@
</if> </if>
<if test="keyWords != null and keyWords != ''"> <if test="keyWords != null and keyWords != ''">
and (io.billNo like concat('%', #{keyWords}, '%') and (io.billNo like concat('%', #{keyWords}, '%')
or io.fromCorp like concat('%', #{keyWords}, '%') or bc1.name like concat('%', #{keyWords}, '%')
or io.workPlaceCode like concat('%', #{keyWords}, '%') or io.workPlaceCode like concat('%', #{keyWords}, '%')
or io.busType like concat('%', #{keyWords}, '%') or io.busType like concat('%', #{keyWords}, '%')
or sw.workplaceName like concat('%', #{keyWords}, '%') or sw.workplaceName like concat('%', #{keyWords}, '%')

Loading…
Cancel
Save