fix(成本分析): 修复计算成本时获取物料工时报错的问题

This commit is contained in:
曹鹏飞 2024-12-31 09:25:46 +08:00
parent b529f93800
commit 41303ff3b8
6 changed files with 44 additions and 50 deletions

View File

@ -1,11 +1,10 @@
package com.nflg.product.technology.mapper.master; package com.nflg.product.technology.mapper.master;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.product.technology.pojo.dto.WorkingHourDTO;
import com.nflg.product.technology.pojo.entity.ProcessRouteTaskProcessesEntity; import com.nflg.product.technology.pojo.entity.ProcessRouteTaskProcessesEntity;
import java.math.BigDecimal; import java.util.List;
import java.util.Map;
import java.util.Set;
/** /**
* <p> * <p>
@ -17,7 +16,5 @@ import java.util.Set;
*/ */
public interface ProcessRouteTaskProcessesMapper extends BaseMapper<ProcessRouteTaskProcessesEntity> { public interface ProcessRouteTaskProcessesMapper extends BaseMapper<ProcessRouteTaskProcessesEntity> {
Map<String, BigDecimal> getWorkingHours(Set<String> materialNos); List<WorkingHourDTO> getWorkingHour(String materialNo);
Map<String, BigDecimal> getWorkingHour(String materialNo);
} }

View File

@ -0,0 +1,13 @@
package com.nflg.product.technology.pojo.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class WorkingHourDTO {
private String materialWork;
private BigDecimal workHours = BigDecimal.ZERO;
}

View File

