fix(成本分析): 修复计算成本时获取物料工时报错的问题
This commit is contained in:
parent
b529f93800
commit
41303ff3b8
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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));
|
||||||
|
|
|
||||||
|
|
@ -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<>());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue