diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/mapper/master/ProcessRouteTaskProcessesMapper.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/mapper/master/ProcessRouteTaskProcessesMapper.java
index 52321022..688e442d 100644
--- a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/mapper/master/ProcessRouteTaskProcessesMapper.java
+++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/mapper/master/ProcessRouteTaskProcessesMapper.java
@@ -1,13 +1,11 @@
package com.nflg.product.technology.mapper.master;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.product.technology.pojo.dto.WorkingHourDTO;
import com.nflg.product.technology.pojo.entity.ProcessRouteTaskProcessesEntity;
import org.apache.ibatis.annotations.Param;
import java.util.List;
-import java.math.BigDecimal;
-import java.util.Map;
-import java.util.Set;
/**
*
@@ -18,10 +16,7 @@ import java.util.Set;
* @since 2024-11-24
*/
public interface ProcessRouteTaskProcessesMapper extends BaseMapper {
-
void deleteBatchByIdList(@Param("rowIdList") List rowIdList);
- Map getWorkingHours(Set materialNos);
-
- Map getWorkingHour(String materialNo);
+ List getWorkingHour(String materialNo);
}
diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/dto/EBomDTO.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/dto/EBomDTO.java
index 80377d9d..eaa21d50 100644
--- a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/dto/EBomDTO.java
+++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/dto/EBomDTO.java
@@ -27,11 +27,6 @@ public class EBomDTO {
*/
private String materialUnit;
- /**
- * 单重
- */
- private BigDecimal unitWeight;
-
/**
* 最近采购价格
*/
diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/dto/WorkingHourDTO.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/dto/WorkingHourDTO.java
new file mode 100644
index 00000000..8b9c5cde
--- /dev/null
+++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/dto/WorkingHourDTO.java
@@ -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;
+}
diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/entity/EBomChildEntity.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/entity/EBomChildEntity.java
index 3fa683c9..22efd98b 100644
--- a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/entity/EBomChildEntity.java
+++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/entity/EBomChildEntity.java
@@ -78,12 +78,12 @@ public class EBomChildEntity implements Serializable {
// @ApiModelProperty(value = "物料分类编码")
// private String materialCategoryCode;
- /**
- * 单重
- */
- @TableField(value = "unit_weight")
- @ApiModelProperty(value = "单重")
- private BigDecimal unitWeight;
+ ///**
+ // * 单重
+ // */
+ //@TableField(value = "unit_weight")
+ //@ApiModelProperty(value = "单重")
+ //private BigDecimal unitWeight;
/**
* 数量
diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/HighValuePurchasedPartsVO.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/HighValuePurchasedPartsVO.java
index cd91ed10..aa32e9b0 100644
--- a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/HighValuePurchasedPartsVO.java
+++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/HighValuePurchasedPartsVO.java
@@ -1,5 +1,8 @@
package com.nflg.product.technology.pojo.vo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.nflg.product.base.core.config.BigDecimalSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -21,6 +24,8 @@ import java.util.List;
public class HighValuePurchasedPartsVO implements Serializable {
@ApiModelProperty("总金额")
+ @JsonFormat(pattern = "#.##")
+ @JsonSerialize(using = BigDecimalSerializer.class)
private BigDecimal totalCost = BigDecimal.ZERO;
@ApiModelProperty("物料列表")
diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/BomCostCalculateService.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/BomCostCalculateService.java
index 7fe28e07..fc103dab 100644
--- a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/BomCostCalculateService.java
+++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/BomCostCalculateService.java
@@ -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.EBomDTO;
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.EBomParentEntity;
import com.nflg.product.technology.pojo.entity.PaintCostConfigEntity;
@@ -93,7 +94,7 @@ public class BomCostCalculateService {
.filter(d -> StrUtil.equals(d.getParentMaterialNo(), dto.getMaterialNo()))
.collect(Collectors.toList());
if (StrUtil.isBlank(cdata)) {
- Map workingHours = processRouteTaskProcessesService.getWorkingHour(dto.getMaterialNo());
+ List workingHours = processRouteTaskProcessesService.getWorkingHour(dto.getMaterialNo());
EBomCostCacheDTO cdto = new EBomCostCacheDTO();
cdto.setMaterialNo(dto.getMaterialNo());
cdto.setCategoryCode(dto.getMaterialCategoryCode());
@@ -171,7 +172,7 @@ public class BomCostCalculateService {
}
}
- private List calculateProductionCosts(EBomDTO d, BomCostCalculateConfig config, Map workHours) {
+ private List calculateProductionCosts(EBomDTO d, BomCostCalculateConfig config, List workHours) {
List productionCosts = new ArrayList<>();
BigDecimal hourlyWages;
BigDecimal benefit;
@@ -204,13 +205,13 @@ public class BomCostCalculateService {
private BigDecimal calculatePaintCost(EBomDTO dto) {
PaintCostConfigEntity entity = paintCostConfigService.getCost(dto.getGroupName());
if (Objects.nonNull(entity)) {
- return NumberUtil.mul(dto.getUnitWeight(), entity.getCost());
+ return NumberUtil.mul(dto.getNum(), entity.getCost());
} else {
return BigDecimal.ZERO;
}
}
- private BigDecimal calculateWorkshopOfficeExpenses(EBomDTO dto, BomCostCalculateConfig config, Map workHours) {
+ private BigDecimal calculateWorkshopOfficeExpenses(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getWorkshopOfficeFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@@ -218,7 +219,7 @@ public class BomCostCalculateService {
return cost;
}
- private BigDecimal calculateAuxiliaryDepartmentExpenses(EBomDTO dto, BomCostCalculateConfig config, Map workHours) {
+ private BigDecimal calculateAuxiliaryDepartmentExpenses(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getAssistantFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@@ -226,7 +227,7 @@ public class BomCostCalculateService {
return cost;
}
- private BigDecimal calculateAuxiliaryDepartmentLaborCost(EBomDTO dto, BomCostCalculateConfig config, Map workHours) {
+ private BigDecimal calculateAuxiliaryDepartmentLaborCost(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getAssistantLaborFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@@ -234,7 +235,7 @@ public class BomCostCalculateService {
return cost;
}
- private BigDecimal calculateWorkshopManagementLaborCost(EBomDTO dto, BomCostCalculateConfig config, Map workHours) {
+ private BigDecimal calculateWorkshopManagementLaborCost(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getWorkshopLaborFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@@ -242,7 +243,7 @@ public class BomCostCalculateService {
return cost;
}
- private BigDecimal calculateDepreciationCost(EBomDTO dto, BomCostCalculateConfig config, Map workHours) {
+ private BigDecimal calculateDepreciationCost(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getEquipmentDepreciationFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@@ -250,7 +251,7 @@ public class BomCostCalculateService {
return cost;
}
- private BigDecimal calculateHydropowerCost(EBomDTO dto, BomCostCalculateConfig config, Map workHours) {
+ private BigDecimal calculateHydropowerCost(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
BigDecimal cost = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
cost = cost.add(vw.getConsumablesFee().multiply(getGsForWorkingType(dto, workHours, vw)));
@@ -258,19 +259,24 @@ public class BomCostCalculateService {
return cost;
}
- private BigDecimal getGsForWorkingType(EBomDTO dto, Map workHours, VirtualWorkingItemVO vw) {
- return workHours.getOrDefault(dto.getMaterialNo() + '-' + vw.getWorkingTypeName(), BigDecimal.ZERO);
+ private BigDecimal getGsForWorkingType(EBomDTO dto, List workHours, VirtualWorkingItemVO vw) {
+ 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 workHours) {
+ private BigDecimal calculateWelfareExpenses(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
return getTGS(dto, config, workHours).multiply(Optional.ofNullable(config.getManday().getBenefit()).orElse(BigDecimal.ZERO));
}
- private BigDecimal calculatePieceRateSalary(EBomDTO dto, BomCostCalculateConfig config, Map workHours) {
+ private BigDecimal calculatePieceRateSalary(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
return getTGS(dto, config, workHours).multiply(Optional.ofNullable(config.getManday().getHourlyWages()).orElse(BigDecimal.ZERO));
}
- private BigDecimal getTGS(EBomDTO dto, BomCostCalculateConfig config, Map workHours) {
+ private BigDecimal getTGS(EBomDTO dto, BomCostCalculateConfig config, List workHours) {
BigDecimal gs = BigDecimal.ZERO;
for (VirtualWorkingItemVO vw : config.getVirtualWorkings()) {
gs = gs.add(getGsForWorkingType(dto, workHours, vw));
@@ -285,7 +291,7 @@ public class BomCostCalculateService {
private BigDecimal calculateSteelsCost(EBomDTO dto) {
//是钢材
BigDecimal price = Optional.ofNullable(dto.getLastPurchasePrice()).orElse(BigDecimal.ZERO);
- BigDecimal unitWeight = Optional.ofNullable(dto.getUnitWeight()).orElse(BigDecimal.ZERO);
+ BigDecimal unitWeight = Optional.ofNullable(dto.getNum()).orElse(BigDecimal.ZERO);
BigDecimal wastage = BigDecimal.ZERO;
if (StrUtil.isNotBlank(dto.getGroupName())) {
SteelsCostConfigEntity steelsCostConfigEntity = steelsCostConfigService.getCost(dto.getGroupName());
diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/EBomService.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/EBomService.java
index 35df7528..25ea5697 100644
--- a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/EBomService.java
+++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/EBomService.java
@@ -6,15 +6,16 @@ import com.nflg.product.technology.pojo.entity.EBomChildEntity;
import com.nflg.product.technology.pojo.entity.EBomParentEntity;
import com.nflg.product.technology.util.JsonUtil;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.redis.core.BoundSetOperations;
+import org.springframework.dao.DataAccessException;
+import org.springframework.data.redis.core.BoundZSetOperations;
+import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.SessionCallback;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.Duration;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
import java.util.stream.Collectors;
@Component
@@ -70,7 +71,7 @@ public class EBomService {
public List getChildren(long parentRowId) {
String key = buildChildCacheKey(parentRowId);
- Set kvs = redisTemplate.opsForSet().members(key);
+ Set kvs = redisTemplate.opsForZSet().range(key, 0, -1);
List entities = null;
if (CollectionUtil.isEmpty(kvs)) {
entities = ebomChildService.lambdaQuery()
@@ -78,9 +79,19 @@ public class EBomService {
.orderByAsc(EBomChildEntity::getOrderNumber)
.list();
if (CollectionUtil.isNotEmpty(entities)) {
- BoundSetOperations boundSetOps = redisTemplate.boundSetOps(key);
- boundSetOps.add(entities.stream().map(JsonUtil::toJson).toArray(String[]::new));
- boundSetOps.expire(CACHE_DURATION_CHILD);
+ Map scoreMembers = new HashMap<>();
+ for (EBomChildEntity entity : entities) {
+ scoreMembers.put(JsonUtil.toJson(entity), Double.valueOf(entity.getOrderNumber()));
+ }
+ redisTemplate.executePipelined(new SessionCallback