Browse Source

fix: 看板数据优化

master
李永德 1 year ago
parent
commit
34879a8187
  1. 6
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/MonthlyWorkOrderVo.java
  2. 23
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java
  3. 10
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml
  4. 9
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java
  5. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/autotask/AutoCallMaterials.java
  6. 37
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  7. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/autotask/AutoSaveWaitGdyInfo.java
  8. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.xml
  9. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dto/MesGdyInfoWaitDto.java
  10. 9
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/impl/WmsToMmsServiceImpl.java
  11. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/DropdownListVo.java
  12. 8
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/IPdmBdRequestMaterialRecordService.java
  13. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dao/mapper/PdmBdRequestMaterialRecordMapper.java
  14. 11
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dao/mapper/PdmBdRequestMaterialRecordMapper.xml
  15. 6
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/impl/PdmBdRequestMaterialRecordServiceImpl.java
  16. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java
  17. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java
  18. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml
  19. 28
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java
  20. 60
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/GracefulShutdownConfig.java
  21. 54
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/LogbackQueueMonitor.java
  22. 1
      lms/nladmin-system/nlsso-server/src/main/resources/ext.dic
  23. 36
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/ext/TestDemo.java
  24. 4
      lms/nladmin-ui/src/views/wms/basedata/material/index.vue
  25. 75
      lms/nladmin-ui/src/views/wms/sch/task/editTaskDialog.vue

6
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/MonthlyWorkOrderVo.java

@ -10,8 +10,8 @@ import lombok.Data;
@Data @Data
public class MonthlyWorkOrderVo { public class MonthlyWorkOrderVo {
private String name; private String name;
private Long order_num; private String order_num;
private Long guada_num; private String guada_num;
private Long residue_num; private String residue_num;
} }

23
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java

@ -53,15 +53,15 @@ public class CockpitServiceImpl implements CockpitService {
return null; return null;
}); });
// 3、人员月生产 // 3、人员月生产
CompletableFuture<List<PersonnelMonthlyProductionVo>> listPersonnelMonthlyProductionFuture = CompletableFuture.supplyAsync( // CompletableFuture<List<PersonnelMonthlyProductionVo>> listPersonnelMonthlyProductionFuture = CompletableFuture.supplyAsync(
() -> cockPitMapper.getPersonnelMonthlyProductionList(dayShift), pool); // () -> cockPitMapper.getPersonnelMonthlyProductionList(dayShift), pool);
listPersonnelMonthlyProductionFuture.thenAccept(result -> { // listPersonnelMonthlyProductionFuture.thenAccept(result -> {
map.put("PersonnelMonthlyProduction", result); // map.put("PersonnelMonthlyProduction", result);
}).exceptionally((e) -> { // }).exceptionally((e) -> {
log.error("人员月生产: {}", e.getMessage(), e); // log.error("人员月生产: {}", e.getMessage(), e);
map.put("PersonnelMonthlyProduction", null); // map.put("PersonnelMonthlyProduction", null);
return null; // return null;
}); // });
// 4、生产任务 // 4、生产任务
CompletableFuture<List<ProductTaskVo>> listProductionTaskFuture = CompletableFuture.supplyAsync( CompletableFuture<List<ProductTaskVo>> listProductionTaskFuture = CompletableFuture.supplyAsync(
() -> cockPitMapper.getProductionTaskList(), pool); () -> cockPitMapper.getProductionTaskList(), pool);
@ -69,7 +69,7 @@ public class CockpitServiceImpl implements CockpitService {
map.put("ProductionTask", result); map.put("ProductionTask", result);
}).exceptionally((e) -> { }).exceptionally((e) -> {
log.error("生产任务: {}", e.getMessage(), e); log.error("生产任务: {}", e.getMessage(), e);
map.put("ProductionTask", null); map.put("ProductionTask", e);
return null; return null;
}); });
// 5、当月工单 // 5、当月工单
@ -79,14 +79,13 @@ public class CockpitServiceImpl implements CockpitService {
map.put("MonthlyWorkOrder", result); map.put("MonthlyWorkOrder", result);
}).exceptionally((e) -> { }).exceptionally((e) -> {
log.error("当月工单: {}", e.getMessage(), e); log.error("当月工单: {}", e.getMessage(), e);
map.put("MonthlyWorkOrder", null); map.put("MonthlyWorkOrder", e);
return null; return null;
}); });
// 提交 // 提交
CompletableFuture<Void> allQuery = CompletableFuture.allOf( CompletableFuture<Void> allQuery = CompletableFuture.allOf(
listCompletableFuture, listCompletableFuture,
listShiftProductionFuture, listShiftProductionFuture,
listPersonnelMonthlyProductionFuture,
listProductionTaskFuture, listProductionTaskFuture,
monthlyWorkOrderFuture); monthlyWorkOrderFuture);
CompletableFuture<ConcurrentHashMap<String, Object>> future CompletableFuture<ConcurrentHashMap<String, Object>> future

10
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml

@ -68,12 +68,12 @@
ORDER BY w.team DESC, w.workorder_status ORDER BY w.team DESC, w.workorder_status
</select> </select>
<select id="getMonthlyWorkOrderFutureList" resultType="org.nl.wms.cockpit.service.dao.MonthlyWorkOrderVo"> <select id="getMonthlyWorkOrderFutureList" resultType="org.nl.wms.cockpit.service.dao.MonthlyWorkOrderVo">
SELECT FMATSPEC AS name SELECT FMATSPEC AS "name"
, FORDER_SUBNUM AS order_num , FORDER_SUBNUM AS "order_num"
, GUADANSUM AS guada_num , GUADANSUM AS "guada_num"
, (FORDER_SUBNUM - GUADANSUM) AS residue_num , (FORDER_SUBNUM - GUADANSUM) AS "residue_num"
FROM "RTMG"."VIEW_POP_ORDER_SEMINPRO_LMS" FROM "RTMG"."VIEW_POP_ORDER_SEMINPRO_LMS"
WHERE TO_DATE(FPLANSTART_DATE, 'YYYYMMDD') <![CDATA[ >= ]]> TRUNC(SYSDATE, 'MONTH') WHERE TO_DATE(FPLANSTART_DATE, 'YYYYMMDD') <![CDATA[ >= ]]> TRUNC(SYSDATE, 'MONTH')
AND TO_DATE(FPLANSTART_DATE, 'YYYYMMDD') <![CDATA[ < ]]> ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1); AND TO_DATE(FPLANSTART_DATE, 'YYYYMMDD') <![CDATA[ < ]]> ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1)
</select> </select>
</mapper> </mapper>

9
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java

@ -11,10 +11,15 @@ public interface MdBaseBrickInfoMapper extends BaseMapper<MdBaseBrickInfo> {
/** /**
* 合格数 * 合格数
* @param workorderCode * @param workorderCode 工单号
* @return * @return 数字
*/ */
int getCountQualifiedQty(String workorderCode); int getCountQualifiedQty(String workorderCode);
/**
* 不合格数
* @param workorderCode 工单号
* @return 数字
*/
int getCountUnqualifiedQty(String workorderCode); int getCountUnqualifiedQty(String workorderCode);
} }

1
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/autotask/AutoCallMaterials.java