@ -8,6 +8,7 @@ import com.nflg.product.technology.pojo.BomCostCalculateConfig;
import com.nflg.product.technology.pojo.dto.EBomCostCacheDTO; import com.nflg.product.technology.pojo.dto.EBomCostCacheDTO;
import com.nflg.product.technology.pojo.dto.EBomDTO; import com.nflg.product.technology.pojo.dto.EBomDTO;
import com.nflg.product.technology.pojo.dto.ProductionCostDTO; import com.nflg.product.technology.pojo.dto.ProductionCostDTO;
import com.nflg.product.technology.pojo.dto.WorkingHourDTO;
import com.nflg.product.technology.pojo.entity.EBomChildEntity; import com.nflg.product.technology.pojo.entity.EBomChildEntity;
import com.nflg.product.technology.pojo.entity.EBomParentEntity; import com.nflg.product.technology.pojo.entity.EBomParentEntity;
import com.nflg.product.technology.pojo.entity.PaintCostConfigEntity; import com.nflg.product.technology.pojo.entity.PaintCostConfigEntity;
@ -93,7 +94,7 @@ public class BomCostCalculateService {
.filter(d -> StrUtil.equals(d.getParentMaterialNo(), dto.getMaterialNo())) .filter(d -> StrUtil.equals(d.getParentMaterialNo(), dto.getMaterialNo()))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (StrUtil.isBlank(cdata)) { if (StrUtil.isBlank(cdata)) {
Map<String, BigDecimal> workingHours = processRouteTaskProcessesService.getWorkingHour(dto.getMaterialNo()); List<WorkingHourDTO> workingHours = processRouteTaskProcessesService.getWorkingHour(dto.getMaterialNo());
EBomCostCacheDTO cdto = new EBomCostCacheDTO(); EBomCostCacheDTO cdto = new EBomCostCacheDTO();
cdto.setMaterialNo(dto.getMaterialNo()); cdto.setMaterialNo(dto.getMaterialNo());
cdto.setCategoryCode(dto.getMaterialCategoryCode()); cdto.setCategoryCode(dto.getMaterialCategoryCode());
@ -171,7 +172,7 @@ public class BomCostCalculateService {
} }
} }
private List<ProductionCostDTO> calculateProductionCosts(EBomDTO d, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private List<ProductionCostDTO> calculateProductionCosts(EBomDTO d, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
List<ProductionCostDTO> productionCosts = new ArrayList<>(); List<ProductionCostDTO> productionCosts = new ArrayList<>();
BigDecimal hourlyWages; BigDecimal hourlyWages;
BigDecimal benefit; BigDecimal benefit;
@ -210,7 +211,7 @@ public class BomCostCalculateService {
} }
} }
private BigDecimal calculateWorkshopOfficeExpenses(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal calculateWorkshopOfficeExpenses(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
BigDecimal cost = BigDecimal.ZERO; BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) { for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getWorkshopOfficeFee().multiply(getGsForWorkingType(dto, workHours, vw))); cost = cost.add(vw.getWorkshopOfficeFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@ -218,7 +219,7 @@ public class BomCostCalculateService {
return cost; return cost;
} }
private BigDecimal calculateAuxiliaryDepartmentExpenses(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal calculateAuxiliaryDepartmentExpenses(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
BigDecimal cost = BigDecimal.ZERO; BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) { for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getAssistantFee().multiply(getGsForWorkingType(dto, workHours, vw))); cost = cost.add(vw.getAssistantFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@ -226,7 +227,7 @@ public class BomCostCalculateService {
return cost; return cost;
} }
private BigDecimal calculateAuxiliaryDepartmentLaborCost(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal calculateAuxiliaryDepartmentLaborCost(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
BigDecimal cost = BigDecimal.ZERO; BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) { for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getAssistantLaborFee().multiply(getGsForWorkingType(dto, workHours, vw))); cost = cost.add(vw.getAssistantLaborFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@ -234,7 +235,7 @@ public class BomCostCalculateService {
return cost; return cost;
} }
private BigDecimal calculateWorkshopManagementLaborCost(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal calculateWorkshopManagementLaborCost(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
BigDecimal cost = BigDecimal.ZERO; BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) { for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getWorkshopLaborFee().multiply(getGsForWorkingType(dto, workHours, vw))); cost = cost.add(vw.getWorkshopLaborFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@ -242,7 +243,7 @@ public class BomCostCalculateService {
return cost; return cost;
} }
private BigDecimal calculateDepreciationCost(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal calculateDepreciationCost(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
BigDecimal cost = BigDecimal.ZERO; BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) { for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getEquipmentDepreciationFee().multiply(getGsForWorkingType(dto, workHours, vw))); cost = cost.add(vw.getEquipmentDepreciationFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@ -250,7 +251,7 @@ public class BomCostCalculateService {
return cost; return cost;
} }
private BigDecimal calculateHydropowerCost(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal calculateHydropowerCost(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
BigDecimal cost = BigDecimal.ZERO; BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) { for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getConsumablesFee().multiply(getGsForWorkingType(dto, workHours, vw))); cost = cost.add(vw.getConsumablesFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@ -258,19 +259,24 @@ public class BomCostCalculateService {
return cost; return cost;
} }
private BigDecimal getGsForWorkingType(EBomDTO dto, Map<String, BigDecimal> workHours, VirtualWorkingItemVO vw) { private BigDecimal getGsForWorkingType(EBomDTO dto, List<WorkingHourDTO> workHours, VirtualWorkingItemVO vw) {
return workHours.getOrDefault(dto.getMaterialNo() + '-' + vw.getWorkingTypeName(), BigDecimal.ZERO); String key = dto.getMaterialNo() + '-' + StrUtil.trim(vw.getWorkingTypeName());
return workHours.stream()
.filter(wh -> wh.getMaterialWork().equals(key))
.findFirst()
.orElse(new WorkingHourDTO())
.getWorkHours();
} }
private BigDecimal calculateWelfareExpenses(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal calculateWelfareExpenses(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
return getTGS(dto, config, workHours).multiply(Optional.ofNullable(config.getManday().getBenefit()).orElse(BigDecimal.ZERO)); return getTGS(dto, config, workHours).multiply(Optional.ofNullable(config.getManday().getBenefit()).orElse(BigDecimal.ZERO));
} }
private BigDecimal calculatePieceRateSalary(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal calculatePieceRateSalary(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
return getTGS(dto, config, workHours).multiply(Optional.ofNullable(config.getManday().getHourlyWages()).orElse(BigDecimal.ZERO)); return getTGS(dto, config, workHours).multiply(Optional.ofNullable(config.getManday().getHourlyWages()).orElse(BigDecimal.ZERO));
} }
private BigDecimal getTGS(EBomDTO dto, BomCostCalculateConfig config, Map<String, BigDecimal> workHours) { private BigDecimal getTGS(EBomDTO dto, BomCostCalculateConfig config, List<WorkingHourDTO> workHours) {
BigDecimal gs = BigDecimal.ZERO; BigDecimal gs = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) { for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
gs = gs.add(getGsForWorkingType(dto, workHours, vw)); gs = gs.add(getGsForWorkingType(dto, workHours, vw));

View File

@ -2,14 +2,13 @@ package com.nflg.product.technology.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.product.technology.mapper.master.ProcessRouteTaskProcessesMapper; import com.nflg.product.technology.mapper.master.ProcessRouteTaskProcessesMapper;
import com.nflg.product.technology.pojo.dto.WorkingHourDTO;
import com.nflg.product.technology.pojo.entity.ProcessRouteTaskProcessesEntity; import com.nflg.product.technology.pojo.entity.ProcessRouteTaskProcessesEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.util.Collections;
import java.util.HashMap; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
/** /**
* <p> * <p>
@ -22,11 +21,7 @@ import java.util.Set;
@Service @Service
public class ProcessRouteTaskProcessesService extends ServiceImpl<ProcessRouteTaskProcessesMapper, ProcessRouteTaskProcessesEntity> { public class ProcessRouteTaskProcessesService extends ServiceImpl<ProcessRouteTaskProcessesMapper, ProcessRouteTaskProcessesEntity> {
public Map<String, BigDecimal> getWorkingHours(Set<String> materialNos) { public List<WorkingHourDTO> getWorkingHour(String materialNo) {
return Optional.ofNullable(this.baseMapper.getWorkingHours(materialNos)).orElse(new HashMap<>()); return Optional.ofNullable(this.baseMapper.getWorkingHour(materialNo)).orElse(Collections.emptyList());
}
public Map<String, BigDecimal> getWorkingHour(String materialNo) {
return Optional.ofNullable(this.baseMapper.getWorkingHour(materialNo)).orElse(new HashMap<>());
} }
} }

View File

@ -2,7 +2,7 @@ nacos:
server-addr: 192.168.0.194:8848 server-addr: 192.168.0.194:8848
spring: spring:
redis: redis:
database: 2 database: 3
host: 192.168.0.194 host: 192.168.0.194
password: password:
port: 6379 port: 6379
@ -11,8 +11,8 @@ spring:
lettuce: lettuce:
pool: pool:
max-wait: -1ms max-wait: -1ms
max-active: 8 max-active: 100
max-idle: 8 max-idle: 100
min-idle: 0 min-idle: 0
logging: logging:
config: classpath:logback-sit.xml config: classpath:logback-sit.xml

View File

@ -2,24 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.product.technology.mapper.master.ProcessRouteTaskProcessesMapper"> <mapper namespace="com.nflg.product.technology.mapper.master.ProcessRouteTaskProcessesMapper">
<select id="getWorkingHours" resultType="java.util.Map"> <select id="getWorkingHour" resultType="com.nflg.product.technology.pojo.dto.WorkingHourDTO">
SELECT
CONCAT_WS('-',rt.material_no,t.`name`) AS 'material_work',
SUM(IFNULL(r.two_work_hours, 0)) work_hours
FROM
t_technology_working_type t
INNER JOIN t_process_workcenter w ON w.working_type = t.`code`
INNER JOIN t_process_route_task_processes r ON r.work_center = w.work_center
INNER JOIN t_process_route_task rt ON r.task_row_id = rt.row_id
WHERE
rt.material_no IN
<foreach collection="materialNos" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
GROUP BY
rt.material_no,t.`name`
</select>
<select id="getWorkingHour" resultType="java.util.Map">
SELECT CONCAT_WS('-', rt.material_no, t.`name`) AS 'material_work', SELECT CONCAT_WS('-', rt.material_no, t.`name`) AS 'material_work',
SUM(IFNULL(r.two_work_hours, 0)) work_hours SUM(IFNULL(r.two_work_hours, 0)) work_hours
FROM t_technology_working_type t FROM t_technology_working_type t