Browse Source

2025-02-11

增加work_center_cost接口
master
fengyuan_yang 1 year ago
parent
commit
73cee78f7f
  1. 4
      src/main/java/com/spring/modules/base/entity/WorkCenterCost.java
  2. 9
      src/main/java/com/spring/modules/base/vo/WorkCenterCostVo.java
  3. 9
      src/main/java/com/spring/modules/part/mapper/RoutingManagementMapper.java
  4. 3
      src/main/java/com/spring/modules/part/service/RoutingManagementService.java
  5. 74
      src/main/java/com/spring/modules/part/service/impl/RoutingManagementServiceImpl.java
  6. 9
      src/main/java/com/spring/modules/part/task/PartRelatedTask.java
  7. 192
      src/main/resources/mapper/part/RoutingManagementMapper.xml

4
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;
}
}

9
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;
}

9
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<RoutingHeaderEntity>
List<WorkGuidelineEntity> selectRoutingGuidelineByPartNo(@Param("site") String site, @Param("partNo") String partNo);
IPage<ToolHeader> queryToolList(Page<ToolHeader> toolHeaderPage, @Param("query") ToolHeader data);
String getMaxWorkCenterCostRowVersion();
List<WorkCenterCost> getPLMWorkCenterCosts(@Param("arr") String[] arr);
void syncSaveWorkCenterCost(List<WorkCenterCost> subList);
void syncUpdateWorkCenterCost(List<WorkCenterCost> subList);
}

3
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);
}

74
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<RoutingManagementM
}
/**
* 同步人员等级到PLM
* 同步加工中心到PLM
*/
@Override
@Transactional
@ -1577,6 +1580,75 @@ public class RoutingManagementServiceImpl extends ServiceImpl<RoutingManagementM
}
}
/**
* 同步加工中心成本到PLM
*/
@Override
@Transactional
public void syncWorkCenterCostToPLM(WorkCenterCostVo data) {
// 查出最大的 rowVersion
String rowVersion = routingManagementMapper.getMaxWorkCenterCostRowVersion();
data.setIfsRowVersion(rowVersion);
// 调用接口获得IFS数据
// 获取连接
Server srv = ifsServer.getIfsServer(ifsUsername, ifsPassword);
BaseSearchData baseSearchData = new BaseSearchData();
baseSearchData.setSiteCon(data.getSiteCon());
baseSearchData.setIfsRowVersion(data.getIfsRowVersion());
List<WorkCenterCost> 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<WorkCenterCost> plmWorkCenterCosts = routingManagementMapper.getPLMWorkCenterCosts(arr);
// 转换列表为映射以便于比较
Map<String, WorkCenterCost> mapListAll = ifsWorkCenterCosts.stream()
.collect(Collectors.toMap(WorkCenterCost::getKey, Function.identity()));
Map<String, WorkCenterCost> mapList1 = plmWorkCenterCosts.stream()
.collect(Collectors.toMap(WorkCenterCost::getKey, Function.identity()));
// 找出需要新增的对象IFS有而PLM没有的
Set<String> keysToAdd = new HashSet<>(mapListAll.keySet());
keysToAdd.removeAll(mapList1.keySet());
List<WorkCenterCost> toAdd = keysToAdd.stream()
.map(mapListAll::get)
.collect(Collectors.toList());
// 找出需要更新的对象ifsRowVersion不同
Set<String> commonKeys = new HashSet<>(mapListAll.keySet());
commonKeys.retainAll(mapList1.keySet());
List<WorkCenterCost> 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<WorkCenterCost> 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<WorkCenterCost> subList = toUpdate.subList(i, end);
routingManagementMapper.syncUpdateWorkCenterCost(subList);
}
}
}
@Override
public PageUtils queryPartListRouting(PartInformationEntity data) {
IPage<RoutingAllFieldEntity> list = this.routingManagementMapper.queryPartListRouting(new Page<PartInformationEntity>(data.getPage(), data.getLimit()), data);

9
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);
}

192
src/main/resources/mapper/part/RoutingManagementMapper.xml

