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

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
#X-KDApi-AcctID = 670768a85463de
X-KDApi-AcctID = 6723465a38c722
X-KDApi-AcctID = 670768a85463de
#X-KDApi-AcctID = 6723465a38c722
X-KDApi-UserName = Administrator
#??IDID
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();
// 创建一个空的JsonObject
JsonObject json = new JsonObject();
@ -1392,7 +1392,7 @@ public class BomDetailsController extends BaseController {
return 1;
}
//创建电气物料
public int loadMaterialPreservation1(BomDetails bomDetails1, String states) {
public int loadMaterialPreservation(BomDetails bomDetails1, String states) {
K3CloudApi client = new K3CloudApi();
// 创建一个空的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.excel.ExcelResult;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.MaterialBom;
import com.ruoyi.system.domain.ProcessRoute;
import com.ruoyi.system.domain.bo.ProcessRouteBo;
import com.ruoyi.system.domain.dto.CombinedDTO;
@ -49,7 +50,7 @@ public class ProcessRouteController extends BaseController {
private final IProcessRouteService iProcessRouteService;
private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class);
private Long generateUniqueParentId(Long originalId) {
private Long generateUniqueParentId( Long originalId) {
return originalId + 1000;
}
@ -239,9 +240,6 @@ public class ProcessRouteController extends BaseController {
/**
* 查询组焊件集合
*
* @return
* @RequestBody List<ProcessRouteVo> bomDetail
*/
@Log(title = "查询组焊件集合")
@SaCheckPermission("system:route:pushGroupWeldments")
@ -252,9 +250,6 @@ public class ProcessRouteController extends BaseController {
/**
* 查询需要单独生成BOm 的原材料集合
*
* @return
* @RequestBody List<ProcessRouteVo> bomDetail
*/
@Log(title = "查询需要单独生成BOM的原材料集合")
@SaCheckPermission("system:route:getRawBom")
@ -291,9 +286,6 @@ public class ProcessRouteController extends BaseController {
/**
* 查询项目列表
*
* @return
* @RequestBody List<ProcessRouteVo> routeVoList
*/
@Log(title = "获取所有的项目令号")
@SaCheckPermission("system:route:getRawBom")
@ -338,4 +330,20 @@ public class ProcessRouteController extends BaseController {
public R<Void> addRoute( @RequestBody List<ProcessRoute> 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
*/
@XxlJob(value = "generateDoc")
@SaCheckPermission("system:stockData:generateDoc")
@Log(title = "安全库存单据", businessType = BusinessType.OTHER)
@PostMapping("/generateDoc")
// @XxlJob(value = "generateDoc")
public R<List<WlStockData>> generateDoc() {
List<WlStockData> wlStockData = iWlStockDataService.generateDoc();
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.Update;
import java.util.List;
/**
* 工艺路线Mapper接口
*
@ -26,4 +28,6 @@ public interface ProcessRouteMapper extends BaseMapperPlus<ProcessRouteMapper, P
// 查询工艺序号是否已经存在根据 materialCode
@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);
@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.page.TableDataInfo;
import com.ruoyi.system.domain.MaterialBom;
import com.ruoyi.system.domain.ProcessRoute;
import com.ruoyi.system.domain.bo.ProcessRouteBo;
import com.ruoyi.system.domain.dto.CombinedDTO;
@ -74,7 +75,6 @@ public interface IProcessRouteService {
/**
* 生成这个项目的pdf
*
* @param rooteProdet
* @return
*/
@ -85,4 +85,8 @@ public interface IProcessRouteService {
List<String> getProcessInfoList(String query);
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
ProcessInfoMapper processInfoMapper;
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 materialType = processRoute.getBomMaterial();
BigDecimal quantity = processRoute.getDiscUsage() != null ? BigDecimal.valueOf(processRoute.getDiscUsage()) : BigDecimal.ZERO;
if (projectNumber == null || parentMaterialCode == null || parentMaterialName == null || unit == null || materialType == null) {
// 处理空值情况例如记录日志或抛出异常
log.error("必填字段为空: {}", processRoute);
continue;
}
// 处理 MaterialBom
MaterialBom materialBom = new MaterialBom();
materialBom.setProjectNumber(projectNumber);
@ -405,8 +404,20 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
materialBom.setUnit(unit);
materialBom.setMaterialType(materialType);
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);
}
}
@ -454,8 +465,14 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
bomDetails.setQuantity(processRoute.getDiscUsage() / 1000.0); // 转换为米
} else {
bomDetails.setQuantity(processRoute.getDiscUsage());
bomDetails.setDenominator(1.0);
}
//处理原来材料分数格式
if ("".equals(processRoute.getBomUnit())) {
bomDetails.setDenominator(processRoute.getDiscUsage());
bomDetails.setQuantity(1.0);
}
// 根据 RawMaterialCode 判断是否外购
if (isOutsourced(processRoute.getRawMaterialCode())) {
bomDetails.setStats("外购");
@ -464,7 +481,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
}
bomDetails.setMaterial(processRoute.getBomMaterial());
bomDetails.setDenominator(1.0); // 假设分母为 1
bomDetails.setDenominator(1.0);
return bomDetails;
}
@ -780,7 +797,17 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
public List<ProcessRouteXuDTO> getProcessRoute(String rooteProdet) {
//查出所有的带工序的物料
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);
// 存储按物料编码分组的 ProcessRouteXuDTO
Map<String, ProcessRouteXuDTO> groupedRoutes = new HashMap<>();
@ -1041,9 +1068,6 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
/**
* 更新计划订单
*
* @param rooteProdet
* @return
*/
@Override
public List<Model> updateProcessPlan(String rooteProdet) {
@ -1086,28 +1110,88 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
QueryWrapper<ProcessInfo> processInfoQueryWrapper = new QueryWrapper<>();
processInfoQueryWrapper.select("DISTINCT process_name").like("process_name", query);
List<ProcessInfo> processInfoList = processInfoMapper.selectList(processInfoQueryWrapper);
if (processInfoList == null){
if (processInfoList == null) {
return Collections.emptyList();
}
// 过滤掉 null 值并转换为字符串
return processInfoList.stream()
.filter(Objects::nonNull)
.map(ProcessInfo::getProcessName) // 获取 processName 字段
.filter(Objects::nonNull) // 过滤掉 null
.distinct() // 去重
.collect(Collectors.toList());
.filter(Objects::nonNull)
.map(ProcessInfo::getProcessName) // 获取 processName 字段
.filter(Objects::nonNull) // 过滤掉 null
.distinct() // 去重
.collect(Collectors.toList());
}
@Override
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);
}
/**
* 查询材料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) {
List<PlanOrderVo> planOrderList = getSelectProceOrder(rooteProdet);
@ -1121,7 +1205,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
JsonObject json = new JsonObject();
json.addProperty("FormId", "SFC_OperationPlanning");
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();
JsonObject filterObject = new JsonObject();
@ -1144,7 +1228,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
try {
String resultJson = String.valueOf(client.billQuery(jsonData));
System.out.println(
"生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson
"生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson
);
JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class);
if (jsonArray == null || jsonArray.size() == 0) {
@ -1187,16 +1271,16 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
// 获取或创建 FEntity 对象
FEntity fEntity = model.getFEntity().stream()
.filter(entity -> entity.getFEntryID() == dto.getFEntity_FEntryID())
.findFirst()
.orElseGet(() -> {
FEntity newFEntity = new FEntity();
newFEntity.setFEntryID(dto.getFEntity_FEntryID());
newFEntity.setFSeqNumber(dto.getFSeqNumber());
newFEntity.setFSeqName(dto.getFSeqName());
model.getFEntity().add(newFEntity);
return newFEntity;
});
.filter(entity -> entity.getFEntryID() == dto.getFEntity_FEntryID())
.findFirst()
.orElseGet(() -> {
FEntity newFEntity = new FEntity();
newFEntity.setFEntryID(dto.getFEntity_FEntryID());
newFEntity.setFSeqNumber(dto.getFSeqNumber());
newFEntity.setFSeqName(dto.getFSeqName());
model.getFEntity().add(newFEntity);
return newFEntity;
});
// 创建并添加 FSubEntity 对象
FSubEntity fSubEntity = new FSubEntity();