新增模型计算任务相关的接口 #11

Merged
bgy merged 15 commits from bgy into dev 2024-07-29 10:07:32 +00:00
14 changed files with 240 additions and 73 deletions
Showing only changes of commit 240b7134e5 - Show all commits
@@ -232,7 +232,7 @@ spring:
rabbitmq:
host: 192.168.50.9
port: 5672
virtual-host: /qomoflow-dev
virtual-host: /qomoflow-standardcost
username: admin
password: kncloud
connection-timeout: 5000
@@ -283,7 +283,8 @@ jeecg:
webapp: /opt/webapp
shiro:
# excludeUrls: /api/**,/api/internalService/**,/test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/api/getUserInfo,/sys/sysDepart/**,/taskSocket/**,/flowSocket/**,/dataCheck/**
excludeUrls: /**/**,/**/**/**
excludeUrls: /api/internalService/**,/test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/api/getUserInfo,/sys/sysDepart/**,/taskSocket/**,/flowSocket/**,/dataCheck/**
#excludeUrls: /**/**,/**/**/**
#阿里云oss存储和大鱼短信秘钥配置
oss:
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Builder;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
@@ -25,6 +26,7 @@ import lombok.experimental.Accessors;
* @Version: V1.0
*/
@Data
@Builder
@TableName("app_scene_cost_result_value")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@@ -7,7 +7,7 @@ import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostResultValue;
/**
* @Description: app_scene_cost_result_value
* @Author: jeecg-boot
* @Date: 2024-07-23
* @Date: 2024-07-23
* @Version: V1.0
*/
public interface AppSceneCostResultValueMapper extends BaseMapper<AppSceneCostResultValue> {
@@ -45,7 +45,8 @@ public class LaborCostParameters extends AbstractParameters {
@Override
public String toString() {
return "人工成本任务";
return getLocalParams().toString();
// return "人工成本任务";
}
}
@@ -17,14 +17,9 @@
package com.zzsmart.qomo.kn.cost.manage.plugin.laborcost;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostMaterialBomMapper;
import com.zzsmart.qomo.kn.cost.manage.service.IAppSceneCostResultValueService;
import com.zzsmart.qomo.plugin.task.api.AbstractTask;
import com.zzsmart.qomo.plugin.task.api.TaskCallBack;
import com.zzsmart.qomo.plugin.task.api.TaskException;
import com.zzsmart.qomo.plugin.task.api.TaskExecutionContext;
import com.zzsmart.qomo.kn.cost.manage.plugin.materialinput.StandardCostService;
import com.zzsmart.qomo.plugin.task.api.*;
import com.zzsmart.qomo.plugin.task.api.parameters.AbstractParameters;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 人工成本计算任务
@@ -59,9 +54,15 @@ public class LaborCostTask extends AbstractTask {
@Override
public void handle(TaskCallBack taskCallBack) throws TaskException {
log.info("Full EmptyTask parameters: {}", emptyParameters);
//setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
log.info("Full EmptyTask parameters: {}", taskExecutionContext);
try {
StandardCostService.laborCostTask(taskExecutionContext);
} catch (Exception e) {
//运行失败退出
setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE);
}
//运行成功退出
setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
}
@Override
@@ -20,11 +20,9 @@ package com.zzsmart.qomo.kn.cost.manage.plugin.manufacturingcost;
import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostResultValue;
import com.zzsmart.qomo.kn.cost.manage.entity.CostMaterialBom;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostMaterialBomMapper;
import com.zzsmart.qomo.kn.cost.manage.plugin.materialinput.StandardCostService;
import com.zzsmart.qomo.kn.cost.manage.service.IAppSceneCostResultValueService;
import com.zzsmart.qomo.plugin.task.api.AbstractTask;
import com.zzsmart.qomo.plugin.task.api.TaskCallBack;
import com.zzsmart.qomo.plugin.task.api.TaskException;
import com.zzsmart.qomo.plugin.task.api.TaskExecutionContext;
import com.zzsmart.qomo.plugin.task.api.*;
import com.zzsmart.qomo.plugin.task.api.parameters.AbstractParameters;
import org.springframework.beans.factory.annotation.Autowired;
@@ -64,9 +62,15 @@ public class ManufacturingCostTask extends AbstractTask {
@Override
public void handle(TaskCallBack taskCallBack) throws TaskException {
log.info("Full EmptyTask parameters: {}", emptyParameters);
//setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
log.info("Full EmptyTask parameters: {}", taskRequest);
try {
StandardCostService.manufacturingCostTask(taskRequest);
} catch (Exception e) {
//运行失败退出
setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE);
}
//运行成功退出
setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
}
@Override
@@ -20,11 +20,9 @@ package com.zzsmart.qomo.kn.cost.manage.plugin.materialcost;
import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostResultValue;
import com.zzsmart.qomo.kn.cost.manage.entity.CostMaterialBom;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostMaterialBomMapper;
import com.zzsmart.qomo.kn.cost.manage.plugin.materialinput.StandardCostService;
import com.zzsmart.qomo.kn.cost.manage.service.IAppSceneCostResultValueService;
import com.zzsmart.qomo.plugin.task.api.AbstractTask;
import com.zzsmart.qomo.plugin.task.api.TaskCallBack;
import com.zzsmart.qomo.plugin.task.api.TaskException;
import com.zzsmart.qomo.plugin.task.api.TaskExecutionContext;
import com.zzsmart.qomo.plugin.task.api.*;
import com.zzsmart.qomo.plugin.task.api.parameters.AbstractParameters;
import org.springframework.beans.factory.annotation.Autowired;
@@ -64,9 +62,15 @@ public class MaterialCostTask extends AbstractTask {
@Override
public void handle(TaskCallBack taskCallBack) throws TaskException {
log.info("Full EmptyTask parameters: {}", emptyParameters);
//setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
log.info("Full EmptyTask parameters: {}", taskRequest);
try {
StandardCostService.materialCostTask(taskRequest);
} catch (Exception e) {
//运行失败退出
setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE);
}
//运行成功退出
setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
}
@Override
@@ -17,17 +17,8 @@
package com.zzsmart.qomo.kn.cost.manage.plugin.materialinput;
import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostResultValue;
import com.zzsmart.qomo.kn.cost.manage.entity.CostMaterialBom;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostMaterialBomMapper;
import com.zzsmart.qomo.kn.cost.manage.service.IAppSceneCostResultValueService;
import com.zzsmart.qomo.plugin.task.api.*;
import com.zzsmart.qomo.plugin.task.api.parameters.AbstractParameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 物料编号输入任务
@@ -62,9 +53,15 @@ public class MaterialInputTask extends AbstractTask {
@Override
public void handle(TaskCallBack taskCallBack) throws TaskException {
log.info("Full EmptyTask parameters: {}", emptyParameters);
//setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
log.info("Full EmptyTask parameters: {}", taskExecutionContext);
try {
StandardCostService.materialInputTask(taskExecutionContext);
} catch (Exception e) {
//运行失败退出
setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE);
}
//运行成功退出
setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
}
@Override
@@ -2,21 +2,45 @@ package com.zzsmart.qomo.kn.cost.manage.plugin.materialinput;
import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostResultValue;
import com.zzsmart.qomo.kn.cost.manage.entity.CostMaterialBom;
import com.zzsmart.qomo.kn.cost.manage.entity.CostMaterialProcessHours;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostMaterialBomMapper;
import com.zzsmart.qomo.kn.cost.manage.service.CostMaterialProcessHoursService;
import com.zzsmart.qomo.kn.cost.manage.service.IAppSceneCostResultValueService;
import com.zzsmart.qomo.kn.cost.manage.service.IHourRateService;
import com.zzsmart.qomo.plugin.task.api.TaskExecutionContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@Slf4j
public class StandardCostService {
/**
* 物料BOM信息
*/
@Autowired
CostMaterialBomMapper costMaterialBomMapper;
/**
* 小时费率
*/
@Autowired
IHourRateService iHourRateService;
/**
* 工序
*/
@Autowired
CostMaterialProcessHoursService costMaterialProcessHoursService;
/**
* 标准成本计算结果
*/
@Autowired
IAppSceneCostResultValueService iAppSceneCostResultValueService;
public static StandardCostService standardCostService;
@@ -25,6 +49,8 @@ public class StandardCostService {
public void init() {
standardCostService = this;
standardCostService.costMaterialBomMapper = this.costMaterialBomMapper;
standardCostService.iHourRateService = this.iHourRateService;
standardCostService.costMaterialProcessHoursService = this.costMaterialProcessHoursService;
standardCostService.iAppSceneCostResultValueService = this.iAppSceneCostResultValueService;
}
@@ -32,25 +58,35 @@ public class StandardCostService {
/**
* 物料编号输入任务
*/
public static void materialInputTask(String materialCode) {
//1.查询出所有满足物料编号的物料(BOM物料)
String sql = "select * from app_scene_cost_material_bom ";
List<CostMaterialBom> list = standardCostService.costMaterialBomMapper.customSelect(sql);
log.info("Full EmptyTask list: {}", list);
//2.把查询的结果存放在临时表里(表命名规则:前缀_流程id_组件code)
AppSceneCostResultValue appSceneCostResultValue = new AppSceneCostResultValue();
appSceneCostResultValue.setInstanceCode("11");
appSceneCostResultValue.setCountValue("11");
appSceneCostResultValue.setCreateTime(new Date());
standardCostService.iAppSceneCostResultValueService.save(appSceneCostResultValue);
public static void materialInputTask(TaskExecutionContext parameters) {
try {
//获取最上层的物料号
String materialCode = "";
//获取任务类型
String taskType = "";
//获取任务代码
String taskCode = "";
//获取流程id
String flowInstanceId = "1";
//1.查询出所有满足物料编号的物料(BOM物料)
String sql = "select * from app_scene_cost_material_bom ";
List<CostMaterialBom> list = standardCostService.costMaterialBomMapper.customSelect(sql);
log.info("Full EmptyTask list: {}", list);
//2.把查询的结果存放在临时表里(表命名规则:前缀_流程id_组件code)
for (int i = 0; list != null && i < list.size(); i++) {
CostMaterialBom material = list.get(i);
AppSceneCostResultValue appSceneCostResultValue = AppSceneCostResultValue.builder().belongTopMaterialNo(materialCode).marterialNo(material.getMaterialCode()).parentMarterialNo(material.getParentMaterialCode()).taskType(taskType).taskCode(taskCode).flowInstanceId(flowInstanceId).build();
standardCostService.iAppSceneCostResultValueService.save(appSceneCostResultValue);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 物料成本任务
*/
public static void materialCostTask(String materialCode) {
public static void materialCostTask(TaskExecutionContext parameters) {
//1.查询出物料编号对应的下所有的BOM信息
//2.计算出所有的单个物料的物料成本
//2.1查询出物料的单价和采购数量
@@ -60,17 +96,59 @@ public class StandardCostService {
/**
* 人工成本任务
*/
public static void laborCostTask(String materialCode) {
//1.查询出物料编号对应的下所有的BOM信息
//2.计算出所有的单个物料的人工成本
//2.1查询出物料的人员工时和人工费率
//2.2计算出人工成本并存储到成本结果数据表中
public static void laborCostTask(TaskExecutionContext parameters) {
try {
//获取最上层的物料号
String topMaterialCode = "";
//获取任务类型
String taskType = "";
//获取上一节点任务类型
String lastTaskType = "LaborCost";
//获取任务代码
String taskCode = "";
//获取流程id
String flowInstanceId = "1";
//人工费率
BigDecimal laborRate = new BigDecimal("0.0");
//1.查询出物料编号对应的下所有的BOM信息
List<AppSceneCostResultValue> list = standardCostService.iAppSceneCostResultValueService.getResultValueByTopMaterialNo(topMaterialCode, lastTaskType, flowInstanceId);
//2.计算出所有的单个物料的人工成本
//2.1查询出物料的人员工时和人工小时费率(涉及:小时费率表和工序表)
List<String> MarterialNoList = new ArrayList<>();
if (list != null && list.size() > 0) {
MarterialNoList = list.stream().filter(s -> s.getMarterialNo() != null).map(AppSceneCostResultValue::getMarterialNo).collect(Collectors.toList());
}
//查询工序工时
Map<String, List<CostMaterialProcessHours>> processHoursMap = standardCostService.costMaterialProcessHoursService.getProcessHoursByMaterialNo(MarterialNoList);
for (int i = 0; i < list.size(); i++) {
AppSceneCostResultValue appSceneCostResultValue = list.get(i);
String marterialNo = appSceneCostResultValue.getMarterialNo();
if (marterialNo != null) {
BigDecimal totalLaborCost = new BigDecimal("0.0");
List<CostMaterialProcessHours> costMaterialProcessHours = processHoursMap.get(marterialNo);
if (costMaterialProcessHours != null && costMaterialProcessHours.size() > 0) {
for (int j = 0; j < costMaterialProcessHours.size(); j++) {
CostMaterialProcessHours processHours = costMaterialProcessHours.get(j);
BigDecimal laborHours = processHours.getLaborHours();
//计算总人工成本
totalLaborCost.add(laborHours.multiply(laborRate));
}
}
//2.2计算出人工成本并存储到成本结果数据表中
AppSceneCostResultValue resultValue = AppSceneCostResultValue.builder().belongTopMaterialNo(topMaterialCode).marterialNo(marterialNo).parentMarterialNo(appSceneCostResultValue.getParentMarterialNo()).taskType(taskType).taskCode(taskCode).flowInstanceId(flowInstanceId).countValue(totalLaborCost + "").build();
standardCostService.iAppSceneCostResultValueService.save(resultValue);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 制造费用成本任务
*/
public static void manufacturingCostTask(String materialCode) {
public static void manufacturingCostTask(TaskExecutionContext parameters) {
//1.查询出物料编号对应的下所有的BOM信息
//2.根据费用类型进行不同的费用计算
//2.1机器折旧费(机器工时*费率)
@@ -83,7 +161,7 @@ public class StandardCostService {
/**
* 标准成本计算任务
*/
public static void standardCostTask(String materialCode) {
public static void standardCostTask(TaskExecutionContext parameters) {
//1.查询出物料编号对应的下所有的BOM信息
//2.计算出所有的单个物料的本阶的标准成本(标准成本=物料成本+人工成本+制造费用)
//3.计算出所有的单个物料的累计标准成本
@@ -18,11 +18,9 @@
package com.zzsmart.qomo.kn.cost.manage.plugin.standardcost;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostMaterialBomMapper;
import com.zzsmart.qomo.kn.cost.manage.plugin.materialinput.StandardCostService;
import com.zzsmart.qomo.kn.cost.manage.service.IAppSceneCostResultValueService;
import com.zzsmart.qomo.plugin.task.api.AbstractTask;
import com.zzsmart.qomo.plugin.task.api.TaskCallBack;
import com.zzsmart.qomo.plugin.task.api.TaskException;
import com.zzsmart.qomo.plugin.task.api.TaskExecutionContext;
import com.zzsmart.qomo.plugin.task.api.*;
import com.zzsmart.qomo.plugin.task.api.parameters.AbstractParameters;
import org.springframework.beans.factory.annotation.Autowired;
@@ -60,9 +58,15 @@ public class StandardCostTask extends AbstractTask {
@Override
public void handle(TaskCallBack taskCallBack) throws TaskException {
log.info("Full EmptyTask parameters: {}", emptyParameters);
//setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
log.info("Full EmptyTask parameters: {}", taskRequest);
try {
StandardCostService.standardCostTask(taskRequest);
} catch (Exception e) {
//运行失败退出
setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE);
}
//运行成功退出
setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
}
@Override
@@ -3,6 +3,9 @@ package com.zzsmart.qomo.kn.cost.manage.service;
import com.zzsmart.qomo.kn.cost.manage.entity.CostMaterialProcessHours;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* <p>
* 物料工时工序表 服务类
@@ -12,5 +15,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @since 2024-06-19
*/
public interface CostMaterialProcessHoursService extends IService<CostMaterialProcessHours> {
/**
* 查询满足物料编号的工时工序
*/
Map<String,List<CostMaterialProcessHours>> getProcessHoursByMaterialNo(List<String> materialNos);
}
@@ -3,6 +3,8 @@ package com.zzsmart.qomo.kn.cost.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostResultValue;
import java.util.List;
/**
* @Description: app_scene_cost_result_value
* @Author: jeecg-boot
@@ -10,5 +12,10 @@ import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostResultValue;
* @Version: V1.0
*/
public interface IAppSceneCostResultValueService extends IService<AppSceneCostResultValue> {
/**
* 根据顶级物料编码查询满足条件的结果值
* @param topMaterialCode
* @return
*/
List<AppSceneCostResultValue> getResultValueByTopMaterialNo(String topMaterialCode,String lastTaskType,String flowInstanceId);
}
@@ -1,12 +1,17 @@
package com.zzsmart.qomo.kn.cost.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostResultValue;
import com.zzsmart.qomo.kn.cost.manage.mapper.AppSceneCostResultValueMapper;
import com.zzsmart.qomo.kn.cost.manage.service.IAppSceneCostResultValueService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Description: app_scene_cost_result_value
@@ -16,5 +21,25 @@ import org.springframework.stereotype.Service;
*/
@Service
public class AppSceneCostResultValueServiceImpl extends ServiceImpl<AppSceneCostResultValueMapper, AppSceneCostResultValue> implements IAppSceneCostResultValueService {
@Autowired
private AppSceneCostResultValueMapper appSceneCostResultValueMapper;
/**
* 根据顶级物料编码查询满足条件的结果值
*
* @param topMaterialCode
* @param lastTaskType
* @param flowInstanceId
* @return
*/
@Override
public List<AppSceneCostResultValue> getResultValueByTopMaterialNo(String topMaterialCode, String lastTaskType, String flowInstanceId) {
List<AppSceneCostResultValue> result = new ArrayList<>();
QueryWrapper<AppSceneCostResultValue> queryWrapper = new QueryWrapper<>();
if (topMaterialCode != null && !topMaterialCode.equals("") && lastTaskType != null && !lastTaskType.equals("") && flowInstanceId != null && !flowInstanceId.equals("")) {
queryWrapper.eq("belong_top_material_no", topMaterialCode).eq("task_type", lastTaskType).eq("flow_instance_id", flowInstanceId);
result = appSceneCostResultValueMapper.selectList(queryWrapper);
}
return result;
}
}
@@ -1,20 +1,57 @@
package com.zzsmart.qomo.kn.cost.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zzsmart.qomo.kn.cost.manage.entity.CostMaterialProcessHours;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostMaterialProcessHoursMapper;
import com.zzsmart.qomo.kn.cost.manage.service.CostMaterialProcessHoursService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 物料工时工序表 服务实现类
* </p>
*
* @author
* @author
* @since 2024-06-19
*/
@Service
public class CostMaterialProcessHoursServiceImpl extends ServiceImpl<CostMaterialProcessHoursMapper, CostMaterialProcessHours> implements CostMaterialProcessHoursService {
@Autowired
CostMaterialProcessHoursMapper costMaterialProcessHoursMapper;
/**
* 查询满足物料编号的工时工序
*
* @param materialNos
*/
@Override
public Map<String, List<CostMaterialProcessHours>> getProcessHoursByMaterialNo(List<String> materialNos) {
Map<String, List<CostMaterialProcessHours>> map = new HashMap<>();
QueryWrapper<CostMaterialProcessHours> queryWrapper = new QueryWrapper();
if (materialNos != null && materialNos.size() > 0) {
queryWrapper.in("material_code", materialNos);
List<CostMaterialProcessHours> costMaterialProcessHours = costMaterialProcessHoursMapper.selectList(queryWrapper);
for (int i = 0; i < costMaterialProcessHours.size(); i++) {
CostMaterialProcessHours costMaterialProcessHours1 = costMaterialProcessHours.get(i);
String materialCode = costMaterialProcessHours1.getMaterialCode();
if (map.containsKey(materialCode)) {
List<CostMaterialProcessHours> list = map.get(materialCode);
list.add(costMaterialProcessHours1);
map.put(materialCode, list);
} else {
List<CostMaterialProcessHours> list = new ArrayList<>();
list.add(costMaterialProcessHours1);
map.put(materialCode, list);
}
}
}
return map;
}
}