@ -1450,26 +1450,172 @@
</foreach>
AND site = #{list[0].site}
</update>
<!-- &lt;!&ndash; 批量更新 &ndash;&gt;-->
<!-- <update id="syncUpdateWorkCenter" parameterType="WorkCenter">-->
<!-- UPDATE work_center SET-->
<!-- work_center_desc = #{workCenterDesc},-->
<!-- work_center_type_db = #{workCenterTypeDB},-->
<!-- work_center_type = #{workCenterType},-->
<!-- average_capacity = #{averageCapacity,jdbcType=DECIMAL},-->
<!-- efficiency = #{efficiency,jdbcType=DECIMAL},-->
<!-- utilization = #{utilization,jdbcType=DECIMAL},-->
<!-- capacity_type_db = #{capacityTypeDB},-->
<!-- capacity_type = #{capacityType},-->
<!-- um_id = #{umId},-->
<!-- active = #{active},-->
<!-- remark = #{remark},-->
<!-- pro_line_no = #{proLineNo},-->
<!-- can_create_new_roll_flag = #{canCreateNewRollFlag},-->
<!-- need_setup_flag = #{needSetupFlag},-->
<!-- ifs_row_version = #{ifsRowVersion}-->
<!-- WHERE work_center_no = #{workCenterNo} AND site = #{site}-->
<!-- </update>-->
<select id="getPLMWorkCenterCosts" resultType="WorkCenterCost">
select
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
from work_center_cost
where site in
<foreach collection="arr" close=")" open="(" item="item" separator=",">
#{item}
</foreach>
</select>
<!-- 批量新增 -->
<insert id="syncSaveWorkCenterCost">
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
<foreach item="item" collection="list" separator=",">
(#{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})
</foreach>
</insert>
<!-- 批量更新 -->
<update id="syncUpdateWorkCenterCost" parameterType="java.util.List">
UPDATE work_center_cost
SET
item_no = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.itemNo,jdbcType=FLOAT}
</foreach>
ELSE item_no
END,
unit_cost = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.unitCost,jdbcType=FLOAT}
</foreach>
ELSE unit_cost
END,
overhead1_cost = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.overhead1Cost,jdbcType=FLOAT}
</foreach>
ELSE overhead1_cost
END,
overhead2_cost = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.overhead2Cost,jdbcType=FLOAT}
</foreach>
ELSE overhead2_cost
END,
um_id = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.umId}
</foreach>
ELSE um_id
END,
begin_date = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.beginDate}
</foreach>
ELSE begin_date
END,
end_date = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.endDate}
</foreach>
ELSE end_date
END,
remark = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.remark}
</foreach>
ELSE remark
END,
current_work_center_cost = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.currentWorkCenterCost}
</foreach>
ELSE current_work_center_cost
END,
ifs_row_id = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.ifsRowId}
</foreach>
ELSE ifs_row_id
END,
ifs_row_version = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.ifsRowVersion}
</foreach>
ELSE ifs_row_version
END,
cost_set = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.costSet}
</foreach>
ELSE cost_set
END,
cost_set_desc = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.costSetDesc}
</foreach>
ELSE cost_set_desc
END,
wc_rate = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.wcRate}
</foreach>
ELSE wc_rate
END,
wc_cost_code = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.wcCostCode}
</foreach>
ELSE wc_cost_code
END,
overhead1_fac = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.overhead1Fac}
</foreach>
ELSE overhead1_fac
END,
overhead2_fac = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.overhead2Fac}
</foreach>
ELSE overhead2_fac
END,
overhead1_appl = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.overhead1Appl}
</foreach>
ELSE overhead1_appl
END,
overhead2_appl = CASE work_center_no
<foreach item="item" index="index" collection="list" open="" close="" separator=" ">
WHEN #{item.workCenterNo} THEN #{item.overhead2Appl}
</foreach>
ELSE overhead2_appl
END
WHERE work_center_no IN
<foreach item="item" index="index" collection="list" open="(" close=")" separator=",">
#{item.workCenterNo}
</foreach>
AND site = #{list[0].site}
</update>
<select id="getRoutingComponentRowKeyAndVersion" resultType="RoutingComponentEntity">
select
@ -1505,6 +1651,12 @@
from work_center
</select>
<select id="getMaxWorkCenterCostRowVersion" resultType="java.lang.String">
select
isnull(max(ifs_row_version),'')
from work_center_cost
</select>
<select id="selectRoutingHeaderByPartNo" resultType="com.spring.modules.part.vo.RoutingHeaderVo">
SELECT
site,

Loading…
Cancel
Save