@ -36,6 +36,7 @@ public class AutoCallMaterials {
List<PdmBdWorkorder> workorderList = workorderService.getNeedCallMaterial(); List<PdmBdWorkorder> workorderList = workorderService.getNeedCallMaterial();
// 判断是否可以叫料,可以就下发给混碾系统 // 判断是否可以叫料,可以就下发给混碾系统
workorderList.forEach(workorder -> { workorderList.forEach(workorder -> {
// 达到工单的数量
if (workorder.getReal_weight().compareTo(workorder.getPlan_weight()) >= 0) { if (workorder.getReal_weight().compareTo(workorder.getPlan_weight()) >= 0) {
// 不需要请求,等待工单完工 // 不需要请求,等待工单完工
return; return;

37
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java

@ -139,7 +139,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String requestMethodName = param.getString("request_medthod_name"); String requestMethodName = param.getString("request_medthod_name");
BaseResponse result = BaseResponse.build(requestNo); BaseResponse result = BaseResponse.build(requestNo);
try { try {
String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名 String requestMethodCode = param.getString("request_medthod_code");
Method method = methodCache.get(StrUtil.toCamelCase(requestMethodCode)); Method method = methodCache.get(StrUtil.toCamelCase(requestMethodCode));
if (method == null) { if (method == null) {
throw new BadRequestException("请求方法不存在"); throw new BadRequestException("请求方法不存在");
@ -318,8 +318,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// mark: 特殊处理 // mark: 特殊处理
protected int specialHandling(String regionCode, JSONObject param) { protected int specialHandling(String regionCode, JSONObject param) {
int torus = 0; // 无业务:0,分拣剩余0托:1 // 无业务:0,分拣剩余0托:1
if (regionCode.equals("FJ")) { // 判断是否够码满 int torus = 0;
// 判断是否够码满
if (regionCode.equals("FJ")) {
// 分拣需要在这设置特殊值 // 分拣需要在这设置特殊值
// 校验是否够码满一托 // 校验是否够码满一托
boolean enoughCallEmpty = workorderService.isEnoughCallEmpty(param.getString("device_code")); boolean enoughCallEmpty = workorderService.isEnoughCallEmpty(param.getString("device_code"));
@ -425,8 +427,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override @Override
public BaseResponse applyGetPutStation(JSONObject param) { public BaseResponse applyGetPutStation(JSONObject param) {
FeedBackSplitPalletStationRequest request = param.toJavaObject(FeedBackSplitPalletStationRequest.class); FeedBackSplitPalletStationRequest request = param.toJavaObject(FeedBackSplitPalletStationRequest.class);
String getStation = request.getGet_station(); // 取货点 String getStation = request.getGet_station();
String putStation = request.getPut_station(); // 放货点 String putStation = request.getPut_station();
// 查找当前点位中的信息,如果acs没有提供,就获取点位上的数据,如果点位没有,则数据失效 // 查找当前点位中的信息,如果acs没有提供,就获取点位上的数据,如果点位没有,则数据失效
SchBasePoint pickupPoint = pointService.getById(getStation); SchBasePoint pickupPoint = pointService.getById(getStation);
SchBasePoint putPoint = pointService.getById(putStation); SchBasePoint putPoint = pointService.getById(putStation);
@ -442,10 +444,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
PdmBdVehicleBinding vehicleBinding = new PdmBdVehicleBinding(); PdmBdVehicleBinding vehicleBinding = new PdmBdVehicleBinding();
vehicleBinding.setOrigin_vehicle_code(request.getGet_station_vehicle_code()); vehicleBinding.setOrigin_vehicle_code(request.getGet_station_vehicle_code());
vehicleBinding.setOrigin_vehicle_type(GeneralDefinition.STEEL_TRAY); vehicleBinding.setOrigin_vehicle_type(GeneralDefinition.STEEL_TRAY);
vehicleBinding.setOrigin_qty(request.getGet_station_qty()); // 当前码垛位的数量 // 当前码垛位的数量
vehicleBinding.setOrigin_qty(request.getGet_station_qty());
vehicleBinding.setTarget_vehicle_code(request.getPut_station_vehicle_code()); vehicleBinding.setTarget_vehicle_code(request.getPut_station_vehicle_code());
vehicleBinding.setTarget_vehicle_type(putPoint.getVehicle_type()); vehicleBinding.setTarget_vehicle_type(putPoint.getVehicle_type());
vehicleBinding.setTarget_qty(request.getPut_station_qty()); // 当前拆垛位的数量 // 当前拆垛位的数量
vehicleBinding.setTarget_qty(request.getPut_station_qty());
vehicleBinding.setGet_station(request.getGet_station()); vehicleBinding.setGet_station(request.getGet_station());
vehicleBinding.setPut_station(request.getPut_station()); vehicleBinding.setPut_station(request.getPut_station());
if (productionTask != null) { if (productionTask != null) {
@ -495,6 +499,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String custerNo = object.getString("custer_no"); String custerNo = object.getString("custer_no");
String orderNo = object.getString("order_no"); String orderNo = object.getString("order_no");
CusterDo custer; CusterDo custer;
// 都是数据就是id,否则就是名称
if (custerNo.matches("\\d+")) { if (custerNo.matches("\\d+")) {
custer = wmsToMesService.getCusterByNo(custerNo); custer = wmsToMesService.getCusterByNo(custerNo);
} else { } else {
@ -692,16 +697,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
mesMudConsumptionDto.setCREATE_TM(DateUtil.now()); mesMudConsumptionDto.setCREATE_TM(DateUtil.now());
mesMudConsumptionDto.setOP_FLAG(GeneralDefinition.NO); mesMudConsumptionDto.setOP_FLAG(GeneralDefinition.NO);
log.info("泥料消耗上报参数:{}", mesMudConsumptionDto); log.info("泥料消耗上报参数:{}", mesMudConsumptionDto);
// 不在维护lms数据表
// PdmBdMudConsumption mudConsumption = new PdmBdMudConsumption();
// mudConsumption.setDevice_code(productionTask.getPoint_code());
// mudConsumption.setGroup_id(one.getGroup_id());
// mudConsumption.setMaterial_id(one.getMaterial_id());
// mudConsumption.setWeight(one.getMaterial_weight());
// mudConsumption.setCurrent_point(basePoint.getPoint_code());
// mudConsumption.setWorkorder_code(productionTask.getWorkorder_code());
// mudConsumption.setRaw_material_code(rawMaterialCode);
// String id = mudConsumptionService.create(mudConsumption);
// 反馈数据给acs // 反馈数据给acs
taskResponse.setMix_number(one.getMix_times()); taskResponse.setMix_number(one.getMix_times());
taskResponse.setIs_standing_finish(GeneralDefinition.YES); taskResponse.setIs_standing_finish(GeneralDefinition.YES);
@ -713,6 +708,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
.eq(PdmBdRequestMaterialRecord::getDevice_code, productionTask.getPoint_code()) .eq(PdmBdRequestMaterialRecord::getDevice_code, productionTask.getPoint_code())
.eq(PdmBdRequestMaterialRecord::getWorkorder_id, productionTask.getWorkorder_code()) // 工单编码 .eq(PdmBdRequestMaterialRecord::getWorkorder_id, productionTask.getWorkorder_code()) // 工单编码
.eq(PdmBdRequestMaterialRecord::getIs_delete, false) .eq(PdmBdRequestMaterialRecord::getIs_delete, false)
.eq(PdmBdRequestMaterialRecord::getIs_finish, true)
.orderByAsc(PdmBdRequestMaterialRecord::getCreate_time)); .orderByAsc(PdmBdRequestMaterialRecord::getCreate_time));
if (list.size() > 0) { if (list.size() > 0) {
PdmBdRequestMaterialRecord record = list.get(0); PdmBdRequestMaterialRecord record = list.get(0);
@ -817,10 +813,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
*/ */
@Deprecated @Deprecated
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public BaseResponse pressRequestMaterial2(JSONObject param) { // (公共接口进来)只是给我一个下料位(中间位置) public BaseResponse pressRequestMaterial2(JSONObject param) {
String requestNo = param.getString("requestNo"); String requestNo = param.getString("requestNo");
// 压机、原材料物料(混碾)、压机工单、叫料时间 // 压机、原材料物料(混碾)、压机工单、叫料时间
String deviceCode = param.getString("device_code");// 几号压机下料位 // 几号压机下料位
String deviceCode = param.getString("device_code");
SchBasePoint basePoint = pointService.getById(deviceCode); SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) { if (ObjectUtil.isEmpty(basePoint)) {
return BaseResponse.responseError(requestNo, "设备号[" + deviceCode + "]不正确!"); return BaseResponse.responseError(requestNo, "设备号[" + deviceCode + "]不正确!");
@ -910,7 +907,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
vehicleType, GroupBindMaterialStatusEnum.BOUND.getValue()); vehicleType, GroupBindMaterialStatusEnum.BOUND.getValue());
String extData = baseVehiclematerialgroup.getExt_data(); String extData = baseVehiclematerialgroup.getExt_data();
PalletizeDto palletizeDto = new PalletizeDto(); PalletizeDto palletizeDto = new PalletizeDto();
if (extData != null && !extData.equals("null")) { if (extData != null && !"null".equals(extData)) {
// 转成实体 // 转成实体
palletizeDto = CommonUtils.toJavaObject(extData, PalletizeDto.class); palletizeDto = CommonUtils.toJavaObject(extData, PalletizeDto.class);
} }

1
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/autotask/AutoSaveWaitGdyInfo.java

@ -43,7 +43,6 @@ public class AutoSaveWaitGdyInfo {
// 存入表中 // 存入表中
list.forEach(mesGdyInfoWaitDto -> { list.forEach(mesGdyInfoWaitDto -> {
mesGdyInfoWaitDto.setMSGID(IdUtil.getSnowflake(1,1).nextIdStr()); mesGdyInfoWaitDto.setMSGID(IdUtil.getSnowflake(1,1).nextIdStr());
mesGdyInfoWaitDto.setSEND_TM(DateUtil.now());
mesGdyInfoWaitDto.setPRO_SUBUNIT("块"); mesGdyInfoWaitDto.setPRO_SUBUNIT("块");
mesGdyInfoWaitDto.setCREATE_TM(DateUtil.now()); mesGdyInfoWaitDto.setCREATE_TM(DateUtil.now());
mesGdyInfoWaitDto.setOP_FLAG(GeneralDefinition.NO); mesGdyInfoWaitDto.setOP_FLAG(GeneralDefinition.NO);

1
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.xml

@ -254,6 +254,7 @@
mm.material_code AS FPRODUCT_MATERIAL_ID, mm.material_code AS FPRODUCT_MATERIAL_ID,
mm.material_name AS FPRODUCT_MATERIAL_NAME, mm.material_name AS FPRODUCT_MATERIAL_NAME,
mm.material_spec AS FMATSPEC, mm.material_spec AS FMATSPEC,
vg.instorage_time AS SEND_TM,
mm.material_model AS FMATMODEL, mm.material_model AS FMATMODEL,
IF(LENGTH(pw.batch_no) > 0,pw.batch_no,'-') AS BATCHNO, IF(LENGTH(pw.batch_no) > 0,pw.batch_no,'-') AS BATCHNO,
p2.ext_point_code AS PRESSUNIT, p2.ext_point_code AS PRESSUNIT,

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dto/MesGdyInfoWaitDto.java

@ -7,7 +7,7 @@ import lombok.Data;
* @Description: 带入窑实体 * @Description: 带入窑实体
* @Date: 2023/9/22 * @Date: 2023/9/22
* 二维码 * 二维码
* 发送时间 * 发送时间: 组盘入库时间
* 托盘编号 * 托盘编号
* 物料编码 * 物料编码
* 物料名称 * 物料名称

9
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/impl/WmsToMmsServiceImpl.java

@ -5,6 +5,8 @@ import org.nl.wms.ext.mms.service.WmsToMmsService;
import org.nl.wms.ext.mms.service.dao.dto.RequestMaterialDto; import org.nl.wms.ext.mms.service.dao.dto.RequestMaterialDto;
import org.nl.wms.ext.mms.service.dao.mapper.MmsRequestMapper; import org.nl.wms.ext.mms.service.dao.mapper.MmsRequestMapper;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -20,6 +22,8 @@ import java.util.Date;
public class WmsToMmsServiceImpl implements WmsToMmsService { public class WmsToMmsServiceImpl implements WmsToMmsService {
@Autowired @Autowired
public MmsRequestMapper mmsRequestMapper; public MmsRequestMapper mmsRequestMapper;
@Autowired
private ISchBasePointService pointService;
@Override @Override
public void addRequestMaterial(PdmBdWorkorder workorder) { public void addRequestMaterial(PdmBdWorkorder workorder) {
// 插入:压机、原材料、生产订单号、插入时间 // 插入:压机、原材料、生产订单号、插入时间
@ -30,11 +34,12 @@ public class WmsToMmsServiceImpl implements WmsToMmsService {
} }
public RequestMaterialDto toRequestMaterialMapper(PdmBdWorkorder workorder) { public RequestMaterialDto toRequestMaterialMapper(PdmBdWorkorder workorder) {
SchBasePoint device = pointService.getById(workorder.getPoint_code());
RequestMaterialDto requestMaterialDto = new RequestMaterialDto(); RequestMaterialDto requestMaterialDto = new RequestMaterialDto();
requestMaterialDto.setDevice_code(workorder.getPoint_code().charAt(workorder.getPoint_code().length() - 1) + ""); requestMaterialDto.setDevice_code(device.getExt_point_code().split("#")[0]);
requestMaterialDto.setMaterial_code(workorder.getRaw_material_code()); requestMaterialDto.setMaterial_code(workorder.getRaw_material_code());
requestMaterialDto.setRequest_date(new Date()); requestMaterialDto.setRequest_date(new Date());
requestMaterialDto.setProduction_order(workorder.getProduction_order()); requestMaterialDto.setProduction_order(workorder.getWorkorder_code());
requestMaterialDto.set_used(false); requestMaterialDto.set_used(false);
return requestMaterialDto; return requestMaterialDto;
} }

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/DropdownListVo.java

@ -6,7 +6,7 @@ import java.io.Serializable;
/** /**
* @Author: lyd * @Author: lyd
* @Description: 下拉框数据 * @Description: 反馈前端下拉框数据
* @Date: 2023/8/1 * @Date: 2023/8/1
*/ */
@Data @Data

8
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/IPdmBdRequestMaterialRecordService.java

@ -7,6 +7,7 @@ import org.nl.wms.pdm.record.service.dao.PdmBdRequestMaterialRecord;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -56,4 +57,11 @@ public interface IPdmBdRequestMaterialRecordService extends IService<PdmBdReques
* @return * @return
*/ */
PdmBdRequestMaterialRecord recordData(PdmBdWorkorder workorder); PdmBdRequestMaterialRecord recordData(PdmBdWorkorder workorder);
/**
* 根据工单优先级排序分配的料盅
* @param materialCode 物料
* @return 记录表
*/
List<PdmBdRequestMaterialRecord> getLeftJoinWorkOrderList(String materialCode);
} }

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dao/mapper/PdmBdRequestMaterialRecordMapper.java

@ -3,10 +3,13 @@ package org.nl.wms.pdm.record.service.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.pdm.record.service.dao.PdmBdRequestMaterialRecord; import org.nl.wms.pdm.record.service.dao.PdmBdRequestMaterialRecord;
import java.util.List;
/** /**
* @author lyd * @author lyd
* @date 2023-07-05 * @date 2023-07-05
**/ **/
public interface PdmBdRequestMaterialRecordMapper extends BaseMapper<PdmBdRequestMaterialRecord> { public interface PdmBdRequestMaterialRecordMapper extends BaseMapper<PdmBdRequestMaterialRecord> {
List<PdmBdRequestMaterialRecord> getLeftJoinWorkOrderList(String materialCode);
} }

11
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dao/mapper/PdmBdRequestMaterialRecordMapper.xml

@ -2,4 +2,15 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.pdm.record.service.dao.mapper.PdmBdRequestMaterialRecordMapper"> <mapper namespace="org.nl.wms.pdm.record.service.dao.mapper.PdmBdRequestMaterialRecordMapper">
<select id="getLeftJoinWorkOrderList"
resultType="org.nl.wms.pdm.record.service.dao.PdmBdRequestMaterialRecord">
SELECT
pdr.*
FROM
`pdm_bd_request_material_record` pdr
LEFT JOIN pdm_bd_workorder w ON w.workorder_code = pdr.workorder_id
WHERE pdr.material_id = #{materialCode}
AND pdr.is_delete = FALSE AND pdr.is_finish = FALSE
ORDER BY w.priority DESC, pdr.create_time
</select>
</mapper> </mapper>

6
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/impl/PdmBdRequestMaterialRecordServiceImpl.java

@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -98,4 +99,9 @@ public class PdmBdRequestMaterialRecordServiceImpl extends ServiceImpl<PdmBdRequ
return entity; return entity;
} }
@Override
public List<PdmBdRequestMaterialRecord> getLeftJoinWorkOrderList(String materialCode) {
return pdmBdRequestMaterialRecordMapper.getLeftJoinWorkOrderList(materialCode);
}
} }

1
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java

@ -95,7 +95,6 @@ public class PdmBdWorkorder implements Serializable {
@ApiModelProperty(value = "工单类型") @ApiModelProperty(value = "工单类型")
private String workorder_type; private String workorder_type;
// todo: 字段未放开
@ApiModelProperty(value = "生产订单号") @ApiModelProperty(value = "生产订单号")
@TableField(exist = false) @TableField(exist = false)
private String production_order; private String production_order;

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java

@ -158,4 +158,6 @@ public class SchBasePoint implements Serializable {
private String material_model; private String material_model;
@TableField(exist = false) @TableField(exist = false)
private String raw_material_code; private String raw_material_code;
@TableField(exist = false)
private String task_warn;
} }

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml

@ -14,7 +14,7 @@
AND p.point_status = '3' AND p.point_status = '3'
AND vg.is_firing = true AND vg.is_firing = true
AND vg.material_id = #{materialId} AND vg.material_id = #{materialId}
AND TIMESTAMPDIFF(MINUTE, vg.instorage_time, NOW()) >= ma.cooling_time AND TIMESTAMPDIFF(HOUR, vg.instorage_time, NOW()) >= ma.cooling_time
AND p.region_code IN AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")"> <foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code} #{code}

28
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java

@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.material.service.IMdBaseMaterialService; import org.nl.wms.database.material.service.IMdBaseMaterialService;
@ -49,6 +50,7 @@ import java.util.stream.Collectors;
*/ */
@Component(value = "HLMLTask") @Component(value = "HLMLTask")
@TaskType("HLMLTask") @TaskType("HLMLTask")
@Slf4j
public class HNMLTask extends AbstractTask { public class HNMLTask extends AbstractTask {
private static final String TASK_CONFIG_CODE = "HLMLTask"; private static final String TASK_CONFIG_CODE = "HLMLTask";
@Autowired @Autowired
@ -120,6 +122,14 @@ public class HNMLTask extends AbstractTask {
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode()); noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode());
continue; continue;
} }
if (ObjectUtil.isNotEmpty(point.getTask_warn())) {
task.setRemark(point.getTask_warn());
taskService.updateById(task);
// 消息通知
noticeService.createNotice("找不到困料点", TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode());
continue;
}
log.info("任务【" + task.getTask_code() + "】叫料标识:{}", point.getRecord_id());
// 叫料完成 // 叫料完成
requestMaterialRecordService.callMaterialFinish(point.getRecord_id(), jsonObject.getBigDecimal("weight")); requestMaterialRecordService.callMaterialFinish(point.getRecord_id(), jsonObject.getBigDecimal("weight"));
// 要料记录 // 要料记录
@ -162,15 +172,12 @@ public class HNMLTask extends AbstractTask {
String materialCode = requestParam.getString("material_code"); String materialCode = requestParam.getString("material_code");
Assert.notNull(materialCode, "物料编码不能为空!"); Assert.notNull(materialCode, "物料编码不能为空!");
materialCode = materialCode.substring(0, 12); materialCode = materialCode.substring(0, 12);
// 获取要料表中的数据,获取对应物料(要料表存的是泥料) // 获取要料表中的数据,获取对应物料(要料表存的是泥料) update: 先工单优先级后时间
List<PdmBdRequestMaterialRecord> list = requestMaterialRecordService.list( List<PdmBdRequestMaterialRecord> list = requestMaterialRecordService.getLeftJoinWorkOrderList(materialCode);
new LambdaQueryWrapper<PdmBdRequestMaterialRecord>()
.eq(PdmBdRequestMaterialRecord::getMaterial_id, materialCode)
.eq(PdmBdRequestMaterialRecord::getIs_delete, false)
.eq(PdmBdRequestMaterialRecord::getIs_finish, false)
.orderByAsc(PdmBdRequestMaterialRecord::getCreate_time));
if (list.size() == 0) { if (list.size() == 0) {
throw new BadRequestException("压机要料表找不到数据,请排查泥料号:[" + materialCode + "]"); SchBasePoint point = new SchBasePoint();
point.setTask_warn("压机要料表找不到数据,请排查泥料号:[" + materialCode + "]");
return point;
} }
// 要料数据 // 要料数据
PdmBdRequestMaterialRecord requestMaterialRecord = list.get(0); PdmBdRequestMaterialRecord requestMaterialRecord = list.get(0);
@ -212,8 +219,10 @@ public class HNMLTask extends AbstractTask {
String endPoint = taskObj.getPoint_code2(); String endPoint = taskObj.getPoint_code2();
SchBasePoint endPointObj = pointService.getById(endPoint); SchBasePoint endPointObj = pointService.getById(endPoint);
String responseParam = taskObj.getResponse_param(); String responseParam = taskObj.getResponse_param();
String requestParam = taskObj.getRequest_param();
JSONObject responseObj = JSONObject.parseObject(responseParam); JSONObject responseObj = JSONObject.parseObject(responseParam);
String recordId = responseObj.getString("record_id"); JSONObject requestObj = JSONObject.parseObject(requestParam);
String recordId = requestObj.getString("record_id");
// 要把数据存到组盘表。压制工单放进去, // 要把数据存到组盘表。压制工单放进去,
SchBaseVehiclematerialgroup groupEntity = vehiclematerialgroupService.getOne( SchBaseVehiclematerialgroup groupEntity = vehiclematerialgroupService.getOne(
new LambdaQueryWrapper<SchBaseVehiclematerialgroup>() new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
@ -302,6 +311,7 @@ public class HNMLTask extends AbstractTask {
// 泥料编码: 吨袋号,泥料前 // 泥料编码: 吨袋号,泥料前
String packNo = param.getString("material_code"); String packNo = param.getString("material_code");
String materialCode = packNo.substring(0, 12); String materialCode = packNo.substring(0, 12);
// todo: 如果没找到就报错,就不创建组盘信息
// 碾次 // 碾次
String mixTimes = packNo.substring(18, packNo.length()); String mixTimes = packNo.substring(18, packNo.length());
// 载具类型默认料盅 // 载具类型默认料盅

60
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/GracefulShutdownConfig.java

@ -0,0 +1,60 @@
//package org.nl.wms.util;
//
//import org.apache.catalina.connector.Connector;
//import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
//import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
//import org.springframework.context.ApplicationListener;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.event.ContextClosedEvent;
//
//import java.util.concurrent.Executor;
//import java.util.concurrent.ThreadPoolExecutor;
//import java.util.concurrent.TimeUnit;
//
///**
// * @Author: lyd
// * @Description: 优雅停机
// * @Date: 2023/12/21
// */
//@Configuration
//public class GracefulShutdownConfig {
// @Bean
// public GracefulShutdown gracefulShutdown() {
// return new GracefulShutdown();
// }
//
// @Bean
// public TomcatServletWebServerFactory webServerFactory(final GracefulShutdown gracefulShutdown) {
// TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
// factory.addConnectorCustomizers(gracefulShutdown);
// return factory;
// }
//
// private static class GracefulShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {
// private volatile Connector connector;
//
// @Override
// public void customize(Connector connector) {
// this.connector = connector;
// }
//
// @Override
// public void onApplicationEvent(ContextClosedEvent event) {
// this.connector.pause();
// Executor executor = this.connector.getProtocolHandler().getExecutor();
// if (executor instanceof ThreadPoolExecutor) {
// ThreadPoolExecutor threadPoolExecutor = null;
// try {
// threadPoolExecutor = (ThreadPoolExecutor) executor;
// threadPoolExecutor.shutdown();
// if (!threadPoolExecutor.awaitTermination(30, TimeUnit.SECONDS)) {
// threadPoolExecutor.shutdownNow();
// }
// } catch (InterruptedException ex) {
// threadPoolExecutor.shutdownNow();
// }
// }
// }
// }
//}

54
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/LogbackQueueMonitor.java

@ -0,0 +1,54 @@
package org.nl.wms.util;
import ch.qos.logback.classic.AsyncAppender;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.Appender;
import org.slf4j.LoggerFactory;
/**
* @Author: lyd
* @Description:
* @Date: 2023/12/22
*/
public class LogbackQueueMonitor {
public static void main(String[] args) {
// 获取 LoggerContext
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
// 获取 AsyncAppender
AsyncAppender asyncAppender = getAsyncAppender(loggerContext);
// 监控队列大小
monitorQueueSize(asyncAppender);
}
private static AsyncAppender getAsyncAppender(LoggerContext loggerContext) {
Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
// 替换为你实际的 Appender 名称
Appender appender = rootLogger.getAppender("asyncFileAppender");
if (appender instanceof AsyncAppender) {
return (AsyncAppender) appender;
} else {
throw new IllegalStateException("AsyncAppender not found");
}
}
private static void monitorQueueSize(AsyncAppender asyncAppender) {
new Thread(() -> {
while (true) {
try {
// 每隔5秒监控一次
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
int queueSize = asyncAppender.getQueueSize();
System.out.println("AsyncAppender Queue Size: " + queueSize);
}
}).start();
}
}

1
lms/nladmin-system/nlsso-server/src/main/resources/ext.dic

@ -28,3 +28,4 @@
记录自动要料信息 记录自动要料信息
自动下发混碾 自动下发混碾
下发混碾失败 下发混碾失败
看板【当月工单】日志

36
lms/nladmin-system/nlsso-server/src/test/java/org/nl/ext/TestDemo.java

@ -1,5 +1,9 @@
package org.nl.ext; package org.nl.ext;
import ch.qos.logback.classic.AsyncAppender;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.Appender;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
@ -9,6 +13,7 @@ import org.nl.common.utils.CodeUtil;
import org.nl.wms.ext.acs.service.dto.to.wms.ApplyDeviceDto; import org.nl.wms.ext.acs.service.dto.to.wms.ApplyDeviceDto;
import org.nl.wms.ext.mes.service.WmsToMesService; import org.nl.wms.ext.mes.service.WmsToMesService;
import org.nl.wms.ext.mes.service.dao.mapper.MesRequestMapper; import org.nl.wms.ext.mes.service.dao.mapper.MesRequestMapper;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@ -151,9 +156,32 @@ public class TestDemo {
} }
@Test @Test
void testNumberStr() { void testNumberStr() {
System.out.println("1234564".matches("\\d+")); // 获取 LoggerContext
System.out.println("1234你好564".matches("\\d+")); ch.qos.logback.classic.LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
System.out.println(DateUtil.format(DateUtil.date(), "yyMMdd"));
System.out.println(String.format("%03d", 12)); // 获取 AsyncAppender
AsyncAppender asyncAppender = getAsyncAppender(loggerContext);
// 监控队列大小
monitorQueueSize(asyncAppender);
}
private static AsyncAppender getAsyncAppender(LoggerContext loggerContext) {
Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
// 替换为你实际的 Appender 名称
Appender appender = rootLogger.getAppender("asyncFileAppender");
if (appender instanceof AsyncAppender) {
return (AsyncAppender) appender;
} else {
throw new IllegalStateException("AsyncAppender not found");
}
} }
private static void monitorQueueSize(AsyncAppender asyncAppender) {
while (true) {
int queueSize = asyncAppender.getQueueSize();
System.out.println("AsyncAppender Queue Size: " + queueSize);
}
}
} }

4
lms/nladmin-ui/src/views/wms/basedata/material/index.vue

@ -122,7 +122,7 @@
style="width: 240px;" style="width: 240px;"
/> />
</el-form-item> </el-form-item>
<el-form-item label="冷却时间(分钟)"> <el-form-item label="冷却时间(小时)">
<el-input-number <el-input-number
v-model.number="form.cooling_time" v-model.number="form.cooling_time"
:min="0" :min="0"
@ -172,7 +172,7 @@
<el-table-column prop="material_spec" label="物料规格" :min-width="flexWidth('material_spec',crud.data,'物料规格')" /> <el-table-column prop="material_spec" label="物料规格" :min-width="flexWidth('material_spec',crud.data,'物料规格')" />
<el-table-column prop="material_model" label="物料型号" :min-width="flexWidth('material_model',crud.data,'物料分类标识')" /> <el-table-column prop="material_model" label="物料型号" :min-width="flexWidth('material_model',crud.data,'物料分类标识')" />
<el-table-column prop="standing_time" label="静置时间(分钟)" :min-width="flexWidth('standing_time',crud.data,'静置时间(分钟)')" /> <el-table-column prop="standing_time" label="静置时间(分钟)" :min-width="flexWidth('standing_time',crud.data,'静置时间(分钟)')" />
<el-table-column prop="cooling_time" label="冷却时间(分钟)" :min-width="flexWidth('cooling_time',crud.data,'静置时间(分钟)')" /> <el-table-column prop="cooling_time" label="冷却时间(小时)" :min-width="flexWidth('cooling_time',crud.data,'静置时间(分钟)')" />
<!-- <el-table-column prop="workshop_code" label="车间编码" :min-width="flexWidth('workshop_code',crud.data,'车间编码')" />--> <!-- <el-table-column prop="workshop_code" label="车间编码" :min-width="flexWidth('workshop_code',crud.data,'车间编码')" />-->
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" /> <el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="is_used" label="是否启用" :min-width="flexWidth('is_used',crud.data,'是否启用')"> <el-table-column prop="is_used" label="是否启用" :min-width="flexWidth('is_used',crud.data,'是否启用')">

75
lms/nladmin-ui/src/views/wms/sch/task/editTaskDialog.vue

@ -0,0 +1,75 @@
<template>
<el-dialog
title="任务编辑"
append-to-body
:visible.sync="dialogVisible"
destroy-on-close
width="750px"
@close="close"
@open="open"
>
<el-form label-width="180px">
<el-form-item v-for="(value, key) in jsonData" :label="key" :key="key">
<el-input v-model="jsonData[key]"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="saveData">保存</el-button>
</el-form-item>
</el-form>
</el-dialog>
</template>
<script>
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
name: 'EditTaskDialog',
props: {
dialogShow: {
type: Boolean,
default: false
},
rowData: {
type: Object,
default: null
}
},
data() {
return {
dialogVisible: false,
tableRadio: null,
jsonData: {},
tableData: []
}
},
watch: {
dialogShow: {
handler(newValue) {
this.dialogVisible = newValue
}
}
},
methods: {
saveData() {
},
clickChange(item) {
this.tableRadio = item
},
open() {
console.log(this.rowData)
this.jsonData = JSON.parse(this.rowData.request_param)
},
close() {
this.crud.resetQuery(false)
this.$emit('update:dialogShow', false)
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .el-dialog__body {
padding-top: 0px;
}
</style>
Loading…
Cancel
Save