成本归集添加下料成本
This commit is contained in:
parent
e79578c238
commit
fb8af209a8
@ -205,11 +205,12 @@ public class ProjectOrderController {
|
||||
//材料成本
|
||||
BigDecimal materialCost;
|
||||
materialCost=processBomService.materialCost(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
projectOrderDO.setCailiaoCost(materialCost);
|
||||
|
||||
//内部工时费
|
||||
BigDecimal internalLaborCost;
|
||||
internalLaborCost=processBomService.internalLaborCost(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
projectOrderDO.setNeibuCost(internalLaborCost);
|
||||
projectOrderDO.setCailiaoCost(materialCost.add(outsourcedProcessingFee).add(internalLaborCost));
|
||||
//装配工时费
|
||||
BigDecimal assemblyLaborCost;
|
||||
assemblyLaborCost=processBomService.assemblyLaborCost(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
@ -220,7 +221,7 @@ public class ProjectOrderController {
|
||||
yunFeiCost = deliverOrderService.getListYf(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
projectOrderDO.setYunFeiCost(yunFeiCost);
|
||||
|
||||
BigDecimal sum = projectOrderDO.getYunFeiCost().add(projectOrderDO.getCailiaoCost()).add(projectOrderDO.getBiaoZhunJianCost()).add(projectOrderDO.getZpCost());
|
||||
BigDecimal sum = projectOrderDO.getYunFeiCost().add(projectOrderDO.getCailiaoCost()).add(projectOrderDO.getBiaoZhunJianCost()).add(projectOrderDO.getZpCost().add(projectOrderDO.getNeibuCost()).add(projectOrderDO.getWaixeiCost()));
|
||||
projectOrderDO.setSumCost(sum);
|
||||
}
|
||||
return success(BeanUtils.toBean(pageResult, ProjectOrderCostRespVO.class));
|
||||
|
||||
@ -274,12 +274,26 @@ public class TaskDispatchController {
|
||||
return success( list);
|
||||
}
|
||||
@GetMapping("/getListCl")
|
||||
@Operation(summary = "获得材料成本")
|
||||
@Operation(summary = "获得外部材料成本")
|
||||
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
|
||||
public CommonResult<List<TaskDispatchDO>> getListCl(@RequestParam("id") Long id, @RequestParam("projectSubId") Long projectSubId ) {
|
||||
List<TaskDispatchDO> list= taskDispatchService.getListCl(id,projectSubId);
|
||||
return success( list);
|
||||
}
|
||||
@GetMapping("/getListNg")
|
||||
@Operation(summary = "获得内部工时费")
|
||||
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
|
||||
public CommonResult<List<TaskDispatchDO>> getListNg(@RequestParam("id") Long id, @RequestParam("projectSubId") Long projectSubId ) {
|
||||
List<TaskDispatchDO> list= taskDispatchService.getListNg(id,projectSubId);
|
||||
return success( list);
|
||||
}
|
||||
@GetMapping("/getListNc")
|
||||
@Operation(summary = "获得内部材料成本")
|
||||
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
|
||||
public CommonResult<List<TaskDispatchDO>> getListNc(@RequestParam("id") Long id, @RequestParam("projectSubId") Long projectSubId ) {
|
||||
List<TaskDispatchDO> list= taskDispatchService.getListNc(id,projectSubId);
|
||||
return success( list);
|
||||
}
|
||||
@GetMapping("/taskBbPage")
|
||||
@Operation(summary = "获得外协零件分页")
|
||||
@PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')")
|
||||
|
||||
@ -221,4 +221,6 @@ public interface ProcessBomMapper extends BaseMapperX<ProcessBomDO> {
|
||||
BigDecimal outsourcingExpenses(@Param("id") Long id,@Param("projectSubId") Long projectSubId);
|
||||
@Delete("delete from pro_process_bom where project_id=#{id}")
|
||||
void deleteOrderId(@Param("id") Long id);
|
||||
|
||||
BigDecimal cuttingMaterials(@Param("id") Long id, @Param("projectSubId")Long projectSubId);
|
||||
}
|
||||
|
||||
@ -1037,4 +1037,15 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
|
||||
query.eq(TaskDispatchDetailDO::getId,reqVO.getId());
|
||||
return selectOne(query);
|
||||
}
|
||||
|
||||
default List<TaskDispatchDetailDO> getTaskDispatchDetails(List<Long> dispatchIds){
|
||||
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(TaskDispatchDetailDO.class)
|
||||
.leftJoin(ProcedureDO.class,"p", ProcedureDO::getId, TaskDispatchDetailDO::getProcedureId);
|
||||
query.in(TaskDispatchDetailDO::getDispatchId, dispatchIds)
|
||||
.in(ProcedureDO::getName,"下料1","下料2");
|
||||
return selectList(query);
|
||||
}
|
||||
|
||||
List<BubbleFeeResult> cuttingMaterialsBatch(@Param("bomDetailIds")List<Long> bomDetailIds);
|
||||
}
|
||||
|
||||
@ -239,4 +239,5 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
|
||||
return selectList(query);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1616,13 +1616,13 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
||||
// .map(purchaseOrderMakeDetailDO -> purchaseOrderMakeDetailDO.getFoamPrice() != null ? purchaseOrderMakeDetailDO.getFoamPrice() : BigDecimal.ZERO)
|
||||
// .reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
// }
|
||||
BigDecimal cost= processBomMapper.bubbleFees(id,projectSubId);
|
||||
|
||||
BigDecimal cost1=processBomMapper.inspection(id,projectSubId);
|
||||
if (ObjectUtil.isEmpty(cost1)) cost1=BigDecimal.ZERO;
|
||||
// BigDecimal cost= processBomMapper.bubbleFees(id,projectSubId);
|
||||
//
|
||||
// BigDecimal cost1=processBomMapper.inspection(id,projectSubId);
|
||||
BigDecimal cost= processBomMapper.cuttingMaterials(id,projectSubId);
|
||||
if (ObjectUtil.isEmpty(cost)) cost=BigDecimal.ZERO;
|
||||
|
||||
return cost.add(cost1);
|
||||
return cost;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -243,6 +243,7 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
|
||||
// //出库库物料集合
|
||||
// ArrayList<StorageMatDO> outList = new ArrayList<>();
|
||||
ArrayList<StorageLogDO> logList = new ArrayList<>();
|
||||
// ArrayList<StorageLogDO> outLogList = new ArrayList<>();
|
||||
|
||||
//生成入库单
|
||||
StorageInDO storageInDO = new StorageInDO();
|
||||
@ -297,6 +298,7 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
|
||||
// outMat.setProjectSubName(byId.getName());
|
||||
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(detailDO.getBoomDetailId());
|
||||
StorageLogDO logDO = new StorageLogDO();
|
||||
// StorageLogDO outLogDO = new StorageLogDO();
|
||||
if (ObjectUtil.isNotEmpty(bomDetailDO)){
|
||||
String bomCode="";
|
||||
String blueprintNo="";
|
||||
@ -335,10 +337,12 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
|
||||
// storageMatDO.setMatId(materialDO.getId());
|
||||
// outMat.setMatId(materialDO.getId());
|
||||
logDO.setMatId(materialDO.getId());
|
||||
// outLogDO.setMatId(materialDO.getId());
|
||||
}else {
|
||||
// storageMatDO.setMatId(material.getId());
|
||||
// outMat.setMatId(material.getId());
|
||||
logDO.setMatId(material.getId());
|
||||
// outLogDO.setMatId(material.getId());
|
||||
}
|
||||
}
|
||||
// storageMatDOS.add(storageMatDO);
|
||||
@ -401,9 +405,14 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
|
||||
logDO.setGoodsType(2);
|
||||
logDO.setCodeNo(storageInDO.getStorageNo());
|
||||
logList.add(logDO);
|
||||
// outLogDO.setStockMode(25);
|
||||
// outLogDO.setStockType(2);
|
||||
// outLogDO.setGoodsType(2);
|
||||
// outLogList.add(outLogDO);
|
||||
}
|
||||
}
|
||||
storageLogMapper.insertBatch(logList);
|
||||
// storageLogMapper.insertBatch(outLogList);
|
||||
// storageMatMapper.insertBatch(storageMatDOS);
|
||||
// storageMatMapper.insertBatch(outList);
|
||||
// storageService.updateMatLogList(storageDO.getId(),2);
|
||||
|
||||
@ -121,4 +121,8 @@ public interface TaskDispatchService {
|
||||
CommonResult<Boolean> verification(TaskDispatchDetailPageReqVO pageReqVO);
|
||||
|
||||
CommonResult<Boolean> productionCompleted(TaskDispatchDetailPageReqVO pageReqVO);
|
||||
|
||||
List<TaskDispatchDO> getListNg(Long id, Long projectSubId);
|
||||
|
||||
List<TaskDispatchDO> getListNc(Long id, Long projectSubId);
|
||||
}
|
||||
|
||||
@ -1351,8 +1351,8 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
//
|
||||
// return taskDispatchDOS;
|
||||
List<TaskDispatchDO> taskDispatchDOS = taskDispatchMapper.getListCl(id, projectSubId);
|
||||
|
||||
if (taskDispatchDOS.isEmpty()) {
|
||||
List<TaskDispatchDO> list = new ArrayList<>();
|
||||
if (ObjectUtil.isEmpty(taskDispatchDOS)) {
|
||||
return taskDispatchDOS;
|
||||
}
|
||||
|
||||
@ -1363,6 +1363,9 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
|
||||
// 2. 批量查询所有TaskDispatchDetailDO
|
||||
List<TaskDispatchDetailDO> allDetailDOS = getTaskDispatchDetailsBatch(dispatchIds);
|
||||
if (ObjectUtil.isEmpty(allDetailDOS)){
|
||||
return taskDispatchDOS;
|
||||
}
|
||||
Map<Long, List<TaskDispatchDetailDO>> detailsByDispatchId = allDetailDOS.stream()
|
||||
.collect(Collectors.groupingBy(TaskDispatchDetailDO::getDispatchId));
|
||||
|
||||
@ -1376,10 +1379,10 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
Map<Long, ProcedureDO> procedureMap = getProceduresBatch(procedureIds);
|
||||
|
||||
// 5. 批量查询各种成本数据
|
||||
Map<CostQueryKey, BigDecimal> bubbleFeesMap = getBubbleFeesBatch(allDetailDOS, taskDispatchDOS);
|
||||
// Map<CostQueryKey, BigDecimal> bubbleFeesMap = getBubbleFeesBatch(allDetailDOS, taskDispatchDOS);
|
||||
Map<CostQueryKey, BigDecimal> materialCostsMap = getMaterialCostsBatch(allDetailDOS, taskDispatchDOS);
|
||||
Map<Long, BigDecimal> internalLaborCostMap = getInternalLaborCostBatch(allDetailDOS);
|
||||
Map<Long, BigDecimal> processInspectionMap = getProcessInspectionBatch(allDetailDOS);
|
||||
// Map<Long, BigDecimal> internalLaborCostMap = getInternalLaborCostBatch(allDetailDOS);
|
||||
// Map<Long, BigDecimal> processInspectionMap = getProcessInspectionBatch(allDetailDOS);
|
||||
|
||||
// 6. 处理计算结果
|
||||
for (TaskDispatchDO taskDispatchDO : taskDispatchDOS) {
|
||||
@ -1392,16 +1395,16 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
if (procedureDO == null) continue;
|
||||
|
||||
// 从批量查询的结果中获取数据
|
||||
BigDecimal procedureCost = getCostValue(bubbleFeesMap,
|
||||
new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
|
||||
// BigDecimal procedureCost = getCostValue(bubbleFeesMap,
|
||||
// new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
|
||||
BigDecimal materialCost = getCostValue(materialCostsMap,
|
||||
new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
|
||||
BigDecimal internalLaborCost = getCostValue(internalLaborCostMap, detailDO.getId());
|
||||
BigDecimal processInspection = getCostValue(processInspectionMap, detailDO.getId());
|
||||
// BigDecimal internalLaborCost = getCostValue(internalLaborCostMap, detailDO.getId());
|
||||
// BigDecimal processInspection = getCostValue(processInspectionMap, detailDO.getId());
|
||||
|
||||
BigDecimal sum = procedureCost.add(materialCost).add(internalLaborCost).add(processInspection);
|
||||
costMap.put(procedureDO.getName(), sum);
|
||||
assemblyLaborCost = assemblyLaborCost.add(sum);
|
||||
// BigDecimal sum = procedureCost.add(materialCost).add(internalLaborCost).add(processInspection);
|
||||
costMap.put(procedureDO.getName(), materialCost);
|
||||
assemblyLaborCost = assemblyLaborCost.add(materialCost);
|
||||
}
|
||||
|
||||
taskDispatchDO.setAssemblyLaborSum(assemblyLaborCost);
|
||||
@ -1411,9 +1414,12 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
} else {
|
||||
taskDispatchDO.setAssemblyLaborCost(BigDecimal.ZERO);
|
||||
}
|
||||
if (assemblyLaborCost.compareTo(BigDecimal.ZERO) > 0){
|
||||
list.add(taskDispatchDO);
|
||||
}
|
||||
}
|
||||
|
||||
return taskDispatchDOS;
|
||||
return list;
|
||||
}
|
||||
|
||||
private Map<Long, ProcedureDO> getProceduresBatch(Set<Long> procedureIds){
|
||||
@ -1429,7 +1435,9 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
wrapper.in(TaskDispatchDetailDO::getDispatchId, dispatchIds);
|
||||
return taskDispatchDetailMapper.selectList(wrapper);
|
||||
}
|
||||
|
||||
private List<TaskDispatchDetailDO> getTaskDispatchDetails(List<Long> dispatchIds) {
|
||||
return taskDispatchDetailMapper.getTaskDispatchDetails(dispatchIds);
|
||||
}
|
||||
// 批量成本查询方法
|
||||
private Map<CostQueryKey, BigDecimal> getBubbleFeesBatch(List<TaskDispatchDetailDO> details, List<TaskDispatchDO> dispatches) {
|
||||
// 1. 收集所有需要查询的键
|
||||
@ -1550,7 +1558,18 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
List<BubbleFeeResult> batchResults=taskDispatchDetailMapper.batchProcessInspection(bomDetailIds);
|
||||
return convertToMap(batchResults);
|
||||
}
|
||||
|
||||
private Map<Long, BigDecimal> getCuttingMaterialsBatch(List<TaskDispatchDetailDO> details) {
|
||||
if (details.isEmpty()) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
// 提取bomDetailIds和procedureIds
|
||||
List<Long> bomDetailIds = details.stream()
|
||||
.map(TaskDispatchDetailDO::getId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
List<BubbleFeeResult> batchResults=taskDispatchDetailMapper.cuttingMaterialsBatch(bomDetailIds);
|
||||
return convertToMap(batchResults);
|
||||
}
|
||||
// 辅助方法
|
||||
private BigDecimal getCostValue(Map<?, BigDecimal> costMap, Object key) {
|
||||
if (costMap == null || costMap.isEmpty()) {
|
||||
@ -1641,6 +1660,147 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
return CommonResult.success( true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskDispatchDO> getListNg(Long id, Long projectSubId) {
|
||||
List<TaskDispatchDO> taskDispatchDOS = taskDispatchMapper.getListCl(id, projectSubId);
|
||||
List<TaskDispatchDO> list = new ArrayList<>();
|
||||
if (taskDispatchDOS.isEmpty()) {
|
||||
return taskDispatchDOS;
|
||||
}
|
||||
|
||||
// 1. 批量获取所有dispatchId
|
||||
List<Long> dispatchIds = taskDispatchDOS.stream()
|
||||
.map(TaskDispatchDO::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 2. 批量查询所有TaskDispatchDetailDO
|
||||
List<TaskDispatchDetailDO> allDetailDOS = getTaskDispatchDetailsBatch(dispatchIds);
|
||||
Map<Long, List<TaskDispatchDetailDO>> detailsByDispatchId = allDetailDOS.stream()
|
||||
.collect(Collectors.groupingBy(TaskDispatchDetailDO::getDispatchId));
|
||||
|
||||
// 3. 批量获取所有procedureId
|
||||
Set<Long> procedureIds = allDetailDOS.stream()
|
||||
.map(TaskDispatchDetailDO::getProcedureId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// 4. 批量查询ProcedureDO
|
||||
Map<Long, ProcedureDO> procedureMap = getProceduresBatch(procedureIds);
|
||||
|
||||
// 5. 批量查询各种成本数据
|
||||
// Map<CostQueryKey, BigDecimal> bubbleFeesMap = getBubbleFeesBatch(allDetailDOS, taskDispatchDOS);
|
||||
// Map<CostQueryKey, BigDecimal> materialCostsMap = getMaterialCostsBatch(allDetailDOS, taskDispatchDOS);
|
||||
Map<Long, BigDecimal> internalLaborCostMap = getInternalLaborCostBatch(allDetailDOS);
|
||||
Map<Long, BigDecimal> processInspectionMap = getProcessInspectionBatch(allDetailDOS);
|
||||
|
||||
// 6. 处理计算结果
|
||||
for (TaskDispatchDO taskDispatchDO : taskDispatchDOS) {
|
||||
List<TaskDispatchDetailDO> detailDOS = detailsByDispatchId.getOrDefault(taskDispatchDO.getId(), Collections.emptyList());
|
||||
Map<String, BigDecimal> costMap = new HashMap<>();
|
||||
BigDecimal assemblyLaborCost = BigDecimal.ZERO;
|
||||
|
||||
for (TaskDispatchDetailDO detailDO : detailDOS) {
|
||||
ProcedureDO procedureDO = procedureMap.get(detailDO.getProcedureId());
|
||||
if (procedureDO == null) continue;
|
||||
|
||||
// 从批量查询的结果中获取数据
|
||||
// BigDecimal procedureCost = getCostValue(bubbleFeesMap,
|
||||
// new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
|
||||
// BigDecimal materialCost = getCostValue(materialCostsMap,
|
||||
// new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
|
||||
BigDecimal internalLaborCost = getCostValue(internalLaborCostMap, detailDO.getId());
|
||||
BigDecimal processInspection = getCostValue(processInspectionMap, detailDO.getId());
|
||||
|
||||
BigDecimal sum = internalLaborCost.add(processInspection);
|
||||
costMap.put(procedureDO.getName(), sum);
|
||||
assemblyLaborCost = assemblyLaborCost.add(sum);
|
||||
}
|
||||
|
||||
taskDispatchDO.setAssemblyLaborSum(assemblyLaborCost);
|
||||
taskDispatchDO.setMap(costMap);
|
||||
if (taskDispatchDO.getAmount() != null && taskDispatchDO.getAmount().compareTo(BigDecimal.ZERO) != 0) {
|
||||
taskDispatchDO.setAssemblyLaborCost(assemblyLaborCost.divide(taskDispatchDO.getAmount(), 1, RoundingMode.HALF_UP));
|
||||
} else {
|
||||
taskDispatchDO.setAssemblyLaborCost(BigDecimal.ZERO);
|
||||
}
|
||||
if (assemblyLaborCost.compareTo(BigDecimal.ZERO) > 0){
|
||||
list.add(taskDispatchDO);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskDispatchDO> getListNc(Long id, Long projectSubId) {
|
||||
List<TaskDispatchDO> taskDispatchDOS = taskDispatchMapper.getListCl(id, projectSubId);
|
||||
List<TaskDispatchDO> list = new ArrayList<>();
|
||||
if (taskDispatchDOS.isEmpty()) {
|
||||
return taskDispatchDOS;
|
||||
}
|
||||
|
||||
// 1. 批量获取所有dispatchId
|
||||
List<Long> dispatchIds = taskDispatchDOS.stream()
|
||||
.map(TaskDispatchDO::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 2. 批量查询所有TaskDispatchDetailDO
|
||||
List<TaskDispatchDetailDO> allDetailDOS = getTaskDispatchDetails(dispatchIds);
|
||||
Map<Long, List<TaskDispatchDetailDO>> detailsByDispatchId = allDetailDOS.stream()
|
||||
.collect(Collectors.groupingBy(TaskDispatchDetailDO::getDispatchId));
|
||||
|
||||
// 3. 批量获取所有procedureId
|
||||
Set<Long> procedureIds = allDetailDOS.stream()
|
||||
.map(TaskDispatchDetailDO::getProcedureId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// 4. 批量查询ProcedureDO
|
||||
Map<Long, ProcedureDO> procedureMap = getProceduresBatch(procedureIds);
|
||||
|
||||
// 5. 批量查询各种成本数据
|
||||
// Map<CostQueryKey, BigDecimal> bubbleFeesMap = getBubbleFeesBatch(allDetailDOS, taskDispatchDOS);
|
||||
// Map<CostQueryKey, BigDecimal> materialCostsMap = getMaterialCostsBatch(allDetailDOS, taskDispatchDOS);
|
||||
// Map<Long, BigDecimal> internalLaborCostMap = getInternalLaborCostBatch(allDetailDOS);
|
||||
// Map<Long, BigDecimal> processInspectionMap = getProcessInspectionBatch(allDetailDOS);
|
||||
Map<Long, BigDecimal> CuttingMaterialsMap = getCuttingMaterialsBatch(allDetailDOS);
|
||||
|
||||
// 6. 处理计算结果
|
||||
for (TaskDispatchDO taskDispatchDO : taskDispatchDOS) {
|
||||
List<TaskDispatchDetailDO> detailDOS = detailsByDispatchId.getOrDefault(taskDispatchDO.getId(), Collections.emptyList());
|
||||
Map<String, BigDecimal> costMap = new HashMap<>();
|
||||
BigDecimal assemblyLaborCost = BigDecimal.ZERO;
|
||||
|
||||
for (TaskDispatchDetailDO detailDO : detailDOS) {
|
||||
ProcedureDO procedureDO = procedureMap.get(detailDO.getProcedureId());
|
||||
if (procedureDO == null) continue;
|
||||
|
||||
// 从批量查询的结果中获取数据
|
||||
// BigDecimal procedureCost = getCostValue(bubbleFeesMap,
|
||||
// new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
|
||||
// BigDecimal materialCost = getCostValue(materialCostsMap,
|
||||
// new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
|
||||
BigDecimal cuttingMaterialsCost = getCostValue(CuttingMaterialsMap, detailDO.getId());
|
||||
// BigDecimal processInspection = getCostValue(processInspectionMap, detailDO.getId());
|
||||
|
||||
// BigDecimal sum = internalLaborCost.add(processInspection);
|
||||
costMap.put(procedureDO.getName(), cuttingMaterialsCost);
|
||||
assemblyLaborCost = assemblyLaborCost.add(cuttingMaterialsCost);
|
||||
}
|
||||
|
||||
taskDispatchDO.setAssemblyLaborSum(assemblyLaborCost);
|
||||
taskDispatchDO.setMap(costMap);
|
||||
if (taskDispatchDO.getAmount() != null && taskDispatchDO.getAmount().compareTo(BigDecimal.ZERO) != 0) {
|
||||
taskDispatchDO.setAssemblyLaborCost(assemblyLaborCost.divide(taskDispatchDO.getAmount(), 1, RoundingMode.HALF_UP));
|
||||
} else {
|
||||
taskDispatchDO.setAssemblyLaborCost(BigDecimal.ZERO);
|
||||
}
|
||||
if (assemblyLaborCost.compareTo(BigDecimal.ZERO) > 0) {
|
||||
list.add(taskDispatchDO);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List<TaskDispatchDetailOwnerDO> list) {
|
||||
list.forEach(o -> o.setDispatchId(dispatchId));
|
||||
|
||||
|
||||
@ -124,6 +124,13 @@
|
||||
GROUP BY s.id
|
||||
) AS subquery;
|
||||
</select>
|
||||
<select id="cuttingMaterials" resultType="java.math.BigDecimal">
|
||||
SELECT sum(r.report_price) cost
|
||||
from pro_task_dispatch t
|
||||
left join pro_task_dispatch_detail t1 on t.id=t1.dispatch_id and t1.deleted=0 and t1.tenant_id=2
|
||||
left join pro_task_in_report r on r.dispatch_detail_id=t1.id and r.deleted=0 and r.tenant_id=2
|
||||
where t.deleted=0 and t.dispatch_type='PRODUCTION' and t.project_id=#{id} and t.project_sub_id= #{projectSubId}
|
||||
</select>
|
||||
|
||||
<update id="updateDetailEditStatusById" parameterType="Long">
|
||||
UPDATE pro_process_bom_detail
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
from wms_storage sto
|
||||
left join wms_storage_mat mat on mat.stock_id=sto.id and mat.deleted=0 and mat.tenant_id=2
|
||||
left join base_material m on mat.mat_id=m.id and m.deleted=0 and m.tenant_id=2
|
||||
where sto.stock_in_type=5 and sto.status=4 and sto.project_no=#{projectSubId}
|
||||
where sto.stock_in_type=5 and sto.status=4 and mat.project_no=#{projectSubId}
|
||||
|
||||
</select>
|
||||
<select id="getList" resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO">
|
||||
|
||||
@ -257,4 +257,16 @@
|
||||
</foreach>
|
||||
group by g.dispatch_detail_id
|
||||
</select>
|
||||
<select id="cuttingMaterialsBatch"
|
||||
resultType="com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.BubbleFeeResult">
|
||||
SELECT t1.id as dispatchDetailId,COALESCE(sum(r.report_price),0) cost
|
||||
from pro_task_dispatch t
|
||||
left join pro_task_dispatch_detail t1 on t.id=t1.dispatch_id and t1.deleted=0 and t1.tenant_id=2
|
||||
left join pro_task_in_report r on r.dispatch_detail_id=t1.id and r.deleted=0 and r.tenant_id=2
|
||||
where t1.is_outsourcing='N' and t.deleted=0 and t.dispatch_type='PRODUCTION' and t1.id in
|
||||
<foreach collection="bomDetailIds" item="bomDetailId" open="(" close=")" separator=",">
|
||||
#{bomDetailId}
|
||||
</foreach>
|
||||
group by t1.id
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@ -43,10 +43,18 @@ export const getListqt = async (id: number,projectSubId: number) => {
|
||||
export const getListYfDetails = async (id: number,projectSubId: number) => {
|
||||
return await request.get({ url: `/heli/deliver-order/getListYfDetails?id=`+id+`&projectSubId=`+projectSubId })
|
||||
}
|
||||
//查询材料成本
|
||||
//查询外部材料成本
|
||||
export const getListcl = async (id: number,projectSubId: number) => {
|
||||
return await request.get({ url: `/heli/task-dispatch/getListCl?id=`+id+`&projectSubId=`+projectSubId })
|
||||
}
|
||||
//查询内部材料成本
|
||||
export const getListNc = async (id: number,projectSubId: number) => {
|
||||
return await request.get({ url: `/heli/task-dispatch/getListNc?id=`+id+`&projectSubId=`+projectSubId })
|
||||
}
|
||||
//查询内部工时费
|
||||
export const getListNg = async (id: number,projectSubId: number) => {
|
||||
return await request.get({ url: `/heli/task-dispatch/getListNg?id=`+id+`&projectSubId=`+projectSubId })
|
||||
}
|
||||
//查询装配成本
|
||||
export const getListZp = async (id: number,projectSubId: number) => {
|
||||
return await request.get({ url: `/heli/task-dispatch/getListZp?id=`+id+`&projectSubId=`+projectSubId })
|
||||
|
||||
@ -284,7 +284,7 @@ const getSummaries = (param: SummaryMethodProps) => {
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
sums[index] = '';
|
||||
return;
|
||||
}
|
||||
if (!summaryField.includes(column.property)) {
|
||||
|
||||
@ -177,7 +177,7 @@ const getSummaries = (param: SummaryMethodProps) => {
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
sums[index] = '';
|
||||
return;
|
||||
}
|
||||
if (!summaryField.includes(column.property)) {
|
||||
|
||||
@ -40,10 +40,16 @@
|
||||
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="材料成本" prop="caiLiaoCost">
|
||||
<el-form-item label="内部材料成本" prop="caiLiaoCost">
|
||||
<el-input class="!w-265px" v-model="formData.caiLiaoCost" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="外部材料成本" prop="caiLiaoCost">
|
||||
<el-input class="!w-265px" v-model="formData.waixeiCost" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-form-item label="内部加工费" prop="neiBuCost">
|
||||
<el-input class="!w-265px" v-model="formData.neiBuCost" disabled />
|
||||
@ -80,7 +86,9 @@
|
||||
|
||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||
<el-tab-pane label="标准件成本" name="biao">{{ }}</el-tab-pane>
|
||||
<el-tab-pane label="材料成本" name="cai">{{ }}</el-tab-pane>
|
||||
<el-tab-pane label="内部材料成本" name="neicai">{{ }}</el-tab-pane>
|
||||
<el-tab-pane label="外部材料成本" name="cai">{{ }}</el-tab-pane>
|
||||
<el-tab-pane label="内部工时费" name="neigong">{{ }}</el-tab-pane>
|
||||
<el-tab-pane label="装配成本" name="zhuang">{{ }}</el-tab-pane>
|
||||
<el-tab-pane label="运费成本" name="yun">{{ }}</el-tab-pane>
|
||||
</el-tabs>
|
||||
@ -116,6 +124,42 @@
|
||||
<el-table-column label="单据编号" align="center" prop="stockNo" width="200px"/>
|
||||
</el-table>
|
||||
|
||||
</el-card>
|
||||
<el-card class="hl-card-info" v-if="activeIndex == 'neicai'">
|
||||
<!-- <template #header>-->
|
||||
<!-- <div class="hl-card-info-icona"></div><span class="hl-card-info-text">材料成本</span>-->
|
||||
<!-- </template>-->
|
||||
<el-table v-loading="loading" :data="listnc" :stripe="true" :show-overflow-tooltip="true" border class="hl-table" height="500px">
|
||||
<el-table-column type="index" width="70" fixed label="序号" align="center" />
|
||||
|
||||
|
||||
<el-table-column label="零件名称" align="center" prop="materialName" />
|
||||
<el-table-column label="材质" align="center" prop="compositionName" />
|
||||
|
||||
<el-table-column label="规格型号" align="center" prop="spec" />
|
||||
<el-table-column label="数量" align="center" prop="amount" />
|
||||
<el-table-column label="下料1" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['下料1']">
|
||||
<span >
|
||||
<span >{{ row.map['下料1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="下料2" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['下料2']">
|
||||
<span >
|
||||
<span >{{ row.map['下料2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="单件成本" align="center" prop="assemblyLaborCost" width="120px"/>
|
||||
</el-table>
|
||||
|
||||
</el-card>
|
||||
<el-card class="hl-card-info" v-if="activeIndex == 'cai'">
|
||||
<!-- <template #header>-->
|
||||
@ -413,7 +457,302 @@
|
||||
</el-table>
|
||||
|
||||
</el-card>
|
||||
<el-card class="hl-card-info" v-if="activeIndex == 'neigong'">
|
||||
<!-- <template #header>-->
|
||||
<!-- <div class="hl-card-info-icona"></div><span class="hl-card-info-text">材料成本</span>-->
|
||||
<!-- </template>-->
|
||||
<el-table v-loading="loading" :data="listng" :stripe="true" :show-overflow-tooltip="true" border class="hl-table" height="500px">
|
||||
<el-table-column type="index" width="70" fixed label="序号" align="center" />
|
||||
|
||||
|
||||
<el-table-column label="零件名称" align="center" prop="materialName" width="200px" />
|
||||
<el-table-column label="材质" align="center" prop="compositionName" width="150px"/>
|
||||
|
||||
<el-table-column label="规格型号" align="center" prop="spec" width="100"/>
|
||||
<el-table-column label="数量" align="center" prop="amount" width="100"/>
|
||||
<el-table-column label="泡沫" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['泡沫']">
|
||||
<span >
|
||||
<span >{{ row.map['泡沫'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="下料1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['下料1']">
|
||||
<span >
|
||||
<span >{{ row.map['下料1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="下料2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['下料2']">
|
||||
<span >
|
||||
<span >{{ row.map['下料2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="电焊" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['电焊']">
|
||||
<span >
|
||||
<span >{{ row.map['电焊'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="编程" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['编程']">
|
||||
<span >
|
||||
<span >{{ row.map['编程'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开粗1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['开粗1']">
|
||||
<span >
|
||||
<span >{{ row.map['开粗1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开粗2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['开粗2']">
|
||||
<span >
|
||||
<span >{{ row.map['开粗2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="铣床1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['铣床1']">
|
||||
<span >
|
||||
<span >{{ row.map['铣床1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="铣床2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['铣床2']">
|
||||
<span >
|
||||
<span >{{ row.map['铣床2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="车床1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['车床1']">
|
||||
<span >
|
||||
<span >{{ row.map['车床1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="车床2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['车床2']">
|
||||
<span >
|
||||
<span >{{ row.map['车床2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="热处理1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['热处理1']">
|
||||
<span >
|
||||
<span >{{ row.map['热处理1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="热处理2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['热处理2']">
|
||||
<span >
|
||||
<span >{{ row.map['热处理2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="热处理3" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['热处理3']">
|
||||
<span >
|
||||
<span >{{ row.map['热处理3'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="磨床1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['磨床1']">
|
||||
<span >
|
||||
<span >{{ row.map['磨床1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="磨床2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['磨床2']">
|
||||
<span >
|
||||
<span >{{ row.map['磨床2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数控1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['数控1']">
|
||||
<span >
|
||||
<span >{{ row.map['数控1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数控2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['数控2']">
|
||||
<span >
|
||||
<span >{{ row.map['数控2']}}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数控3" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['数控3']">
|
||||
<span >
|
||||
<span >{{ row.map['数控3']}}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="线切割1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['线切割1']">
|
||||
<span >
|
||||
<span >{{ row.map['线切割1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="线切割2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['线切割2']">
|
||||
<span >
|
||||
<span >{{ row.map['线切割2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="电极" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['电极']">
|
||||
<span >
|
||||
<span >{{ row.map['电极'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="火花1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['火花1']">
|
||||
<span >
|
||||
<span >{{ row.map['火花1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="火花2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['火花2']">
|
||||
<span >
|
||||
<span >{{ row.map['火花2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="刻字" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['刻字']">
|
||||
<span >
|
||||
<span >{{ row.map['刻字'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="网格1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['网格1']">
|
||||
<span >
|
||||
<span >{{ row.map['网格1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="网格2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['网格2']">
|
||||
<span >
|
||||
<span >{{ row.map['网格2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="深孔钻1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['深孔钻1']">
|
||||
<span >
|
||||
<span >{{ row.map['深孔钻1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="深孔钻2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['深孔钻2']">
|
||||
<span >
|
||||
<span >{{ row.map['深孔钻2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="钻孔1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['钻孔1']">
|
||||
<span >
|
||||
<span >{{ row.map['钻孔1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="钻孔2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['钻孔2']">
|
||||
<span >
|
||||
<span >{{ row.map['钻孔2'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单件成本" align="center" prop="assemblyLaborCost" width="120px"/>
|
||||
</el-table>
|
||||
|
||||
</el-card>
|
||||
<el-card class="hl-card-info" v-if="activeIndex == 'zhuang'">
|
||||
<!-- <template #header>-->
|
||||
<!-- <div class="hl-card-info-icona"></div><span class="hl-card-info-text">装配成本</span>-->
|
||||
@ -506,6 +845,8 @@
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const list = ref([]) // 标准件数据
|
||||
const listcl = ref([]) // 材料
|
||||
const listng = ref([]) // 材料
|
||||
const listnc = ref([]) // 材料
|
||||
// const listFzc = ref([]) // 副资材
|
||||
// const loading = ref(true) // 列表的加载中
|
||||
const activeName = ref('biao')
|
||||
@ -532,6 +873,7 @@
|
||||
caiLiaoCost:undefined,
|
||||
zpCost:undefined,
|
||||
neiBuCost:undefined,
|
||||
waixeiCost:undefined
|
||||
})
|
||||
|
||||
const handleClick = async(tab: TabsPaneContext, event: Event) => {
|
||||
@ -558,6 +900,10 @@
|
||||
list.value=listData
|
||||
const listclData = await SaleeOrderCost.getListcl(query.id,query.projectSubId)
|
||||
listcl.value=listclData
|
||||
const listNgData = await SaleeOrderCost.getListNg(query.id,query.projectSubId)
|
||||
listng.value=listNgData
|
||||
const listNcData = await SaleeOrderCost.getListNc(query.id,query.projectSubId)
|
||||
listnc.value=listNcData
|
||||
formData.value.projectName=query.projectName
|
||||
formData.value.code=query.code
|
||||
formData.value.customerName=query.customerName
|
||||
@ -568,6 +914,9 @@
|
||||
formData.value.caiLiaoCost=query.cailiaoCost
|
||||
formData.value.zpCost=query.zpCost
|
||||
formData.value.neiBuCost=query.neibuCost
|
||||
formData.value.waixeiCost=query.waixeiCost
|
||||
|
||||
|
||||
// if (listYf.value!=null){
|
||||
// listYf.value.map((item)=>{
|
||||
// formData.value.yunFeiCost+=item.yunFeiMoney
|
||||
|
||||
@ -66,7 +66,7 @@
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" border class="hl-table" height="500px">
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" border class="hl-table" show-summary :summary-method="getSummaries" height="500px">
|
||||
<el-table-column type="index" width="70" fixed label="序号" align="center" />
|
||||
<el-table-column label="项目编号" align="center" prop="code" width="200px" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" width="240px"/>
|
||||
@ -79,8 +79,8 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="设备型号" align="center" prop="deviceModel" width="200px"/>
|
||||
<el-table-column label="标准件成本" align="center" prop="biaoZhunJianCost" width="200px"/>
|
||||
<el-table-column label="材料成本" align="center" prop="cailiaoCost" width="200px"/>
|
||||
<el-table-column label="外协加工费" align="center" prop="waixeiCost" width="200px"/>
|
||||
<el-table-column label="内部材料成本" align="center" prop="cailiaoCost" width="200px"/>
|
||||
<el-table-column label="外部材料成本" align="center" prop="waixeiCost" width="200px"/>
|
||||
<el-table-column label="内部工时费" align="center" prop="neibuCost" width="220px"/>
|
||||
<el-table-column label="装配工时费" align="center" prop="zpCost" width="220px"/>
|
||||
<el-table-column label="运费" align="center" prop="yunFeiCost" width="200px"/>
|
||||
@ -120,6 +120,7 @@ import * as SaleeOrderCost from '@/api/heli/saleordercost'
|
||||
import * as UserApi from '@/api/system/user'
|
||||
import {DICT_TYPE} from "@/utils/dict";
|
||||
import routeParamsCache from '@/utils/routeParamsCache'
|
||||
import {ElTable} from "element-plus";
|
||||
defineOptions({ name: 'Shenhe' })
|
||||
const userList = ref<UserApi.UserVO[]>([]) // 用户列表
|
||||
const message = useMessage() // 消息弹窗
|
||||
@ -194,7 +195,72 @@ const handleExport = async () => {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const getSummaries = (param: SummaryMethodProps) => {
|
||||
const summaryField = ["biaoZhunJianCost","cailiaoCost","waixeiCost","neibuCost","zpCost","yunFeiCost","sumCost"];
|
||||
const { columns, data } = param;
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
if (!summaryField.includes(column.property)) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
}
|
||||
const values = data.map(item => Number(item[column.property]));
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr);
|
||||
if (!isNaN(value)) {
|
||||
return floatAdd(prev, curr);
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
const thousandsField = [];
|
||||
if (thousandsField.includes(column.property)) {
|
||||
sums[index] = thousandsFormat(sums[index]);
|
||||
}
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
// const sumValue = computed(() => {
|
||||
// return list.value.reduce((sum, item) => sum + item.quantityLent, 0);
|
||||
// });
|
||||
// const sums = ['合计','','','','','','','',sumValue];
|
||||
return sums;
|
||||
}
|
||||
const floatAdd = (a, b) => {
|
||||
var c, d, e;
|
||||
if (undefined === a || null === a || "" === a || isNaN(a)) { a = 0; }
|
||||
if (undefined === b || null === b || "" === b || isNaN(b)) { b = 0; }
|
||||
try {
|
||||
c = a.toString().split(".")[1].length;
|
||||
} catch (f) {
|
||||
c = 0;
|
||||
}
|
||||
try {
|
||||
d = b.toString().split(".")[1].length;
|
||||
} catch (f) {
|
||||
d = 0;
|
||||
}
|
||||
e = Math.pow(10, Math.max(c, d));
|
||||
return (floatMul(a, e) + floatMul(b, e)) / e;
|
||||
};
|
||||
const floatMul = (a, b) => {
|
||||
var c = 0,
|
||||
d = a.toString(),
|
||||
e = b.toString();
|
||||
try {
|
||||
c += d.split(".")[1].length;
|
||||
} catch (f) {}
|
||||
try {
|
||||
c += e.split(".")[1].length;
|
||||
} catch (f) {}
|
||||
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
|
||||
}
|
||||
/** 初始化 **/
|
||||
const route = useRoute()
|
||||
const routeValue = ref('')
|
||||
|
||||
@ -78,7 +78,6 @@ const getListData = async () => {
|
||||
if (queryParams.pageNo < data.total) {
|
||||
// 页码累加
|
||||
queryParams.pageNo++;
|
||||
isFinish.value = true;
|
||||
} else {
|
||||
// 分页已结束
|
||||
isFinish.value = true;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user