新增工序号排序 删除接口等..

This commit is contained in:
tzy1042411602 2024-11-19 17:45:18 +08:00
parent 762cad12d3
commit 6ff8b06703
7 changed files with 149 additions and 46 deletions

View File

@ -1,6 +1,6 @@
#??ID-PROD #??ID-PROD
#X-KDApi-AcctID = 670768a85463de X-KDApi-AcctID = 670768a85463de
X-KDApi-AcctID = 6723465a38c722 #X-KDApi-AcctID = 6723465a38c722
X-KDApi-UserName = Administrator X-KDApi-UserName = Administrator
#??IDID #??IDID
X-KDApi-AppID = 288012_Rc0C0zCG2lga0/Vs2Y4pzYSL6hQcWOko X-KDApi-AppID = 288012_Rc0C0zCG2lga0/Vs2Y4pzYSL6hQcWOko

View File

@ -1198,7 +1198,7 @@ public class BomDetailsController extends BaseController {
} }
public int loadMaterialPreservation(BomDetails bomDetails1, String states) { public int loadMaterialPreservation1(BomDetails bomDetails1, String states) {
K3CloudApi client = new K3CloudApi(); K3CloudApi client = new K3CloudApi();
// 创建一个空的JsonObject // 创建一个空的JsonObject
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
@ -1392,7 +1392,7 @@ public class BomDetailsController extends BaseController {
return 1; return 1;
} }
//创建电气物料 //创建电气物料
public int loadMaterialPreservation1(BomDetails bomDetails1, String states) { public int loadMaterialPreservation(BomDetails bomDetails1, String states) {
K3CloudApi client = new K3CloudApi(); K3CloudApi client = new K3CloudApi();
// 创建一个空的JsonObject // 创建一个空的JsonObject
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();

View File

@ -12,6 +12,7 @@ import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.excel.ExcelResult;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.MaterialBom;
import com.ruoyi.system.domain.ProcessRoute; import com.ruoyi.system.domain.ProcessRoute;
import com.ruoyi.system.domain.bo.ProcessRouteBo; import com.ruoyi.system.domain.bo.ProcessRouteBo;
import com.ruoyi.system.domain.dto.CombinedDTO; import com.ruoyi.system.domain.dto.CombinedDTO;
@ -49,7 +50,7 @@ public class ProcessRouteController extends BaseController {
private final IProcessRouteService iProcessRouteService; private final IProcessRouteService iProcessRouteService;
private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class); private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class);
private Long generateUniqueParentId(Long originalId) { private Long generateUniqueParentId( Long originalId) {
return originalId + 1000; return originalId + 1000;
} }
@ -239,9 +240,6 @@ public class ProcessRouteController extends BaseController {
/** /**
* 查询组焊件集合 * 查询组焊件集合
*
* @return
* @RequestBody List<ProcessRouteVo> bomDetail
*/ */
@Log(title = "查询组焊件集合") @Log(title = "查询组焊件集合")
@SaCheckPermission("system:route:pushGroupWeldments") @SaCheckPermission("system:route:pushGroupWeldments")
@ -252,9 +250,6 @@ public class ProcessRouteController extends BaseController {
/** /**
* 查询需要单独生成BOm 的原材料集合 * 查询需要单独生成BOm 的原材料集合
*
* @return
* @RequestBody List<ProcessRouteVo> bomDetail
*/ */
@Log(title = "查询需要单独生成BOM的原材料集合") @Log(title = "查询需要单独生成BOM的原材料集合")
@SaCheckPermission("system:route:getRawBom") @SaCheckPermission("system:route:getRawBom")
@ -291,9 +286,6 @@ public class ProcessRouteController extends BaseController {
/** /**
* 查询项目列表 * 查询项目列表
*
* @return
* @RequestBody List<ProcessRouteVo> routeVoList
*/ */
@Log(title = "获取所有的项目令号") @Log(title = "获取所有的项目令号")
@SaCheckPermission("system:route:getRawBom") @SaCheckPermission("system:route:getRawBom")
@ -338,4 +330,20 @@ public class ProcessRouteController extends BaseController {
public R<Void> addRoute( @RequestBody List<ProcessRoute> list) { public R<Void> addRoute( @RequestBody List<ProcessRoute> list) {
return toAjax(iProcessRouteService.addRoute(list)); return toAjax(iProcessRouteService.addRoute(list));
} }
@SaCheckPermission("system:route:add")
@Log(title = "工艺路线", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/deleteRoute")
public List<ProcessRoute> deleteRoute( @RequestBody ProcessRoute processRoute) {
return iProcessRouteService.deleteRoute(processRoute);
}
@Log(title = "获取材料bom列表")
@SaCheckPermission("system:route:getRawBom")
@PostMapping("/getProcessMaterialList")
public ResponseEntity<List<MaterialBom>> getProcessMaterialList(@RequestBody ProcessRoute processRoute) {
return ResponseEntity.ok(iProcessRouteService.getProcessMaterialList(processRoute));
}
} }

View File

@ -109,9 +109,12 @@ public class WlStockDataController extends BaseController {
/** /**
* 生成安全库存单据 * 生成安全库存单据
* @return
*/ */
@SaCheckPermission("system:stockData:generateDoc")
@XxlJob(value = "generateDoc") @Log(title = "安全库存单据", businessType = BusinessType.OTHER)
@PostMapping("/generateDoc")
// @XxlJob(value = "generateDoc")
public R<List<WlStockData>> generateDoc() { public R<List<WlStockData>> generateDoc() {
List<WlStockData> wlStockData = iWlStockDataService.generateDoc(); List<WlStockData> wlStockData = iWlStockDataService.generateDoc();
return R.ok(wlStockData); return R.ok(wlStockData);

View File

@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.Update;
import java.util.List;
/** /**
* 工艺路线Mapper接口 * 工艺路线Mapper接口
* *
@ -26,4 +28,6 @@ public interface ProcessRouteMapper extends BaseMapperPlus<ProcessRouteMapper, P
// 查询工艺序号是否已经存在根据 materialCode // 查询工艺序号是否已经存在根据 materialCode
@Select("SELECT COUNT(1) FROM process_route WHERE process_no = #{processNo} AND material_code = #{materialCode} AND route_description = #{routeDescription}") @Select("SELECT COUNT(1) FROM process_route WHERE process_no = #{processNo} AND material_code = #{materialCode} AND route_description = #{routeDescription}")
boolean existsByProcessNoAndMaterialCode(@Param("processNo") Long processNo, @Param("materialCode") String materialCode,@Param("route_description") String routeDescription); boolean existsByProcessNoAndMaterialCode(@Param("processNo") Long processNo, @Param("materialCode") String materialCode,@Param("route_description") String routeDescription);
@Select("SELECT * FROM process_route WHERE route_description = #{routeDescription} AND material_code = #{materialCode} AND material_name = #{materialName}")
List<ProcessRoute> selectRouteByLinAndMaterialCode(String routeDescription, String materialCode, String materialName);
} }

View File

@ -2,6 +2,7 @@ package com.ruoyi.system.service;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.MaterialBom;
import com.ruoyi.system.domain.ProcessRoute; import com.ruoyi.system.domain.ProcessRoute;
import com.ruoyi.system.domain.bo.ProcessRouteBo; import com.ruoyi.system.domain.bo.ProcessRouteBo;
import com.ruoyi.system.domain.dto.CombinedDTO; import com.ruoyi.system.domain.dto.CombinedDTO;
@ -74,7 +75,6 @@ public interface IProcessRouteService {
/** /**
* 生成这个项目的pdf * 生成这个项目的pdf
*
* @param rooteProdet * @param rooteProdet
* @return * @return
*/ */
@ -85,4 +85,8 @@ public interface IProcessRouteService {
List<String> getProcessInfoList(String query); List<String> getProcessInfoList(String query);
boolean addRoute(List<ProcessRoute> list); boolean addRoute(List<ProcessRoute> list);
List<MaterialBom> getProcessMaterialList(ProcessRoute processRoute);
List<ProcessRoute> deleteRoute(ProcessRoute processRoute);
} }

View File

@ -76,6 +76,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
@Autowired @Autowired
ProcessInfoMapper processInfoMapper; ProcessInfoMapper processInfoMapper;
private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class); private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class);
private static final Logger logger = LoggerFactory.getLogger(IProcessRouteService.class);
/** /**
* 查询工艺路线 * 查询工艺路线
@ -388,13 +389,11 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
String unit = processRoute.getBomUnit(); String unit = processRoute.getBomUnit();
String materialType = processRoute.getBomMaterial(); String materialType = processRoute.getBomMaterial();
BigDecimal quantity = processRoute.getDiscUsage() != null ? BigDecimal.valueOf(processRoute.getDiscUsage()) : BigDecimal.ZERO; BigDecimal quantity = processRoute.getDiscUsage() != null ? BigDecimal.valueOf(processRoute.getDiscUsage()) : BigDecimal.ZERO;
if (projectNumber == null || parentMaterialCode == null || parentMaterialName == null || unit == null || materialType == null) { if (projectNumber == null || parentMaterialCode == null || parentMaterialName == null || unit == null || materialType == null) {
// 处理空值情况例如记录日志或抛出异常 // 处理空值情况例如记录日志或抛出异常
log.error("必填字段为空: {}", processRoute); log.error("必填字段为空: {}", processRoute);
continue; continue;
} }
// 处理 MaterialBom // 处理 MaterialBom
MaterialBom materialBom = new MaterialBom(); MaterialBom materialBom = new MaterialBom();
materialBom.setProjectNumber(projectNumber); materialBom.setProjectNumber(projectNumber);
@ -405,8 +404,20 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
materialBom.setUnit(unit); materialBom.setUnit(unit);
materialBom.setMaterialType(materialType); materialBom.setMaterialType(materialType);
materialBom.setQuantity(quantity); materialBom.setQuantity(quantity);
/*
// 这里插入 MaterialBom 数据 ProductionOrder productionOrder = new ProductionOrder();
productionOrder.setProductionOrderNo(projectNumber);
productionOrder.setDrawingNo(processRoute.getRawMaterialCode());
productionOrder.setDrawingName(processRoute.getRawMaterialName());
productionOrder.setQuantity(processRoute.getUnitQuantity());
productionOrder.setMaterial(materialType);
productionOrder.setSingleWeight(processRoute.getDiscWeight());
// productionOrder.setTotalWeight(processRoute.getDiscWeight() * processRoute.getUnitQuantity());
productionOrder.setParentPart(parentMaterialCode);
productionOrder.setParentPart(parentMaterialName);
// 这里插入 productionOrder 数据
productionOrderMapper.insert(productionOrder);*/
// 这里插入 materialBom 数据
materialBomMapper.insert(materialBom); materialBomMapper.insert(materialBom);
} }
} }
@ -454,8 +465,14 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
bomDetails.setQuantity(processRoute.getDiscUsage() / 1000.0); // 转换为米 bomDetails.setQuantity(processRoute.getDiscUsage() / 1000.0); // 转换为米
} else { } else {
bomDetails.setQuantity(processRoute.getDiscUsage()); bomDetails.setQuantity(processRoute.getDiscUsage());
bomDetails.setDenominator(1.0);
} }
//处理原来材料分数格式
if ("".equals(processRoute.getBomUnit())) {
bomDetails.setDenominator(processRoute.getDiscUsage());
bomDetails.setQuantity(1.0);
}
// 根据 RawMaterialCode 判断是否外购 // 根据 RawMaterialCode 判断是否外购
if (isOutsourced(processRoute.getRawMaterialCode())) { if (isOutsourced(processRoute.getRawMaterialCode())) {
bomDetails.setStats("外购"); bomDetails.setStats("外购");
@ -464,7 +481,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
} }
bomDetails.setMaterial(processRoute.getBomMaterial()); bomDetails.setMaterial(processRoute.getBomMaterial());
bomDetails.setDenominator(1.0); // 假设分母为 1 bomDetails.setDenominator(1.0);
return bomDetails; return bomDetails;
} }
@ -780,7 +797,17 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
public List<ProcessRouteXuDTO> getProcessRoute(String rooteProdet) { public List<ProcessRouteXuDTO> getProcessRoute(String rooteProdet) {
//查出所有的带工序的物料 //查出所有的带工序的物料
LambdaQueryWrapper<ProcessRoute> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ProcessRoute> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessRoute::getRouteDescription, rooteProdet).ne(ProcessRoute::getMaterialName, "").isNotNull(ProcessRoute::getMaterialName).ne(ProcessRoute::getMaterialCode, "").isNotNull(ProcessRoute::getMaterialCode).ne(ProcessRoute::getProcessNo, "").isNotNull(ProcessRoute::getProcessNo).ne(ProcessRoute::getProcessName, "").isNotNull(ProcessRoute::getProcessName).ne(ProcessRoute::getWorkCenter, "").isNotNull(ProcessRoute::getWorkCenter).ne(ProcessRoute::getProcessControl, "").isNotNull(ProcessRoute::getProcessControl).ne(ProcessRoute::getActivityDuration, "").isNotNull(ProcessRoute::getActivityDuration).ne(ProcessRoute::getActivityUnit, "").isNotNull(ProcessRoute::getActivityUnit); wrapper.eq(ProcessRoute::getRouteDescription, rooteProdet).ne(ProcessRoute::getMaterialName, "")
.ne(ProcessRoute::getProcessName, "按图订制")
.isNotNull(ProcessRoute::getMaterialName).ne(ProcessRoute::getMaterialCode, "")
.isNotNull(ProcessRoute::getMaterialCode).ne(ProcessRoute::getProcessNo, "")
.isNotNull(ProcessRoute::getProcessNo).ne(ProcessRoute::getProcessName, "")
.isNotNull(ProcessRoute::getProcessName).ne(ProcessRoute::getWorkCenter, "")
.isNotNull(ProcessRoute::getWorkCenter).ne(ProcessRoute::getProcessControl, "")
.isNotNull(ProcessRoute::getProcessControl).ne(ProcessRoute::getActivityDuration, "")
.isNotNull(ProcessRoute::getActivityDuration).ne(ProcessRoute::getActivityUnit, "")
.isNotNull(ProcessRoute::getActivityUnit);
List<ProcessRoute> processRoutes = baseMapper.selectList(wrapper); List<ProcessRoute> processRoutes = baseMapper.selectList(wrapper);
// 存储按物料编码分组的 ProcessRouteXuDTO // 存储按物料编码分组的 ProcessRouteXuDTO
Map<String, ProcessRouteXuDTO> groupedRoutes = new HashMap<>(); Map<String, ProcessRouteXuDTO> groupedRoutes = new HashMap<>();
@ -1041,9 +1068,6 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
/** /**
* 更新计划订单 * 更新计划订单
*
* @param rooteProdet
* @return
*/ */
@Override @Override
public List<Model> updateProcessPlan(String rooteProdet) { public List<Model> updateProcessPlan(String rooteProdet) {
@ -1086,28 +1110,88 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
QueryWrapper<ProcessInfo> processInfoQueryWrapper = new QueryWrapper<>(); QueryWrapper<ProcessInfo> processInfoQueryWrapper = new QueryWrapper<>();
processInfoQueryWrapper.select("DISTINCT process_name").like("process_name", query); processInfoQueryWrapper.select("DISTINCT process_name").like("process_name", query);
List<ProcessInfo> processInfoList = processInfoMapper.selectList(processInfoQueryWrapper); List<ProcessInfo> processInfoList = processInfoMapper.selectList(processInfoQueryWrapper);
if (processInfoList == null){ if (processInfoList == null) {
return Collections.emptyList(); return Collections.emptyList();
} }
// 过滤掉 null 值并转换为字符串 // 过滤掉 null 值并转换为字符串
return processInfoList.stream() return processInfoList.stream()
.filter(Objects::nonNull) .filter(Objects::nonNull)
.map(ProcessInfo::getProcessName) // 获取 processName 字段 .map(ProcessInfo::getProcessName) // 获取 processName 字段
.filter(Objects::nonNull) // 过滤掉 null .filter(Objects::nonNull) // 过滤掉 null
.distinct() // 去重 .distinct() // 去重
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@Override @Override
public boolean addRoute(List<ProcessRoute> list) { public boolean addRoute(List<ProcessRoute> list) {
//根据下标重置工序号 10 20 30 40
for (int i = 0; i < list.size(); i++) {
list.get(i).setProcessNo((long) ((i + 1) * 10));
}
return baseMapper.insertBatch(list); return baseMapper.insertBatch(list);
} }
/**
* 查询材料bom
*/
@Override
public List<MaterialBom> getProcessMaterialList(ProcessRoute processRoute) {
if (processRoute == null) {
logger.error("ProcessRoute is null");
throw new IllegalArgumentException("ProcessRoute cannot be null");
}
String materialCode = processRoute.getMaterialCode();
String materialName = processRoute.getMaterialName();
if (materialCode == null || materialName == null) {
logger.error("MaterialCode or MaterialName is null");
throw new IllegalArgumentException("MaterialCode and MaterialName cannot be null");
}
QueryWrapper<MaterialBom> wrapper = new QueryWrapper<>();
wrapper.eq("parent_material_code", processRoute.getMaterialCode());
wrapper.eq("parent_material_name", processRoute.getMaterialName());
return materialBomMapper.selectList(wrapper);
}
/**
* 删除工序
*/
@Override
public List<ProcessRoute> deleteRoute(ProcessRoute processRoute) {
int rowsAffected = baseMapper.deleteById(processRoute.getId());
if (rowsAffected > 0) {
//获取删除后其他的 工序,然后更新工序号
LambdaQueryWrapper<ProcessRoute> wrapper = new LambdaQueryWrapper<>();
log.info("Querying ProcessRoute with routeDescription: {}, materialCode: {}, materialName: {}",
processRoute.getRouteDescription(),
processRoute.getMaterialCode(),
processRoute.getMaterialName());
wrapper.eq(ProcessRoute::getRouteDescription, processRoute.getRouteDescription())
.eq(ProcessRoute::getMaterialCode, processRoute.getMaterialCode())
.eq(ProcessRoute::getMaterialName, processRoute.getMaterialName())
.ne(ProcessRoute::getProcessNo,null);
List<ProcessRoute> routeList = baseMapper.selectList(wrapper);
//工序号升序排序
routeList.sort(Comparator.comparing(ProcessRoute::getProcessNo));
for (int i = 0; i < routeList.size(); i++) {
routeList.get(i).setProcessNo((long) (i + 1) * 10);
}
//批量更新
baseMapper.insertOrUpdateBatch(routeList);
return routeList;
} else {
return null;
}
}
/** /**
* 获取计划订单编号然后获取计划订单详情 单据内码 行内码 * 获取计划订单编号然后获取计划订单详情 单据内码 行内码
* @param rooteProdet
* @return
*/ */
public List<Model> getSelecPlan(String rooteProdet) { public List<Model> getSelecPlan(String rooteProdet) {
List<PlanOrderVo> planOrderList = getSelectProceOrder(rooteProdet); List<PlanOrderVo> planOrderList = getSelectProceOrder(rooteProdet);
@ -1121,7 +1205,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
json.addProperty("FormId", "SFC_OperationPlanning"); json.addProperty("FormId", "SFC_OperationPlanning");
json.addProperty("FieldKeys", "FID,FSubEntity_FDetailID,FProductId.FNumber,FOperNumber,FEntity_FEntryID,FProcessId.FName,FSeqNumber,FSeqName,FPlanStartTime,FPlanFinishTime," + json.addProperty("FieldKeys", "FID,FSubEntity_FDetailID,FProductId.FNumber,FOperNumber,FEntity_FEntryID,FProcessId.FName,FSeqNumber,FSeqName,FPlanStartTime,FPlanFinishTime," +
"FOperPlanStartTime,FOperPlanFinishTime"); "FOperPlanStartTime,FOperPlanFinishTime");
JsonArray filterString = new JsonArray(); JsonArray filterString = new JsonArray();
JsonObject filterObject = new JsonObject(); JsonObject filterObject = new JsonObject();
@ -1144,7 +1228,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
try { try {
String resultJson = String.valueOf(client.billQuery(jsonData)); String resultJson = String.valueOf(client.billQuery(jsonData));
System.out.println( System.out.println(
"生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson "生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson
); );
JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class); JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class);
if (jsonArray == null || jsonArray.size() == 0) { if (jsonArray == null || jsonArray.size() == 0) {
@ -1187,16 +1271,16 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
// 获取或创建 FEntity 对象 // 获取或创建 FEntity 对象
FEntity fEntity = model.getFEntity().stream() FEntity fEntity = model.getFEntity().stream()
.filter(entity -> entity.getFEntryID() == dto.getFEntity_FEntryID()) .filter(entity -> entity.getFEntryID() == dto.getFEntity_FEntryID())
.findFirst() .findFirst()
.orElseGet(() -> { .orElseGet(() -> {
FEntity newFEntity = new FEntity(); FEntity newFEntity = new FEntity();
newFEntity.setFEntryID(dto.getFEntity_FEntryID()); newFEntity.setFEntryID(dto.getFEntity_FEntryID());
newFEntity.setFSeqNumber(dto.getFSeqNumber()); newFEntity.setFSeqNumber(dto.getFSeqNumber());
newFEntity.setFSeqName(dto.getFSeqName()); newFEntity.setFSeqName(dto.getFSeqName());
model.getFEntity().add(newFEntity); model.getFEntity().add(newFEntity);
return newFEntity; return newFEntity;
}); });
// 创建并添加 FSubEntity 对象 // 创建并添加 FSubEntity 对象
FSubEntity fSubEntity = new FSubEntity(); FSubEntity fSubEntity = new FSubEntity();