Commit 8b96c50c by 江和松

物料清单全部提交时触发批量录入生产计划操作

parent 972a1055
......@@ -85,6 +85,9 @@
<isNotEmpty prepend=" AND " property="ids">
ID IN <iterate close=")" open="(" conjunction="," property="ids">#ids[]#</iterate>
</isNotEmpty>
<isNotEmpty prepend=" AND " property="inventCodes">
INVENT_CODE IN <iterate close=")" open="(" conjunction="," property="inventCodes">#inventCodes[]#</iterate>
</isNotEmpty>
</sql>
<select id="query" parameterClass="java.util.HashMap"
......
......@@ -633,6 +633,20 @@ public class HGPZTools {
/**
* 通过存货编码查询存货工序*
*
* @param inventCodes
* @return
*/
public static List<HGPZ005A> queryByInventCodes(List<String> inventCodes) {
AssertUtils.isTrue(inventCodes.isEmpty(), "存货编码不能为空!");
Map paramMap = new HashMap();
paramMap.put("inventCodes", inventCodes);
List<HGPZ005A> results = DaoBase.getInstance().query(HGPZ005A.QUERY, paramMap);
return CollectionUtils.isEmpty(results) ? null : results;
}
/**
* 通过存货编码查询存货工序*
*
* @param ids
* @return
*/
......
......@@ -321,6 +321,7 @@ public class ServiceHGSC004A extends ServiceBase {
Map<String,Object> mapA = new HashMap<>();
mapA.put("materialId",hgsc004a.getMaterialId());
List<HGSC004A> hgsc004AList = dao.query(HGSC004A.QUERY_BY_MATERIAL_ID,mapA, 0, -999999);
List<HGSC005A> hgsc005AList = new LinkedList<>();
for(HGSC004A hgsc004A : hgsc004AList){
//子表
HGSC005A hgsc005a = new HGSC005A();
......@@ -332,7 +333,10 @@ public class ServiceHGSC004A extends ServiceBase {
}else{
hgsc005a.setProductType(ProductTypeEnum.PART.getCode());
}
HGSCTools.THGSC005A.save(hgsc005a);
hgsc005AList.add(hgsc005a);
}
if(hgsc005AList != null && !hgsc005AList.isEmpty()){
HGSCTools.THGSC005A.saveList(hgsc005AList);
}
}
......
......@@ -85,6 +85,9 @@
<isNotEmpty prepend=" AND " property="updatedTime">
updated_time = #updatedTime#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="matIds">
mat_id NOT IN <iterate close=")" open="(" conjunction="," property="matIds">#matIds[]#</iterate>
</isNotEmpty>
</sql>
<select id="query" parameterClass="java.util.HashMap"
......
......@@ -151,6 +151,9 @@
<isNotEmpty prepend=" AND " property="planCodes">
plan_code IN <iterate close=")" open="(" conjunction="," property="planCodes">#planCodes[]#</iterate>
</isNotEmpty>
<isNotEmpty prepend=" AND " property="productCodes">
product_code IN <iterate close=")" open="(" conjunction="," property="productCodes">#productCodes[]#</iterate>
</isNotEmpty>
</sql>
<select id="query" parameterClass="java.util.HashMap"
......
......@@ -409,6 +409,26 @@ public class HGSCTools {
return CollectionUtils.isEmpty(results) ? null : results;
}
private static List<HGSC005A> generatorNewPlanDetail(List<HGSC005A> hgsc005aList){
List<String> inventCodes = hgsc005aList.stream().map(HGSC005A::getProductCode).collect(Collectors.toList());
//通过存货档案编码查询存货档案工序
List<HGPZ005A> hgpz005AList = HGPZTools.HgPz005A.queryByInventCodes(inventCodes);
List<HGSC005A> hgsc005AList = new ArrayList<>();
hgsc005aList.forEach(hgsc005a->{
List<HGPZ005A> filterHgpz005a = hgpz005AList.stream().filter(o->o.getInventCode().equals(hgsc005a.getProductCode())).collect(Collectors.toList());
AssertUtils.isEmpty(filterHgpz005a, String.format("产品[%s]工序不存在,请先到存货档案配置产品工序!",hgsc005a.getProductName()));
filterHgpz005a.forEach(pz -> {
HGSC005A obj = new HGSC005A();
BeanUtils.copyProperties(hgsc005a,obj);
obj.setInventProcessId(pz.getId());
obj.setProcessCode(pz.getProcessCode());
obj.setProcessName(pz.getProcessName());
obj.setProcessOrder(pz.getProcessOrder());
hgsc005AList.add(obj);
});
});
return hgsc005AList;
}
private static List<HGSC005A> generatorNewPlanDetail(HGSC005A hgsc005a){
//通过存货档案编码查询存货档案工序
......@@ -427,6 +447,37 @@ public class HGSCTools {
return hgsc005AList;
}
private static Map<Long,Optional<HGSC005A>> queryOldPlanDetail(List<HGSC005A> hgsc005aList){
List<String> productCodes = hgsc005aList.stream().map(HGSC005A::getProductCode).collect(Collectors.toList());
Map paramMap = new HashMap();
//因为提交时肯定matid相同,直接取第一个即可
paramMap.put(HGSC005A.FIELD_mat_id, hgsc005aList.get(0).getMatId());
paramMap.put("productCodes", productCodes);
List<HGSC005A> oldObjList = DaoBase.getInstance().query(HGSC005A.QUERY, paramMap);
Map<Long,Optional<HGSC005A>> returnOldObjMap = new LinkedHashMap<>();
hgsc005aList.forEach(hgsc005a->{
//构建计划物料明细ID唯一
if(hgsc005a.getProductType().compareTo(ProductTypeEnum.STRUCT.getCode())==0){
List<HGSC005A> oldObjFilterList = oldObjList.stream().filter(o->o.getProductCode().equals(hgsc005a.getProductCode())
&& o.getMatDetailId().compareTo(hgsc005a.getMatDetailId())==0)
.collect(Collectors.toList());
Map<Long,Optional<HGSC005A>> oldObjMap = Optional.ofNullable(oldObjFilterList).orElse(new ArrayList<>()).stream()
.collect(Collectors.groupingBy(HGSC005A::getInventProcessId,Collectors.maxBy(
Comparator.comparingInt(HGSC005A::getQuantity))));
returnOldObjMap.putAll(oldObjMap);
}else{
List<HGSC005A> oldObjFilterList = oldObjList.stream().filter(o->o.getProductCode().equals(hgsc005a.getProductCode()))
.collect(Collectors.toList());
Map<Long,Optional<HGSC005A>> oldObjMap = Optional.ofNullable(oldObjFilterList).orElse(new ArrayList<>()).stream()
.collect(Collectors.groupingBy(HGSC005A::getInventProcessId,Collectors.maxBy(
Comparator.comparingInt(HGSC005A::getQuantity))));
oldObjMap.putAll(oldObjMap);
}
});
return returnOldObjMap;
}
private static Map<Long,Optional<HGSC005A>> queryOldPlanDetail(HGSC005A hgsc005a){
Map paramMap = new HashMap();
paramMap.put(HGSC005A.FIELD_mat_id, hgsc005a.getMatId());
......@@ -442,6 +493,36 @@ public class HGSCTools {
return oldObjMap;
}
public static List<HGSC005A> saveList(List<HGSC005A> hgsc005aList){
checkUpdateData(hgsc005aList);
constructObj(hgsc005aList);
List<HGSC005A> hgsc005AList = generatorNewPlanDetail(hgsc005aList);
Map<Long,Optional<HGSC005A>> oldObjMap = queryOldPlanDetail(hgsc005aList);
List<HGSC005A> createList = new ArrayList<>();
List<HGSC005A> updateList = new ArrayList<>();
hgsc005AList.forEach(o -> {
Optional<HGSC005A> op = oldObjMap.get(o.getInventProcessId());
if(Objects.nonNull(op)){
HGSC005A uo = op.get();
uo.setQuantity(uo.getQuantity()+o.getQuantity());
uo.setUnfinishQuantity(uo.getUnfinishQuantity()+o.getQuantity());
handleWeight(o,uo);
updateList.add(uo);
}else{
handleWeight(o,o);
createList.add(o);
}
});
if(CollectionUtils.isNotEmpty(createList)){
DaoUtils.insertBatch(HGSC005A.INSERT,createList);
}
if(CollectionUtils.isNotEmpty(updateList)){
DaoUtils.updateBatch(HGSC005A.UPDATE,updateList);
}
return hgsc005aList;
}
public static HGSC005A save(HGSC005A hgsc005a){
checkUpdateData(hgsc005a);
constructObj(hgsc005a);
......@@ -550,6 +631,40 @@ public class HGSCTools {
/**
* 校验修改的数据
*
* @param hgsc005aList
*/
private static void checkUpdateData(List<HGSC005A> hgsc005aList) {
for(HGSC005A hgsc005a : hgsc005aList){
AssertUtils.isTrue(Objects.isNull(hgsc005a.getMatId())||hgsc005a.getMatId()<=0, "物料清单ID不能为空!");
AssertUtils.isTrue(Objects.isNull(hgsc005a.getMatDetailId())||hgsc005a.getMatDetailId()<=0, "物料清单明细ID不能为空!");
AssertUtils.isEmpty(hgsc005a.getProductCode(), "产品编码不能为空!");
AssertUtils.isEmpty(hgsc005a.getProductName(), "产品名称不能为空!");
AssertUtils.isTrue(Objects.isNull(hgsc005a.getTechFlowId())||hgsc005a.getTechFlowId()<=0, "工艺流程ID不能为空!");
AssertUtils.isTrue(Objects.isNull(hgsc005a.getQuantity())||hgsc005a.getQuantity()<=0, "数量不能为空!");
}
}
public static List<HGSC005A> constructObj(List<HGSC005A> hgsc005aList){
HGSC005 hgsc005 = THGSC005.queryByMatId(hgsc005aList.get(0).getMatId());
hgsc005aList.forEach(hgsc005a -> {
hgsc005a.setPlanCode(hgsc005.getPlanCode());
hgsc005a.setCompanyCode(hgsc005.getCompanyCode());
hgsc005a.setCompanyName(hgsc005.getCompanyName());
hgsc005a.setDepCode(hgsc005.getDepCode());
hgsc005a.setDepName(hgsc005.getDepName());
hgsc005a.setProjCode(hgsc005.getProjCode());
hgsc005a.setProjName(hgsc005.getProjName());
hgsc005a.setFinishDate(hgsc005.getFinishDate());
hgsc005a.setUnfinishQuantity(hgsc005a.getQuantity());
hgsc005a.setFinishQuantity(0);
hgsc005a.setUnfinishWeight(hgsc005a.getTotalWeight());
});
return hgsc005aList;
}
/**
* 校验修改的数据
*
* @param hgsc005a
*/
private static void checkUpdateData(HGSC005A hgsc005a) {
......@@ -561,6 +676,23 @@ public class HGSCTools {
AssertUtils.isTrue(Objects.isNull(hgsc005a.getQuantity())||hgsc005a.getQuantity()<=0, "数量不能为空!");
}
public static List<HGSC005A> constructObj(List<HGSC005A> hgsc005aList,HGSC005 hgsc005){
hgsc005aList.forEach(hgsc005a->{
hgsc005a.setPlanCode(hgsc005.getPlanCode());
hgsc005a.setCompanyCode(hgsc005.getCompanyCode());
hgsc005a.setCompanyName(hgsc005.getCompanyName());
hgsc005a.setDepCode(hgsc005.getDepCode());
hgsc005a.setDepName(hgsc005.getDepName());
hgsc005a.setProjCode(hgsc005.getProjCode());
hgsc005a.setProjName(hgsc005.getProjName());
hgsc005a.setFinishDate(hgsc005.getFinishDate());
hgsc005a.setUnfinishQuantity(hgsc005a.getQuantity());
hgsc005a.setFinishQuantity(0);
hgsc005a.setUnfinishWeight(hgsc005a.getTotalWeight());
});
return hgsc005aList;
}
public static HGSC005A constructObj(HGSC005A hgsc005a){
HGSC005 hgsc005 = THGSC005.queryByMatId(hgsc005a.getMatId());
hgsc005a.setPlanCode(hgsc005.getPlanCode());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment