diff --git a/src/main/java/com/spring/modules/base/entity/WorkCenterCost.java b/src/main/java/com/spring/modules/base/entity/WorkCenterCost.java index 108920e4..2ffb3d95 100644 --- a/src/main/java/com/spring/modules/base/entity/WorkCenterCost.java +++ b/src/main/java/com/spring/modules/base/entity/WorkCenterCost.java @@ -60,4 +60,8 @@ public class WorkCenterCost implements Serializable { private String overhead1Appl; private String overhead2Appl; + public String getKey() { + return site + "-" + workCenterNo; + } + } diff --git a/src/main/java/com/spring/modules/base/vo/WorkCenterCostVo.java b/src/main/java/com/spring/modules/base/vo/WorkCenterCostVo.java new file mode 100644 index 00000000..a6aa8c8c --- /dev/null +++ b/src/main/java/com/spring/modules/base/vo/WorkCenterCostVo.java @@ -0,0 +1,9 @@ +package com.spring.modules.base.vo; + +import com.spring.modules.base.entity.WorkCenterCost; +import lombok.Data; + +@Data +public class WorkCenterCostVo extends WorkCenterCost { + private String siteCon; +} diff --git a/src/main/java/com/spring/modules/part/mapper/RoutingManagementMapper.java b/src/main/java/com/spring/modules/part/mapper/RoutingManagementMapper.java index a78abf54..445e5568 100644 --- a/src/main/java/com/spring/modules/part/mapper/RoutingManagementMapper.java +++ b/src/main/java/com/spring/modules/part/mapper/RoutingManagementMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.spring.modules.base.entity.PersonnelLevel; +import com.spring.modules.base.entity.WorkCenterCost; import com.spring.modules.part.entity.*; import com.spring.modules.part.entity.APIEntity.RoutingIfsGuideLine; import com.spring.modules.part.entity.APIEntity.RoutingIfsHeader; @@ -206,4 +207,12 @@ public interface RoutingManagementMapper extends BaseMapper List selectRoutingGuidelineByPartNo(@Param("site") String site, @Param("partNo") String partNo); IPage queryToolList(Page toolHeaderPage, @Param("query") ToolHeader data); + + String getMaxWorkCenterCostRowVersion(); + + List getPLMWorkCenterCosts(@Param("arr") String[] arr); + + void syncSaveWorkCenterCost(List subList); + + void syncUpdateWorkCenterCost(List subList); } diff --git a/src/main/java/com/spring/modules/part/service/RoutingManagementService.java b/src/main/java/com/spring/modules/part/service/RoutingManagementService.java index cbd6db3d..c62d9f4f 100644 --- a/src/main/java/com/spring/modules/part/service/RoutingManagementService.java +++ b/src/main/java/com/spring/modules/part/service/RoutingManagementService.java @@ -2,6 +2,7 @@ package com.spring.modules.part.service; import com.spring.common.utils.PageUtils; import com.spring.modules.base.vo.PersonnelLevelVo; +import com.spring.modules.base.vo.WorkCenterCostVo; import com.spring.modules.part.entity.*; import com.spring.modules.part.vo.*; @@ -77,4 +78,6 @@ public interface RoutingManagementService { PageUtils queryPartListRouting(PartInformationEntity data); PageUtils queryToolList(ToolHeader data); + + void syncWorkCenterCostToPLM(WorkCenterCostVo workCenterCostVo); } diff --git a/src/main/java/com/spring/modules/part/service/impl/RoutingManagementServiceImpl.java b/src/main/java/com/spring/modules/part/service/impl/RoutingManagementServiceImpl.java index 75848007..0f7e3fd6 100644 --- a/src/main/java/com/spring/modules/part/service/impl/RoutingManagementServiceImpl.java +++ b/src/main/java/com/spring/modules/part/service/impl/RoutingManagementServiceImpl.java @@ -11,12 +11,15 @@ import com.spring.common.utils.PageUtils; import com.spring.ifs.api.IfsServer; import com.spring.ifs.bean.BaseSearchBean; import com.spring.ifs.bean.RoutingServiceBean; +import com.spring.ifs.data.BaseSearchData; import com.spring.ifs.data.PartCatalog; import com.spring.modules.base.entity.PersonnelLevel; +import com.spring.modules.base.entity.WorkCenterCost; import com.spring.modules.base.utils.DataUtils; import com.spring.modules.base.utils.HttpClientUtil; import com.spring.modules.base.utils.ResponseData; import com.spring.modules.base.vo.PersonnelLevelVo; +import com.spring.modules.base.vo.WorkCenterCostVo; import com.spring.modules.part.entity.*; import com.spring.modules.part.entity.APIEntity.*; import com.spring.modules.part.mapper.BomManagementMapper; @@ -1495,7 +1498,7 @@ public class RoutingManagementServiceImpl extends ServiceImpl ifsWorkCenterCosts; + try { + ifsWorkCenterCosts = baseSearchBean.getWorkCenterCosts(srv, baseSearchData); + } catch (APException e) { + throw new RuntimeException(e.getMessage()); + } + + // 查询PLM数据 + String[] arr = data.getSiteCon().replace("(", "").replace(")", "").replace("'", "").split(","); + List plmWorkCenterCosts = routingManagementMapper.getPLMWorkCenterCosts(arr); + + // 转换列表为映射以便于比较 + Map mapListAll = ifsWorkCenterCosts.stream() + .collect(Collectors.toMap(WorkCenterCost::getKey, Function.identity())); + Map mapList1 = plmWorkCenterCosts.stream() + .collect(Collectors.toMap(WorkCenterCost::getKey, Function.identity())); + + // 找出需要新增的对象(IFS有而PLM没有的) + Set keysToAdd = new HashSet<>(mapListAll.keySet()); + keysToAdd.removeAll(mapList1.keySet()); + List toAdd = keysToAdd.stream() + .map(mapListAll::get) + .collect(Collectors.toList()); + + // 找出需要更新的对象(ifsRowVersion不同) + Set commonKeys = new HashSet<>(mapListAll.keySet()); + commonKeys.retainAll(mapList1.keySet()); + List toUpdate = commonKeys.stream() + .filter(key -> !mapListAll.get(key).getIfsRowVersion().equals(mapList1.get(key).getIfsRowVersion())) + .map(key -> mapListAll.get(key)) // 选择listAll中的版本进行更新 + .collect(Collectors.toList()); + + // 新增 + if (!toAdd.isEmpty()) { + // 分批插入 + int batchSize = 50; // 假设每批100条记录 + for (int i = 0; i < toAdd.size(); i += batchSize) { + int end = Math.min(i + batchSize, toAdd.size()); + List subList = toAdd.subList(i, end); + routingManagementMapper.syncSaveWorkCenterCost(subList); + } + } + // 修改 + if (!toUpdate.isEmpty()) { + // 分批修改 + int batchSize = 50; // 假设每批100条记录 + for (int i = 0; i < toUpdate.size(); i += batchSize) { + int end = Math.min(i + batchSize, toUpdate.size()); + List subList = toUpdate.subList(i, end); + routingManagementMapper.syncUpdateWorkCenterCost(subList); + } + } + } + @Override public PageUtils queryPartListRouting(PartInformationEntity data) { IPage list = this.routingManagementMapper.queryPartListRouting(new Page(data.getPage(), data.getLimit()), data); diff --git a/src/main/java/com/spring/modules/part/task/PartRelatedTask.java b/src/main/java/com/spring/modules/part/task/PartRelatedTask.java index aa3002c4..c74d27d1 100644 --- a/src/main/java/com/spring/modules/part/task/PartRelatedTask.java +++ b/src/main/java/com/spring/modules/part/task/PartRelatedTask.java @@ -2,6 +2,7 @@ package com.spring.modules.part.task; import com.spring.common.utils.DateUtils; import com.spring.modules.base.vo.PersonnelLevelVo; +import com.spring.modules.base.vo.WorkCenterCostVo; import com.spring.modules.part.service.PartInformationService; import com.spring.modules.part.service.PartService; import com.spring.modules.part.service.RoutingManagementService; @@ -50,10 +51,10 @@ public class PartRelatedTask { WorkCenterVo workCenterVo = new WorkCenterVo(); workCenterVo.setSiteCon(siteCon); routingManagementService.syncWorkCenterToPLM(workCenterVo); - // 同步unitValue -// InventoryPartUnitCostSumVo unitCostVo = new InventoryPartUnitCostSumVo(); -// unitCostVo.setSiteCon(siteCon); -// partInformationService.syncUnitValueToPLM(unitCostVo); + // 同步加工中心成本 + WorkCenterCostVo workCenterCostVo = new WorkCenterCostVo(); + workCenterCostVo.setSiteCon(siteCon); + routingManagementService.syncWorkCenterCostToPLM(workCenterCostVo); } diff --git a/src/main/resources/mapper/part/RoutingManagementMapper.xml b/src/main/resources/mapper/part/RoutingManagementMapper.xml index 6469f716..d9eed72d 100644 --- a/src/main/resources/mapper/part/RoutingManagementMapper.xml +++ b/src/main/resources/mapper/part/RoutingManagementMapper.xml @@ -1450,26 +1450,172 @@ AND site = #{list[0].site} - - - - - - - - - - - - - - - - - - - - + + + + + + INSERT INTO work_center_cost (site, work_center_no, item_no, unit_cost, overhead1_cost, overhead2_cost, um_id, begin_date, end_date, remark, + current_work_center_cost, ifs_row_id, ifs_row_version, cost_set, cost_set_desc, wc_rate, wc_cost_code, overhead1_fac, overhead2_fac, overhead1_appl, overhead2_appl) + VALUES + + (#{item.site}, #{item.workCenterNo}, #{item.itemNo,jdbcType=FLOAT}, #{item.unitCost,jdbcType=FLOAT}, #{item.overhead1Cost,jdbcType=FLOAT}, #{item.overhead2Cost,jdbcType=FLOAT}, #{item.umId}, #{item.beginDate}, #{item.endDate}, #{item.remark}, + #{item.currentWorkCenterCost,jdbcType=DECIMAL}, #{item.ifsRowId}, #{item.ifsRowVersion}, #{item.costSet}, #{item.costSetDesc}, #{item.wcRate}, #{item.wcCostCode}, #{item.overhead1Fac}, #{item.overhead2Fac}, #{item.overhead1Appl}, #{item.overhead2Appl}) + + + + + + UPDATE work_center_cost + SET + item_no = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.itemNo,jdbcType=FLOAT} + + ELSE item_no + END, + unit_cost = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.unitCost,jdbcType=FLOAT} + + ELSE unit_cost + END, + overhead1_cost = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.overhead1Cost,jdbcType=FLOAT} + + ELSE overhead1_cost + END, + overhead2_cost = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.overhead2Cost,jdbcType=FLOAT} + + ELSE overhead2_cost + END, + um_id = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.umId} + + ELSE um_id + END, + begin_date = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.beginDate} + + ELSE begin_date + END, + end_date = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.endDate} + + ELSE end_date + END, + remark = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.remark} + + ELSE remark + END, + current_work_center_cost = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.currentWorkCenterCost} + + ELSE current_work_center_cost + END, + ifs_row_id = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.ifsRowId} + + ELSE ifs_row_id + END, + ifs_row_version = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.ifsRowVersion} + + ELSE ifs_row_version + END, + cost_set = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.costSet} + + ELSE cost_set + END, + cost_set_desc = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.costSetDesc} + + ELSE cost_set_desc + END, + wc_rate = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.wcRate} + + ELSE wc_rate + END, + wc_cost_code = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.wcCostCode} + + ELSE wc_cost_code + END, + overhead1_fac = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.overhead1Fac} + + ELSE overhead1_fac + END, + overhead2_fac = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.overhead2Fac} + + ELSE overhead2_fac + END, + overhead1_appl = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.overhead1Appl} + + ELSE overhead1_appl + END, + overhead2_appl = CASE work_center_no + + WHEN #{item.workCenterNo} THEN #{item.overhead2Appl} + + ELSE overhead2_appl + END + WHERE work_center_no IN + + #{item.workCenterNo} + + AND site = #{list[0].site} + + +