Browse Source

add: mes对接、日志优化

master
李永德 2 years ago
parent
commit
540efe8478
  1. 0
      lms/nladmin-system/logPath_IS_UNDEFINED/XgAgvDeviceDriver/DEVICECODE_IS_UNDEFINED/2023-09-09.0.log
  2. 25
      lms/nladmin-system/nlsso-server/pom.xml
  3. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java
  4. 12
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/CodeUtil.java
  5. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java
  6. 14
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java
  7. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java
  8. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java
  9. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java
  10. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/MdBaseBrickInfo.java
  11. 6
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java
  12. 12
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/controller/MdBaseMaterialController.java
  13. 15
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java
  14. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java
  15. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java
  16. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BrickInfoDto.java
  17. 20
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/ApplyTaskResponse.java
  18. 112
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  19. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java
  20. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/MesToWmsService.java
  21. 15
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java
  22. 30
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.java
  23. 73
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.xml
  24. 34
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dto/MesMudConsumptionDto.java
  25. 62
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dto/MesWorkOrderDto.java
  26. 29
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dto/ResultForMes.java
  27. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java
  28. 127
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java
  29. 12
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/WmsToMmsService.java
  30. 26
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/dao/dto/RequestMaterialDto.java
  31. 14
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/dao/mapper/MmsRequestMapper.java
  32. 9
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/dao/mapper/MmsRequestMapper.xml
  33. 41
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/impl/WmsToMmsServiceImpl.java
  34. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java
  35. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/consumption/service/IPdmBdMudConsumptionService.java
  36. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/consumption/service/dao/PdmBdMudConsumption.java
  37. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/consumption/service/impl/PdmBdMudConsumptionServiceImpl.java
  38. 13
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java
  39. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/IPdmBdWorkorderService.java
  40. 13
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java
  41. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml
  42. 6
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/vo/AcsWorkOrderVo.java
  43. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java
  44. 8
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java
  45. 16
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoCreateTask.java
  46. 10
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java
  47. 36
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/GroupBindMaterialStatusEnum.java
  48. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/TaskFinishedTypeEnum.java
  49. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java
  50. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java
  51. 19
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.xml
  52. 41
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java
  53. 27
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java
  54. 11
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java
  55. 14
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java
  56. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSLTask.java
  57. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml
  58. 17
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java
  59. 332
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java
  60. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java
  61. 342
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java
  62. 8
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java
  63. 70
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/MesUtils.java
  64. 55
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/OracleJDBCExample.java
  65. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java
  66. 23
      lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
  67. 22
      lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml
  68. 25
      lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml
  69. 12
      lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
  70. 26
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java
  71. 24
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/ext/TestDemo.java
  72. 2
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java
  73. 25
      lms/nladmin-ui/src/views/wms/basedata/material/index.vue
  74. 10
      lms/nladmin-ui/src/views/wms/basedata/material/mdBaseMaterial.js
  75. 2
      lms/nladmin-ui/src/views/wms/pdm/consumption/index.vue
  76. 22
      lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue
  77. 11
      lms/nladmin-ui/src/views/wms/pdm/workerorder/pdmBdWorkorder.js
  78. 3
      lms/nladmin-ui/src/views/wms/sch/group/WorkOrderDialog.vue
  79. 39
      lms/nladmin-ui/src/views/wms/sch/group/index.vue

0
lms/nladmin-system/logPath_IS_UNDEFINED/XgAgvDeviceDriver/DEVICECODE_IS_UNDEFINED/2023-09-09.0.log

25
lms/nladmin-system/nlsso-server/pom.xml

@ -33,6 +33,25 @@
</properties>
<dependencies>
<!-- 日志链路追踪 https://tlog.yomahub.com/pages/f62a84/#%E5%90%8C%E6%AD%A5%E6%97%A5%E5%BF%97-->
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>tlog-all-spring-boot-starter</artifactId>
<version>1.5.0</version>
</dependency>
<!--sqlserver-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.4.0.jre8</version>
<scope>runtime</scope>
</dependency>
<!--ORACLE-->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc5</artifactId>
<version>11.2.0.4</version>
</dependency>
<!-- dynamic-datasource -->
<dependency>
<groupId>com.baomidou</groupId>
@ -344,12 +363,6 @@
<version>2.5.14</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc5</artifactId>
<version>11.2.0.4</version>
</dependency>
<!-- https://www.jianshu.com/p/e40d111c7bfc?utm_source=oschina-app 热部署 https://zhuanlan.zhihu.com/p/63381268-->

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java

@ -30,9 +30,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(hidden = true)
@SpringBootApplication(exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
DataSourceAutoConfiguration.class,
DruidDataSourceAutoConfigure.class
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
@ServletComponentScan //https://blog.csdn.net/qq_36850813/article/details/101194250
@EnableTransactionManagement

12
lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/CodeUtil.java

@ -8,11 +8,13 @@ import java.util.*;
public class CodeUtil {
public static String getNewCode(String ruleCode){
String flag = "1";
HashMap<String,String> map = new HashMap<>();
map.put("flag",flag);
map.put("code",ruleCode);
return SpringContextHolder.getBean(ISysCodeRuleService.class).codeDemo(map);
synchronized (ruleCode){
String flag = "1";
HashMap<String,String> map = new HashMap<>();
map.put("flag",flag);
map.put("code",ruleCode);
return SpringContextHolder.getBean(ISysCodeRuleService.class).codeDemo(map);
}
}

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java

@ -38,4 +38,7 @@ public class LogMessageConstant {
public final static String COLOR_RESET = "\u001B[0m";
/** 背景颜色:黄色 */
public final static String BACKGROUND_YELLOW = "\u001B[43m";
/** 索引路径 */
public final static String INDEX_DIR = "D:\\lucene\\index";
}

14
lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java

@ -27,12 +27,12 @@ public class LuceneAppender extends AppenderBase<ILoggingEvent> {
private Directory index;
private IndexWriter indexWriter;
@Override
public void start() {
super.start();
String indexPath = "C:\\lucene\\index";
try {
index = FSDirectory.open(Paths.get(indexPath));
index = FSDirectory.open(Paths.get(LogMessageConstant.INDEX_DIR));
} catch (IOException e) {
e.printStackTrace();
}
@ -58,15 +58,11 @@ public class LuceneAppender extends AppenderBase<ILoggingEvent> {
doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, formattedDateTime,Field.Store.YES));
doc.add(new StoredField(LogMessageConstant.FIELD_CLASS_NAME, event.getLoggerName()));
doc.add(new StoredField(LogMessageConstant.FIELD_THREAD, event.getThreadName()));
if (ObjectUtil.isNotEmpty(mdcPropertyMap)) {
if (ObjectUtil.isNotEmpty(mdcPropertyMap) && ObjectUtil.isNotEmpty(mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID))) {
String traceId = mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID);
if (ObjectUtil.isNotEmpty(traceId)) {
doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, traceId,Field.Store.YES));
} else {
doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, "无生成链路ID",Field.Store.YES));
}
doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, traceId, Field.Store.YES));
} else {
doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, "无生成链路ID",Field.Store.YES));
doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, "无生成链路ID", Field.Store.YES));
}
doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, message, Field.Store.YES));
try {

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java

@ -46,7 +46,7 @@ public class Searcher {
int start = pageNum * pageSize;// 当前页的起始条数
int end = start + pageSize;// 当前页的结束条数(不能包含)
// 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序
Sort sort = new Sort(new SortField("timestamp", SortField.Type.DOC,true));
Sort sort = new Sort(new SortField(LogMessageConstant.FIELD_TIMESTAMP, SortField.Type.DOC,true));
TopDocs docs = null;
BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
@ -110,7 +110,7 @@ public class Searcher {
LogMessageConstant.COLOR_MAGENTA + doc.get(LogMessageConstant.FIELD_CLASS_NAME) +
LogMessageConstant.COLOR_RESET + " - " +
LogMessageConstant.COLOR_BLACK + highlightKeyword(doc.get(LogMessageConstant.FIELD_MESSAGE), whereJson.getString("message"));
System.out.println(logInfo);
// System.out.println(logInfo);
list.add(logInfo);
}
reader.close();

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java

@ -20,6 +20,7 @@ import org.nl.system.service.coderule.dao.mapper.SysCodeRuleMapper;
import org.nl.system.service.coderule.utils.CodeRuleTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
@ -56,7 +57,8 @@ public class SysCodeRuleServiceImpl extends ServiceImpl<SysCodeRuleMapper, SysCo
}
@Override
public synchronized String codeDemo(Map form) {
@Transactional(propagation= Propagation.REQUIRES_NEW)
public String codeDemo(Map form) {
String code = (String) form.get("code");
String id = codeRuleMapper.selectOne(new LambdaQueryWrapper<SysCodeRule>().eq(SysCodeRule::getCode, code)).getId();
// 如果flag = 1就执行更新数据库的操作

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java

@ -12,6 +12,7 @@ import org.nl.system.service.quartz.dao.SysQuartzJob;
import org.nl.system.service.quartz.dao.SysQuartzLog;
import org.nl.system.service.quartz.dao.mapper.SysQuartzLogMapper;
import org.nl.system.service.quartz.impl.SysQuartzJobServiceImpl;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.annotation.Async;
@ -28,6 +29,7 @@ import java.util.concurrent.ThreadPoolExecutor;
@Async
@SuppressWarnings({"unchecked", "all"})
@Slf4j
@DisallowConcurrentExecution
public class ExecutionJob extends QuartzJobBean {
/**

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/MdBaseBrickInfo.java

@ -39,6 +39,8 @@ public class MdBaseBrickInfo implements Serializable {
@ApiModelProperty(value = "碾次")
private String grinding_number;
@ApiModelProperty(value = "重量")
private String weight;
@ApiModelProperty(value = "高度1")
private String height1;

6
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java

@ -1,19 +1,16 @@
package org.nl.wms.database.brick.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.database.brick.service.IMdBaseBrickInfoService;
import org.nl.wms.database.brick.service.dao.mapper.MdBaseBrickInfoMapper;
import org.nl.wms.database.brick.service.dao.MdBaseBrickInfo;
import org.nl.wms.database.brick.service.dao.mapper.MdBaseBrickInfoMapper;
import org.nl.wms.ext.acs.service.dto.BrickInfoDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -84,6 +81,7 @@ public class MdBaseBrickInfoServiceImpl extends ServiceImpl<MdBaseBrickInfoMappe
brickInfo.setIs_qualified(dto.getIs_qualified().equals("1"));
brickInfo.setLaser_marking_code(dto.getLaser_marking_code());
brickInfo.setGrinding_number(dto.getGrinding_number());
brickInfo.setWeight(dto.getWeight());
brickInfo.setHeight1(dto.getHeight1());
brickInfo.setHeight2(dto.getHeight2());
brickInfo.setHeight3(dto.getHeight3());

12
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/controller/MdBaseMaterialController.java

@ -8,6 +8,7 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.ext.mes.service.WmsToMesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@ -28,6 +29,8 @@ public class MdBaseMaterialController {
@Autowired
private IMdBaseMaterialService mdBaseMaterialService;
@Autowired
private WmsToMesService wmsToMesService;
@GetMapping
@Log("查询物料基础信息")
@ -63,4 +66,13 @@ public class MdBaseMaterialController {
mdBaseMaterialService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/synchronize")
@Log("物料同步")
@ApiOperation("物料同步")
//@SaCheckPermission("materialtype:list")
public ResponseEntity<Object> synchronize(@RequestBody Map whereJson) {
wmsToMesService.synchronizeMaterialInfo();
return new ResponseEntity<>(HttpStatus.OK);
}
}

15
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java

@ -83,4 +83,19 @@ public class MdBaseMaterial implements Serializable {
@ApiModelProperty(value = "外部标识")
private String ext_id;
@ApiModelProperty(value = "外部时间")
private String ext_time;
@ApiModelProperty(value = "物料型号")
private String material_model;
@ApiModelProperty(value = "物料单重")
private String single_weight;
@ApiModelProperty(value = "A")
private String a_long_side;
@ApiModelProperty(value = "B")
private String b_short_side;
@ApiModelProperty(value = "H")
private String h_height;
@ApiModelProperty(value = "W")
private String w_thickness;
}

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java

@ -16,8 +16,10 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.database.material.service.dao.mapper.MdBaseMaterialMapper;
import org.nl.wms.ext.mes.service.dao.mapper.MesRequestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@ -36,6 +38,8 @@ public class MdBaseMaterialServiceImpl extends ServiceImpl<MdBaseMaterialMapper,
@Autowired
private MdBaseMaterialMapper mdBaseMaterialMapper;
@Autowired
private MesRequestMapper mesRequestMapper;
@Override
public IPage<MdBaseMaterial> queryAll(Map whereJson, PageQuery page){

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java

@ -24,13 +24,11 @@ import org.springframework.web.bind.annotation.RestController;
@Api(tags = "acs请求lms")
@RequestMapping("/api/wms")
@Slf4j
@SaIgnore
public class AcsToWmsController {
@Autowired
private AcsToWmsService acsToWmsService;
@PostMapping("/apply")
@Log("新增任务管理")
@ApiOperation("新增任务管理")
@SaIgnore
public ResponseEntity<Object> apply(@RequestBody JSONObject param) {

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

@ -20,6 +20,8 @@ public class BrickInfoDto extends BaseRequest {
private String laser_marking_code;
/** 碾次 **/
private String grinding_number;
/** 重量 */
private String weight;
/** 高度1 **/
private String height1;
/** 高度2 **/

20
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/ApplyTaskResponse.java

@ -17,6 +17,8 @@ public class ApplyTaskResponse extends BaseResponse {
*/
private String is_package;
private String mix_number;
private String weight;
private String label_message;
public static ApplyTaskResponse responseOk(String requestNo) {
ApplyTaskResponse response = new ApplyTaskResponse();
@ -27,4 +29,22 @@ public class ApplyTaskResponse extends BaseResponse {
return response;
}
public static ApplyTaskResponse responseOk(String requestNo, String message) {
ApplyTaskResponse response = new ApplyTaskResponse();
response.setRequestNo(requestNo);
response.setMessage("任务申请成功");
response.setResponseDate(DateUtil.now());
response.setCode(HttpStatus.HTTP_OK);
response.setLabel_message(message);
return response;
}
public static ApplyTaskResponse responseError(String requestNo, String message) {
ApplyTaskResponse response = new ApplyTaskResponse();
response.setRequestNo(requestNo);
response.setCode(HttpStatus.HTTP_BAD_REQUEST);
response.setMessage(message);
response.setResponseDate(DateUtil.now());
return response;
}
}

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

@ -5,24 +5,26 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.config.MapOf;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.das.inspection.service.IDasQualityInspectionService;
import org.nl.wms.database.brick.service.IMdBaseBrickInfoService;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.ext.acs.service.dto.*;
import org.nl.wms.ext.acs.service.dto.to.wms.*;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.nl.wms.ext.acs.service.dto.BrickInfoDto;
import org.nl.wms.ext.acs.service.dto.PalletizeDto;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.acs.service.dto.to.acs.ApplyTaskResponse;
import org.nl.wms.ext.acs.service.dto.to.acs.GetPalletizeResponse;
import org.nl.wms.ext.acs.service.dto.to.wms.*;
import org.nl.wms.ext.mes.service.WmsToMesService;
import org.nl.wms.ext.mes.service.dto.MesMudConsumptionDto;
import org.nl.wms.ext.mms.service.WmsToMmsService;
import org.nl.wms.ext.record.service.ISysInteractRecordService;
import org.nl.wms.pdm.consumption.service.IPdmBdMudConsumptionService;
import org.nl.wms.pdm.consumption.service.dao.PdmBdMudConsumption;
@ -58,8 +60,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
/**
@ -71,6 +76,9 @@ import java.util.concurrent.TimeUnit;
@Service
public class AcsToWmsServiceImpl implements AcsToWmsService {
// 反射类方法的缓存
private Map<String, Method> methodCache = new ConcurrentHashMap<>();
@Autowired
private ISchBaseTaskService taskService;
@Autowired
@ -83,7 +91,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
@Autowired
private TaskFactory taskFactory;
@Autowired
private ISysNoticeService noticeService;
@Autowired
@ -104,6 +111,20 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private IPdmBdVehicleBindingService vehicleBindingService;
@Autowired
private IPdmBdMudConsumptionService mudConsumptionService;
@Autowired
private WmsToMesService wmsToMesService;
@Autowired
private WmsToMmsService wmsToMmsService;
// 初始化反射方法
@PostConstruct
public void initCacheMethod() {
for (Method method : this.getClass().getMethods()) {
if (method.getParameterCount() == 1 && method.getParameterTypes()[0] == JSONObject.class) {
methodCache.put(method.getName(), method);
}
}
}
@Override
public BaseResponse acsApply(JSONObject param) {
@ -112,10 +133,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
BaseResponse result = BaseResponse.build(requestNo);
try {
String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名
if (ObjectUtil.isEmpty(requestMethodCode)) {
throw new BadRequestException("请求参数错误");
Method method = methodCache.get(StrUtil.toCamelCase(requestMethodCode));
if (method == null) {
throw new BadRequestException("请求方法不存在");
}
Method method = this.getClass().getMethod(StrUtil.toCamelCase(requestMethodCode), JSONObject.class);
result = (BaseResponse) method.invoke(this, param);
} catch (Exception e) {
String message = ObjectUtil.isEmpty(e.getMessage())
@ -260,6 +281,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String configCode = basePoint.getRegion_code() + "MLTask";
// 组织参数
param.put("config_code", configCode);
param.put("special_param", specialHandling(basePoint.getRegion_code()));
taskService.apply(param);
}
} finally {
@ -270,6 +292,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return ApplyTaskResponse.responseOk(requestNo);
}
// todo: 特殊处理
protected String specialHandling(String regionCode) {
if (regionCode.equals("FJ")) {
// 分拣需要在这设置特殊值
}
return null;
}
/**
* 任务申请强制取走满料盅托盘(强制入库)
*
@ -304,7 +334,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
/**
* 任务申请强制满托入缓存 todo: 暂时
* 任务申请强制满托入缓存 todo: 暂时=分拣剩料回库
*
* @param param: ApplyTaskRequest的json形式
* @return
@ -397,12 +427,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
* 申请贴标
*/
@Override
public BaseResponse applyLabelling(JSONObject param) {
public ApplyTaskResponse applyLabelling(JSONObject param) {
// 木托盘号##物料编码##数量##吨量(单重X数量)##生产日期## todo: 成型工单号(未添加)
String requestNo = param.getString("requestNo");
ApplyTaskRequest baseRequest = param.toJavaObject(ApplyTaskRequest.class);
if (baseRequest.getVehicle_code() == null) {
return BaseResponse.responseError(requestNo, "载具编码不能为空!");
return ApplyTaskResponse.responseError(requestNo, "载具编码不能为空!");
}
StringBuilder sb = new StringBuilder();
SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getGroupInfo(baseRequest.getVehicle_code(),
@ -414,7 +444,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
.append(baseMaterial.getMaterial_code()).append("##")
.append("吨量").append("##")
.append(DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
return BaseResponse.responseOk(requestNo, MapOf.of("labelling", sb.toString()));
return ApplyTaskResponse.responseOk(requestNo, sb.toString());
}
/**
@ -493,15 +523,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
/**
* 扫码成功申请 - 判断是否静置完成
* todo: 需要返回泥料重量
*/
@Override
public ApplyTaskResponse isStandingFinish(ApplyTaskRequest baseRequest) {
log.info("扫码成功申请 - 判断是否静置完成: {}", baseRequest);
String requestNo = baseRequest.getRequestNo();
ApplyTaskResponse taskResponse = ApplyTaskResponse.responseOk(requestNo);
SchBasePoint basePoint = pointService.getById(baseRequest.getDevice_code());
if (ObjectUtil.isEmpty(baseRequest.getVehicle_code())) {
throw new BadRequestException("载具编码不能为空!");
}
baseRequest.setVehicle_code(TaskUtils.defaultVehicleCode(baseRequest.getVehicle_code()));
if (ObjectUtil.isEmpty(baseRequest.getVehicle_type())) {
baseRequest.setVehicle_type(GeneralDefinition.MATERIAL_CUP);
}
@ -518,7 +551,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (ObjectUtil.isEmpty(productionTask)) {
throw new BadRequestException("压机" + yjDeviceCode + "工单不存在!");
}
String rawMaterialCode = productionTask.getRaw_material_code();
// 泥料
// todo: 暂时写死
// String rawMaterialCode = productionTask.getRaw_material_code();
String rawMaterialCode = one.getRedundance_material_code();
if (!rawMaterialCode.equals(one.getRedundance_material_code())) {
throw new BadRequestException("物料不一样!");
}
@ -535,18 +571,33 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
TaskUtils.setGroupUpdateByAcs(one);
vehiclematerialgroupService.updateById(one);
// 记录泥料
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);
mudConsumptionService.create(mudConsumption);
MesMudConsumptionDto mesMudConsumptionDto = new MesMudConsumptionDto();
mesMudConsumptionDto.setMSGID(IdUtil.simpleUUID());
mesMudConsumptionDto.setPWORKSCHE_ID(productionTask.getWorkorder_code());
mesMudConsumptionDto.setOUT_FINNUM(String.valueOf(one.getMaterial_weight()));
mesMudConsumptionDto.setPRESSUNIT(basePoint.getExt_point_code());
mesMudConsumptionDto.setFBAGCODE("吨袋号未设置");
mesMudConsumptionDto.setLOGT("仓库未知");
mesMudConsumptionDto.setSENDTIM(DateUtil.now());
mesMudConsumptionDto.setCREATE_TM(DateUtil.now());
mesMudConsumptionDto.setOP_FLAG(GeneralDefinition.NO);
// 不在维护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);
// 回传给mes系统
wmsToMesService.reportMudConsumption(mesMudConsumptionDto);
// 反馈数据给acs
taskResponse.setMix_number(one.getMix_times());
taskResponse.setIs_standing_finish(GeneralDefinition.YES);
taskResponse.setMessage("静置完成");
taskResponse.setWeight(one.getMaterial_weight().toString());
return taskResponse;
} else {
taskResponse.setIs_standing_finish(GeneralDefinition.NO);
@ -560,9 +611,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
*/
@Override
public ApplyTaskResponse recordKilnTime(ApplyTaskRequest baseRequest) {
log.info("扫码成功申请 - 入窑记录时间的参数: {}", baseRequest);
if (ObjectUtil.isEmpty(baseRequest.getVehicle_code())) {
throw new BadRequestException("载具编码不能为空");
}
baseRequest.setVehicle_code(TaskUtils.defaultVehicleCode(baseRequest.getVehicle_code()));
if (ObjectUtil.isEmpty(baseRequest.getVehicle_type())) {
baseRequest.setVehicle_type(GeneralDefinition.STEEL_TRAY);
}
@ -601,6 +654,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
*/
@Override
public BaseResponse pressRequestMaterial(JSONObject param) {
log.info("压机请求叫料的参数:{}", param);
// 换成acs请求
ApplyTaskRequest request = param.toJavaObject(ApplyTaskRequest.class);
String deviceCode = request.getDevice_code();
@ -615,10 +669,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
SchBasePoint devicePoint = pointService.getById(basePoint.getParent_point_code());
// 1、校验是否有工单,是否需要叫料
PdmBdWorkorder deviceProductionTask = workorderService.getByCode(request.getOrder_code());
if (ObjectUtil.isNotEmpty(deviceProductionTask)) {
if (ObjectUtil.isEmpty(deviceProductionTask)) {
throw new BadRequestException("压机" + deviceCode + "暂无生产的工单");
}
// todo: 2、通知混碾机生产泥料
// 2、通知混碾机生产泥料 - 直接存入混碾系统的数据库中
try {
wmsToMmsService.addRequestMaterial(deviceProductionTask);
} catch (Exception e) {
log.error("发送混碾失败");
throw new BadRequestException("发送混碾失败");
}
// 3、修改设备点位为空位,并且更新时间
PointUtils.setUpdateByAcs(devicePoint);
PointUtils.clearPoint(devicePoint);
@ -767,7 +827,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
schBasePoint.setVehicle_type(vehicleType);
}
if (ObjectUtil.isNotEmpty(action)) {
schBasePoint.setIs_used(action.equals(GeneralDefinition.YES));
schBasePoint.setIs_used(!action.equals(GeneralDefinition.NO));
}
// move为空则表示无货
schBasePoint.setPoint_status(move == null ? PointStatusEnum.EMPTY_POINT.getCode() : move);

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

@ -1,5 +1,6 @@
package org.nl.wms.ext.acs.service.impl;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
@ -31,6 +32,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
public AcsResponse order(List<AcsWorkOrderVo> list) {
String api = "api/wms/order";
AcsResponse resultForAcs = AcsUtil.notifyAcs2(api, IssueAcsRequest.buildRequestObj("下发工单", list));
resultForAcs.setMessage(JSON.toJSONString(resultForAcs.getErrArr()));
// 记录日志
interactRecordService.saveRecord("下发工单", list, resultForAcs, GeneralDefinition.LMS_ACS);
return resultForAcs;

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

@ -13,5 +13,6 @@ public interface MesToWmsService {
* @param param
* @return
*/
@Deprecated
JSONObject downOrderForMes(JSONObject param);
}

15
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java

@ -1,9 +1,24 @@
package org.nl.wms.ext.mes.service;
import org.nl.wms.ext.mes.service.dto.MesMudConsumptionDto;
/**
* @Author: lyd
* @Description: wms请求acs
* @Date: 2023/8/3
*/
public interface WmsToMesService {
/**
* wms上报mes泥料消耗记录
*/
void reportMudConsumption(MesMudConsumptionDto mesMudConsumptionDto);
/**
* 同步物料数据
*/
void synchronizeMaterialInfo();
/**
* 同步工单数据
*/
void synchronizeWorkOrderInfo();
}

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

@ -0,0 +1,30 @@
package org.nl.wms.ext.mes.service.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.ext.mes.service.dto.MesWorkOrderDto;
import org.nl.wms.ext.mes.service.dto.MesMudConsumptionDto;
import java.util.List;
/**
* @Author: lyd
* @Description: mes
* @Date: 2023/9/6
*/
public interface MesRequestMapper {
MesMudConsumptionDto getMudConsumption(String mudId);
@DS("oracle")
List<MdBaseMaterial> getMesMaterialInfos(@Param("time") String time);
@DS("oracle")
List<JSONObject> getMesMaterialInfos2();
@DS("oracle")
List<MesWorkOrderDto> getMesWorkOrderInfos();
@DS("oracle")
void updateWorkOrderRead(@Param("list") List<String> list);
@DS("oracle")
void insertMudConsumptionInfo(MesMudConsumptionDto mudObject);
}

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

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.ext.mes.service.dao.mapper.MesRequestMapper">
<insert id="insertMudConsumptionInfo" parameterType="org.nl.wms.ext.mes.service.dto.MesMudConsumptionDto">
INSERT INTO "LMSTELCOM"."RECEIVE_MUDMATERIEL_OUT"(MSGID, PWORKSCHE_ID, OUT_FINNUM, PRESSUNIT, FBAGCODE, LOGT, SENDTIM
, CREATE_TM, OP_FLAG) VALUES (#{MSGID}, #{PWORKSCHE_ID}, #{OUT_FINNUM}, #{PRESSUNIT}, #{FBAGCODE}, #{LOGT}
, #{SENDTIM}, #{CREATE_TM}, #{OP_FLAG})
</insert>
<update id="updateWorkOrderRead" parameterType="java.util.List">
UPDATE "LMSTELCOM"."SEND_POP_SCHEDULE_PRESS"
SET OP_FLAG = '1'
WHERE PWORKSCHE_ID IN
<foreach item="item" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</update>
<select id="getMudConsumption" resultType="org.nl.wms.ext.mes.service.dto.MesMudConsumptionDto">
SELECT
`mud`.`record_id` AS `MSGID`,
`mud`.`workorder_code` AS `PWORKSCHE_ID`,
`mud`.`weight` AS `OUT_FINNUM`,
`w`.`point_code` AS `PRESSUNIT`,
`mud`.`record_time` AS `SENDTIM`,
`mud`.`record_time` AS `CREATE_TM`,
`mud`.is_read AS OP_FLAG
FROM
`pdm_bd_mud_consumption` `mud`
LEFT JOIN `pdm_bd_workorder` `w` ON (
`w`.`workorder_code` = `mud`.`workorder_code`
)
WHERE mud.record_id = #{mudId} AND mud.is_read = '0'
</select>
<select id="getMesMaterialInfos" resultType="org.nl.wms.database.material.service.dao.MdBaseMaterial">
SELECT
MATNR AS material_id,
MATNR AS material_code,
MATNR AS ext_id,
MAKTX AS material_name,
MATSPEC AS material_spec,
MATMODEL AS material_model,
MATCONVERTRATE AS single_weight,
MATLENGTH AS a_long_side,
MATWIDTH AS b_short_side,
MATTHICKNESS AS h_height,
MATDIAMETER AS w_thickness,
MATINNERCODE AS half_material_code,
FORMULA AS raw_material_code,
REC_TIM AS ext_time,
sysdate AS create_time,
'3' AS create_id,
'MES系统' AS create_name
FROM
"RTMG"."VIEW_MATERIAL_LMS"
WHERE
REC_TIM >= #{time}
ORDER BY
REC_TIM ASC
</select>
<select id="getMesMaterialInfos2" resultType="com.alibaba.fastjson.JSONObject">
SELECT
*
FROM
rtmg.view_material_lms
</select>
<select id="getMesWorkOrderInfos" resultType="org.nl.wms.ext.mes.service.dto.MesWorkOrderDto">
SELECT
*
FROM
"LMSTELCOM"."SEND_POP_SCHEDULE_PRESS"
WHERE OP_FLAG = '0'
</select>
</mapper>

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

@ -0,0 +1,34 @@
package org.nl.wms.ext.mes.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Author: lyd
* @Description: 泥料消耗记录
* @Date: 2023/9/11
*/
@Data
public class MesMudConsumptionDto implements Serializable {
// 唯一标识
private String MSGID;
/** 压机作业计划号 */
private String PWORKSCHE_ID;
/** */
private String FWORKSCHE_ID;
private String FPROBATCH;
private String FBAGCODE;
/** 泥料仓库编号 */
private String LOGT;
private String OUT_NUMBER;
private String OUT_FINNUM;
private String OUT_THEONUM;
private String PRESSUNIT;
private String SENDTIM;
private String SENDER;
private String CREATE_TM;
private String OP_FLAG;
private String OP_TM;
}

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

@ -0,0 +1,62 @@
package org.nl.wms.ext.mes.service.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Author: lyd
* @Description: mes工单实体
* @Date: 2023/9/9
*/
@Data
public class MesWorkOrderDto {
/** 唯一标识 */
private String MSGID;
/** 压机计划号 */
private String PWORKSCHE_ID;
/** 日计划号 */
private String FSCHEDULE_ID;
/** 生产订单号 */
private String FORDER_NO;
/** 生产日期 */
private String FPRODUCT_DATE;
/** 批次号 */
private String BATCHNO;
/** 压机号 */
private String PRESSUNIT;
/** 配料批次号 */
private String FPROBATCH;
/** 物料编码 */
private String FPRODUCT_MATERIAL_ID;
/** 物料名称 */
private String FPRODUCT_MATERIAL_NAME;
/** 规格 */
private String FMATSPEC;
/** 型号 */
private String FMATMODEL;
/** 辅数量 */
private BigDecimal FPRODUCT_SUBNUM;
/** 辅单位 */
private String FPRODUCT_SUBUNIT;
/** 数量 */
private String FPRODUCT_NUM;
/** 单位 */
private String FPRODUCT_UNIT;
/** 重量 */
private String FCONVERTRATE;
/** 班组 */
private String FTEAM;
/** 开始时间 */
private String BEGINTIME;
/** 结束时间 */
private String ENDTIME;
/** 写入时间 */
private String CREATE_TM;
/** 读取标志 */
private String OP_FLAG;
/** 结果 */
private String OP_REPLAY;
/** 读取时间 */
private String OP_TM;
}

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

@ -0,0 +1,29 @@
package org.nl.wms.ext.mes.service.dto;
import cn.hutool.http.HttpStatus;
import com.sun.org.apache.regexp.internal.RE;
import lombok.Data;
/**
* @Author: lyd
* @Description: mes反馈实体
* @Date: 2023/9/6
*/
@Data
public class ResultForMes {
private int status;
private String message;
public static ResultForMes requestRefuse(String message) {
ResultForMes result = new ResultForMes();
result.setStatus(HttpStatus.HTTP_BAD_REQUEST);
result.setMessage(message);
return result;
}
public static ResultForMes requestSuccess() {
ResultForMes result = new ResultForMes();
result.setStatus(HttpStatus.HTTP_OK);
result.setMessage("请求成功");
return result;
}
}

5
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java

@ -16,6 +16,9 @@ public class MesToWmsServiceImpl implements MesToWmsService {
@Override
public JSONObject downOrderForMes(JSONObject param) {
log.info("mes传来工单信息:" + param);
return param;
JSONObject res = new JSONObject();
res.put("code", 200);
res.put("message", "请求成功");
return res;
}
}

127
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java

@ -1,9 +1,34 @@
package org.nl.wms.ext.mes.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
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.dto.MesWorkOrderDto;
import org.nl.wms.ext.mes.service.dto.MesMudConsumptionDto;
import org.nl.wms.ext.record.service.ISysInteractRecordService;
import org.nl.wms.pdm.consumption.service.dao.PdmBdMudConsumption;
import org.nl.wms.pdm.consumption.service.dao.mapper.PdmBdMudConsumptionMapper;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
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.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
/**
* @Author: lyd
* @Description:
@ -12,4 +37,106 @@ import org.springframework.stereotype.Service;
@Slf4j
@Service
public class WmsToMesServiceImpl implements WmsToMesService {
@Autowired
private MesRequestMapper mesRequestMapper;
@Autowired
private PdmBdMudConsumptionMapper mudConsumptionMapper;
@Autowired
private ISysInteractRecordService interactRecordService;
@Autowired
private IMdBaseMaterialService mdBaseMaterialService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private IPdmBdWorkorderService pdmBdWorkorderService;
@Override
public void reportMudConsumption(MesMudConsumptionDto mudObject) {
log.info("上报mes消耗泥料记录的信息: {}", mudObject);
// 请求mes插入mes数据库
// todo: 注意防止重复上报
mesRequestMapper.insertMudConsumptionInfo(mudObject);
}
@Override
public void synchronizeMaterialInfo() {
log.info("同步物料开始");
// 获取lms数据库中的最后获取时间
LambdaQueryWrapper<MdBaseMaterial> lmsMaterialTabQuery = new QueryWrapper<MdBaseMaterial>().lambda();
lmsMaterialTabQuery.isNotNull(MdBaseMaterial::getExt_id).ne(MdBaseMaterial::getExt_id, "")
.orderByDesc(MdBaseMaterial::getExt_time);
List<MdBaseMaterial> mdBaseMaterials = mdBaseMaterialService.list(lmsMaterialTabQuery);
String time = mdBaseMaterials.size() > 0 ? mdBaseMaterials.get(0).getExt_time() : "1970-01-01 00:00:00";
log.info("上次更新同步时间:{}", time);
// 获取mes的物料数据
List<MdBaseMaterial> materials = mesRequestMapper.getMesMaterialInfos(time);
if (materials.size() == 0) {
// 没有需要同步的数据
log.info("没有未同步物料");
return;
}
log.info("获取MES物料:{}", materials);
// 插入
mdBaseMaterialService.saveOrUpdateBatch(materials);
}
@Override
public void synchronizeWorkOrderInfo() {
log.info("开始同步工单");
// 获取未读取的工单
List<MesWorkOrderDto> mesWorkOrderInfos = mesRequestMapper.getMesWorkOrderInfos();
if (mesWorkOrderInfos.size() == 0) {
log.info("无需要同步的工单");
return;
}
log.info("获取mes工单:{}", mesWorkOrderInfos);
// 插入lms工单表
List<PdmBdWorkorder> mesWorkOrder = toWorkOrderList(mesWorkOrderInfos);
pdmBdWorkorderService.saveOrUpdateBatch(mesWorkOrder);
// 修改mes库
// 获取所有的id
List<String> collect = mesWorkOrderInfos.stream().map(MesWorkOrderDto::getPWORKSCHE_ID)
.collect(Collectors.toList());
log.info("批量修改的数据: {}", collect);
mesRequestMapper.updateWorkOrderRead(collect);
}
public List<PdmBdWorkorder> toWorkOrderList(List<MesWorkOrderDto> mesWorkOrderInfos) {
List<PdmBdWorkorder> list = new CopyOnWriteArrayList<>();
mesWorkOrderInfos.forEach(mesWorkOrderDto -> {
// 半成品编码
String fproductMaterialId = mesWorkOrderDto.getFPRODUCT_MATERIAL_ID();
// 获取物料
MdBaseMaterial materialDto = mdBaseMaterialService.getOne(new LambdaQueryWrapper<MdBaseMaterial>()
.eq(MdBaseMaterial::getHalf_material_code, fproductMaterialId));
// 获取压机点位
SchBasePoint pointDto = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getExt_point_code, mesWorkOrderDto.getPRESSUNIT()));
PdmBdWorkorder pdmBdWorkorder = new PdmBdWorkorder();
pdmBdWorkorder.setWorkorder_id(IdUtil.getSnowflake(1,1).nextIdStr());
pdmBdWorkorder.setWorkorder_code(mesWorkOrderDto.getPWORKSCHE_ID());
pdmBdWorkorder.setPlan_qty(mesWorkOrderDto.getFPRODUCT_SUBNUM());
pdmBdWorkorder.setMaterial_id(materialDto.getMaterial_id());
pdmBdWorkorder.setRaw_material_code(materialDto.getRaw_material_code());
pdmBdWorkorder.setProduce_order(mesWorkOrderDto.getFORDER_NO());
pdmBdWorkorder.setBatch_no(mesWorkOrderDto.getBATCHNO());
pdmBdWorkorder.setTeam(mesWorkOrderDto.getFTEAM());
pdmBdWorkorder.setVehicle_type(GeneralDefinition.STEEL_TRAY);
pdmBdWorkorder.setPlanproducestart_date(mesWorkOrderDto.getBEGINTIME());
pdmBdWorkorder.setPlanproduceend_date(mesWorkOrderDto.getENDTIME());
pdmBdWorkorder.setProduce_date(mesWorkOrderDto.getFPRODUCT_DATE());
pdmBdWorkorder.setPoint_code(pointDto.getPoint_code());
pdmBdWorkorder.setPoint_name(pointDto.getPoint_name());
pdmBdWorkorder.setRegion_code(pointDto.getRegion_code());
pdmBdWorkorder.setRegion_name(pointDto.getRegion_name());
pdmBdWorkorder.setWorkorder_status(WorkOrderStatusEnum.UNPRODUCED.getCode());
pdmBdWorkorder.setExt_id(mesWorkOrderDto.getMSGID());
pdmBdWorkorder.setExt_data(JSON.toJSONString(mesWorkOrderDto));
pdmBdWorkorder.setCreate_id(GeneralDefinition.MES_ID);
pdmBdWorkorder.setCreate_name(GeneralDefinition.MES_NAME);
pdmBdWorkorder.setCreate_time(DateUtil.now());
list.add(pdmBdWorkorder);
});
return list;
}
}

12
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/WmsToMmsService.java

@ -0,0 +1,12 @@
package org.nl.wms.ext.mms.service;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
/**
* @Author: lyd
* @Description: wms与混碾系统
* @Date: 2023/9/7
*/
public interface WmsToMmsService {
void addRequestMaterial(PdmBdWorkorder workorder);
}

26
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/dao/dto/RequestMaterialDto.java

@ -0,0 +1,26 @@
package org.nl.wms.ext.mms.service.dao.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Author: lyd
* @Description: 请求要料dto
* @Date: 2023/9/8
*/
@Data
@TableName("压机要料表")
public class RequestMaterialDto implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
public int id;
public String device_code;
public String material_code;
public String production_order;
public Date request_date;
public boolean is_used;
}

14
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/dao/mapper/MmsRequestMapper.java

@ -0,0 +1,14 @@
package org.nl.wms.ext.mms.service.dao.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.nl.wms.ext.mms.service.dao.dto.RequestMaterialDto;
/**
* @Author: lyd
* @Description:
* @Date: 2023/9/7
*/
public interface MmsRequestMapper {
@DS("sqlserver")
void addRequestMaterial(RequestMaterialDto requestMaterialDto);
}

9
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mms/service/dao/mapper/MmsRequestMapper.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.ext.mms.service.dao.mapper.MmsRequestMapper">
<insert id="addRequestMaterial" parameterType="org.nl.wms.ext.mms.service.dao.dto.RequestMaterialDto">
INSERT INTO 压机要料表(日期, 配方号, 压机号, 生产订单号, 已配料) VALUES (#{request_date}, #{material_code}
, #{device_code}, #{production_order}, #{is_used})
</insert>
</mapper>

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

@ -0,0 +1,41 @@
package org.nl.wms.ext.mms.service.impl;
import lombok.extern.slf4j.Slf4j;
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.mapper.MmsRequestMapper;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* @Author: lyd
* @Description:
* @Date: 2023/9/7
*/
@Slf4j
@Service
public class WmsToMmsServiceImpl implements WmsToMmsService {
@Autowired
public MmsRequestMapper mmsRequestMapper;
@Override
public void addRequestMaterial(PdmBdWorkorder workorder) {
// 插入:压机、原材料、生产订单号、插入时间
// 组合参数
RequestMaterialDto requestMaterialDto = toRequestMaterialMapper(workorder);
log.info("插入混碾系统:{}", requestMaterialDto);
mmsRequestMapper.addRequestMaterial(requestMaterialDto);
}
public RequestMaterialDto toRequestMaterialMapper(PdmBdWorkorder workorder) {
RequestMaterialDto requestMaterialDto = new RequestMaterialDto();
requestMaterialDto.setDevice_code(workorder.getPoint_code().charAt(workorder.getPoint_code().length() - 1) + "");
requestMaterialDto.setMaterial_code(workorder.getRaw_material_code());
requestMaterialDto.setRequest_date(new Date());
requestMaterialDto.setProduction_order(workorder.getProduction_order());
requestMaterialDto.set_used(false);
return requestMaterialDto;
}
}

7
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java

@ -15,6 +15,7 @@ import org.nl.common.exception.BadRequestException;
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
import org.nl.wms.ext.mes.service.dto.ResultForMes;
import org.nl.wms.ext.record.service.ISysInteractRecordService;
import org.nl.wms.ext.record.service.dao.mapper.SysInteractRecordMapper;
import org.nl.wms.ext.record.service.dao.SysInteractRecord;
@ -134,6 +135,12 @@ public class SysInteractRecordServiceImpl extends ServiceImpl<SysInteractRecordM
entity.setMessage(re.getMessage());
entity.setIs_success(re.getCode() == HttpStatus.HTTP_OK);
}
if (response instanceof ResultForMes) { // wms请求mes的返回数据
ResultForMes re = (ResultForMes) response;
entity.setCode(re.getStatus());
entity.setMessage(re.getMessage());
entity.setIs_success(re.getStatus() == HttpStatus.HTTP_OK);
}
sysInteractRecordMapper.insert(entity);
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/consumption/service/IPdmBdMudConsumptionService.java

@ -27,7 +27,7 @@ public interface IPdmBdMudConsumptionService extends IService<PdmBdMudConsumptio
* 创建
* @param entity /
*/
void create(PdmBdMudConsumption entity);
String create(PdmBdMudConsumption entity);
/**
* 编辑

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/consumption/service/dao/PdmBdMudConsumption.java

@ -50,4 +50,7 @@ public class PdmBdMudConsumption implements Serializable {
@ApiModelProperty(value = "下料位编码")
private String current_point;
@ApiModelProperty(value = "是否读取")
private Boolean is_read;
}

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/consumption/service/impl/PdmBdMudConsumptionServiceImpl.java

@ -41,12 +41,13 @@ public class PdmBdMudConsumptionServiceImpl extends ServiceImpl<PdmBdMudConsumpt
}
@Override
public void create(PdmBdMudConsumption entity) {
public String create(PdmBdMudConsumption entity) {
String now = DateUtil.now();
entity.setRecord_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setRecord_time(now);
pdmBdMudConsumptionMapper.insert(entity);
return entity.getRecord_id();
}
@Override

13
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java

@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.ext.mes.service.WmsToMesService;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery;
@ -16,6 +17,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.Set;
/**
* @author lyd
@ -29,6 +31,8 @@ public class PdmBdWorkorderController {
@Autowired
private IPdmBdWorkorderService pdmBdWorkorderService;
@Autowired
private WmsToMesService wmsToMesService;
@GetMapping
@Log("查询工单管理")
@ -72,4 +76,13 @@ public class PdmBdWorkorderController {
pdmBdWorkorderService.submits(entity);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/synchronize")
@Log("工单同步")
@ApiOperation("工单同步")
//@SaCheckPermission("materialtype:list")
public ResponseEntity<Object> synchronize(@RequestBody Map whereJson) {
wmsToMesService.synchronizeWorkOrderInfo();
return new ResponseEntity<>(HttpStatus.OK);
}
}

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

@ -6,6 +6,7 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery;
import java.util.Map;
import java.util.Set;
/**

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

@ -41,6 +41,14 @@ public class PdmBdWorkorder implements Serializable {
@ApiModelProperty(value = "原材料物料标识")
private String raw_material_code;
@ApiModelProperty(value = "生产订单号")
private String produce_order;
@ApiModelProperty(value = "批次号")
private String batch_no;
@ApiModelProperty(value = "班组")
private String team;
@ApiModelProperty(value = "生产日期")
private String produce_date;
@ApiModelProperty(value = "载具类型")
private String vehicle_type;
@ -81,6 +89,11 @@ public class PdmBdWorkorder implements Serializable {
@ApiModelProperty(value = "工单类型")
private String workorder_type;
// todo: 字段未放开
@ApiModelProperty(value = "生产订单号")
@TableField(exist = false)
private String production_order;
@ApiModelProperty(value = "回传MES状态")
private String passback_status;

7
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml

@ -36,16 +36,15 @@
w.point_code AS device_code,
w.plan_qty,
m.half_material_code AS material_code,
m.raw_material_code AS formula,
m.material_code AS product_code,
0 AS brick_code,
1 AS product_code,
m.material_spec AS brick_code,
"配方" AS formula,
0 AS a,
0 AS b,
0 AS h,
0 AS w,
0 AS size_error,
0 AS single_weight,
0 AS drawing_address,
0 AS standard_size_height1,
0 AS standard_size_height2,
0 AS standard_size_height3,

6
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/vo/AcsWorkOrderVo.java

@ -12,8 +12,8 @@ public class AcsWorkOrderVo {
private String workorder_code; // 工单编码
private String device_code; // 设备编码
private String material_code; // 半成品物料编码 - 工单物料编码
private String product_code; // 产品代号 - 成品
private String formula; // 配方-泥料
private String product_code; // 产品代号 - 规格
private String formula; // 配方 - 型号
private String brick_code; // 砖型编码
private String plan_qty; // 计划数量
private String a; // a边
@ -22,7 +22,7 @@ public class AcsWorkOrderVo {
private String w; // 宽度
private String size_error; // 尺寸允许误差
private String single_weight; // 单重允许误差
private String drawing_address; // 图纸地址
// private String drawing_address; // 图纸地址
private String standard_size_height1; // 标准尺寸1
private String standard_size_height2; // 标准尺寸2
private String standard_size_height3; // 标准尺寸3

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java

@ -31,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
@ -65,7 +66,6 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
String now = DateUtil.now();
// 点位编码和点位名称为父点位
entity.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setWorkorder_code(CodeUtil.getNewCode("PDM_SHIFTORDER"));
entity.setCreate_id(currentUserId);
@ -162,5 +162,4 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
TaskUtils.setWorkOrderUpdateByAcs(pdmBdWorkorder);
pdmBdWorkorderMapper.updateById(pdmBdWorkorder);
}
}

8
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java

@ -8,6 +8,7 @@ import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.ext.acs.service.WmsToAcsService;
@ -27,12 +28,15 @@ import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
import org.nl.wms.sch.task_manage.task.AcsUtil;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.util.TaskUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;
/**
* @author ldjun
@ -55,6 +59,8 @@ public abstract class AbstractTask {
private ISysInteractRecordService interactRecordService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private RedissonClient redissonClient;
/**
* 任务创建
@ -82,6 +88,7 @@ public abstract class AbstractTask {
* @author ldjun
* @created 2020年6月12日 下午5:52:28
*/
@SneakyThrows
protected AcsResponse renotifyAcs(List<SchBaseTask> taskList) {
AcsResponse resultForAcs = AcsResponse.requestOk();
//1、获取任务
@ -94,6 +101,7 @@ public abstract class AbstractTask {
if (ObjectUtil.isNotEmpty(responseParam)) {
JSONObject jsonObject = JSONObject.parseObject(responseParam);
taskDto.setDirection(jsonObject.getString("direction"));
taskDto.setPut_device_code(jsonObject.getString("fmj_device"));
}
taskDto.setExt_task_uuid(task.getTask_id());
taskDto.setTask_code(task.getTask_code());

16
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoCreateTask.java

@ -1,32 +1,32 @@
package org.nl.wms.sch.task_manage;
import cn.hutool.core.util.ObjectUtil;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.config.SpringContextHolder;
import org.reflections.Reflections;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Set;
@Slf4j
@Component
@Order(value = 1)
public class AutoCreateTask {
private Set<Class<? extends AbstractTask>> subTypes = null;
private static Set<Class<? extends AbstractTask>> subTypes = null;
// 类加载时候执行扫描
static {
Reflections reflections = new Reflections("org.nl.wms.sch.task_manage.task.tasks");
subTypes = reflections.getSubTypesOf(AbstractTask.class);
}
@SneakyThrows
public void run() {
log.info("定时任务AutoCreateTask开始执行:");
if (ObjectUtil.isNull(subTypes) || subTypes.isEmpty()) {
Reflections reflections = new Reflections("org.nl");
subTypes = reflections.getSubTypesOf(AbstractTask.class);
}
this.doExecute();
}

10
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java

@ -18,9 +18,9 @@ public class GeneralDefinition {
public static final String NO = "0";
// 载具类型
/** 料盅 */
public static final String MATERIAL_CUP = "1";
public static final String MATERIAL_CUP = "LZ";
/** 钢托盘 */
public static final String STEEL_TRAY = "2";
public static final String STEEL_TRAY = "GTP";
// 账号定义
/** acs系统 */
public static final String ACS_ID = "2";
@ -53,7 +53,7 @@ public class GeneralDefinition {
/**MES->LMS**/
public static final String MES_LMS = "3";
/**LMS->MES**/
public static final String LMS_LMS = "4";
public static final String LMS_MES = "4";
// 区域定义
/** 料盅睏料线区域 */
public static final String LZKLX = "LZKLX";
@ -69,6 +69,10 @@ public class GeneralDefinition {
public static final String IS_CONNECT_ACS = "is_connect_acs";
/** ACS路径 */
public static final String ACS_URL = "acs_url";
/** 是否连接 */
public static final String IS_CONNECT_MES = "is_connect_mes";
/** MES路径 */
public static final String MES_URL = "mes_url";
// 完成/取消
/** 任务完成 */
public static final String TASK_FINISH = "任务完成";

36
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/GroupBindMaterialStatusEnum.java

@ -1,12 +1,7 @@
package org.nl.wms.sch.task_manage.enums;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.dict.impl.SysDictServiceImpl;
import java.util.List;
/**
* @Author: lyd
@ -14,32 +9,33 @@ import java.util.List;
* @Date: 2023/5/25
*/
@Getter
@AllArgsConstructor
public enum GroupBindMaterialStatusEnum {
/**
* 待绑定
*/
WAIT_BIND,
WAIT_BIND("1", "带绑定"),
/**
* 已绑定
*/
BOUND,
BOUND("2", "已绑定"),
/**
* 已解绑
*/
UNBOUND;
UNBOUND("3", "已解绑");
private String value;
private String label;
static { // 只会初始化一次
SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class);
List<Dict> taskDirection = bean.list(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, "group_bind_material_status")
.orderByAsc(Dict::getDict_sort));
GroupBindMaterialStatusEnum[] values = GroupBindMaterialStatusEnum.values();
for (int i = 0; i < values.length; i++) {
values[i].value = taskDirection.get(i).getValue();
values[i].label = taskDirection.get(i).getLabel();
}
}
// static { // 只会初始化一次
// SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class);
// List<Dict> taskDirection = bean.list(new LambdaQueryWrapper<Dict>()
// .eq(Dict::getCode, "group_bind_material_status")
// .orderByAsc(Dict::getDict_sort));
// GroupBindMaterialStatusEnum[] values = GroupBindMaterialStatusEnum.values();
// for (int i = 0; i < values.length; i++) {
// values[i].value = taskDirection.get(i).getValue();
// values[i].label = taskDirection.get(i).getLabel();
// }
// }
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/TaskFinishedTypeEnum.java

@ -13,7 +13,7 @@ import lombok.Getter;
public enum TaskFinishedTypeEnum {
AUTO_ACS("1", "ACS自动完成"),
MANUAL_PC("2", "PC手完成"),
MANUAL_PC("2", "PC手完成"),
MANUAL_PDA("3", "PDA手持");
private final String code;

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java

@ -35,9 +35,9 @@ import java.util.stream.Collectors;
* @Date: 2023/6/21
*/
@Component
@TaskType("CTQKTask")
@TaskType("DTKQKTask")
public class CTQKTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "CTQKTask";
private static String TASK_CONFIG_CODE = "DTKQKTask";
@Autowired
private ISchBasePointService pointService;
@Autowired

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java

@ -29,7 +29,7 @@ import java.util.stream.Collectors;
/**
* @Author: lyd
* @Description: 叠托送空盘任务-> 拆盘机/货架
* @Description: 叠托送空盘任务-> 货架
* @Date: 2023/6/21
*/
@Component

19
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.xml

@ -14,20 +14,13 @@
#{code}
</foreach>
ORDER BY
<foreach collection="regionCode" item="region" index="index" separator=",">
CASE
<foreach collection="regionCode" item="innerRegion" index="innerIndex" separator=" ">
WHEN p.region_code = #{innerRegion} THEN #{innerIndex}
</foreach>
END
</foreach>
p.in_empty_seq ASC
</select>
<select id="findPointForCTQK" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT p.*
FROM `sch_base_point` p
WHERE (
(p.point_type = '3' AND p.region_code = #{regionCode[0]}) OR
(p.point_type = '1' AND p.region_code = #{regionCode[1]})
(p.point_type = '1' AND p.region_code = #{regionCode[0]})
)
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.point_status = '2'
@ -37,12 +30,6 @@
#{code}
</foreach>
ORDER BY
<foreach collection="regionCode" item="region" index="index" separator=",">
CASE
<foreach collection="regionCode" item="innerRegion" index="innerIndex" separator=" ">
WHEN p.region_code = #{innerRegion} THEN #{innerIndex}
</foreach>
END
</foreach>
p.out_empty_seq ASC
</select>
</mapper>

41
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java

@ -3,6 +3,7 @@ package org.nl.wms.sch.task_manage.task.tasks.fj;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -106,12 +107,21 @@ public class FJMKTask extends AbstractTask {
int surplusNumber = fjMapper.getInventoryQuantity();
int total = sum + surplusNumber; // 现有总数
// 3 获取木托盘需要多少块
int needFullNumber = 0; // todo: 具体未知如何获取
// 4 校验是否够码满一托
if (total > needFullNumber) {
// 可以叫空木托盘
int needFullNumber = 255; // todo: 具体未知如何获取
JSONObject response = new JSONObject();
String responseParam = task.getResponse_param();
if (ObjectUtil.isNotEmpty(responseParam)) {
response = JSON.parseObject(responseParam);
}
// 大于两托正常,大于1托给个1,小于1托给2
// 4 校验是否够码满一托/两托
if ((total % needFullNumber) == 0) {
// 不可以叫空木托盘
// response.put("")
} else if ((total % needFullNumber) < 2) {
// 不可以叫空木托盘
}
// 大于2就可以码
/** 覆膜机木托盘位 */
SchBasePoint LaminatePoint = findStartPoint(startRegionStr, jsonObject);
if (ObjectUtil.isEmpty(LaminatePoint)) {
@ -122,12 +132,12 @@ public class FJMKTask extends AbstractTask {
// 消息通知
continue;
}
// 把这个设备位放到任务中
response.put("fmj_device", LaminatePoint.getPoint_code());
// 生产木托盘编码
String vehicleCode = CodeUtil.getNewCode("VEHICLE_CODE");
// 设置终点并修改创建成功状态
task.setPoint_code3(LaminatePoint.getParent_point_code());
task.setPoint_code4(startPoint);
task.setVehicle_code2(vehicleCode); // 覆膜机下的木托盘编码
task.setTask_status(TaskStatus.CREATED.getCode());
task.setRemark("");
taskService.updateById(task);
@ -138,7 +148,6 @@ public class FJMKTask extends AbstractTask {
// 覆膜机对接位
SchBasePoint basePoint = pointService.getById(LaminatePoint.getParent_point_code());
basePoint.setIng_task_code(task.getTask_code());
basePoint.setVehicle_code(vehicleCode);
PointUtils.setUpdateByAcs(basePoint);
pointService.updateById(basePoint);
@ -153,6 +162,7 @@ public class FJMKTask extends AbstractTask {
// 组盘,返回组盘标识,设置待绑定,搬运结束就设置已绑定
JSONObject stackParameters = param.getJSONObject("palletize");
String deviceCode = param.getString("device_code");
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
String isFull = param.getString("is_full");
if (isFull == null) {
isFull = GeneralDefinition.YES;
@ -161,8 +171,7 @@ public class FJMKTask extends AbstractTask {
Integer qty = param.getInteger("qty");
SchBasePoint basePoint = pointService.getById(deviceCode);
PdmBdWorkorder workorderObject = workorderService.getDeviceProductionTask(basePoint.getParent_point_code());
String vehicleCode = basePoint.getVehicle_code();
String vehicleType = basePoint.getVehicle_type();
String vehicleType = workorderObject.getVehicle_type(); // 从工单上获取
// 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入
SchBaseVehiclematerialgroup groupEntity = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType,
GroupBindMaterialStatusEnum.BOUND.getValue(), workorderObject.getMaterial_id());
@ -222,10 +231,6 @@ public class FJMKTask extends AbstractTask {
// 向ACS请求所需木托盘在那个栈拆盘机?已经实时更新,故只需要自己查询即可
SchBasePoint endPointObj = fjMapper.findPointForFJQK(startRegionStr, new JSONObject()
.fluentPut("vehicleType", vehicleType).fluentPut("pointType", GeneralDefinition.DEVICE_POINT));
// 请求ACS释放一个木托盘
List list = CommonUtils.requestAcsReleaseVehicle(MapOf.of("to_command", "1"),
endPointObj.getDevice_code());
wmsToAcsService.getVehicleForLaminatingMachine(list);
// 这个点的父点位为起点
return ObjectUtil.isNotEmpty(endPointObj) ? endPointObj : null;
}
@ -348,13 +353,15 @@ public class FJMKTask extends AbstractTask {
SchBasePoint fmPointObj = pointService.getById(fmPoint);
if (ObjectUtil.isNotEmpty(bzxPointObj)) {
// 释放点位
fmPointObj.setIng_task_code("");
bzxPointObj.setIng_task_code("");
PointUtils.setUpdateByType(fmPointObj, taskFinishedType);
PointUtils.setUpdateByType(bzxPointObj, taskFinishedType);
pointService.updateById(fmPointObj);
pointService.updateById(bzxPointObj);
}
if (ObjectUtil.isNotEmpty(fmPointObj)) {
fmPointObj.setIng_task_code("");
PointUtils.setUpdateByType(fmPointObj, taskFinishedType);
pointService.updateById(fmPointObj);
}
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setFinished_type(taskFinishedType.getCode());

27
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java

@ -1,6 +1,7 @@
package org.nl.wms.sch.task_manage.task.tasks.fj;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
@ -78,20 +79,25 @@ public class FJQKTask extends AbstractTask {
JSONObject extGroupData = JSONObject.parseObject(requestParam);
SchBasePoint point = findStartPoint(startRegionStr, extGroupData);
if (ObjectUtil.isEmpty(point)) {
task.setRemark("未找到所需点位!");
task.setRemark("覆膜机不可用!");
taskService.updateById(task);
// 消息通知
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(),
NoticeTypeEnum.WARN.getCode());
continue;
}
// 将覆膜机设备放到任务中
String responseParam = task.getResponse_param();
JSONObject param = new JSONObject();
if (ObjectUtil.isNotEmpty(responseParam)) {
param = JSON.parseObject(responseParam);
}
// 把这个设备位放到任务中
param.put("fmj_device", point.getPoint_code());
// 设置起点并修改创建成功状态
task.setPoint_code1(point.getParent_point_code());
task.setTask_status(TaskStatus.CREATED.getCode());
// 生产木托盘编码
String vehicleCode = CodeUtil.getNewCode("VEHICLE_CODE");
// todo: 未确认是否放在1还是2,目前规定四点任务空盘的载具编码是2
task.setVehicle_code(vehicleCode);
task.setRemark("");
task.setGroup_id(point.getGroup_id());
taskService.updateById(task);
@ -99,7 +105,6 @@ public class FJQKTask extends AbstractTask {
// 父点位锁住
SchBasePoint basePoint = pointService.getById(point.getParent_point_code());
basePoint.setIng_task_code(task.getTask_code());
basePoint.setVehicle_code(vehicleCode);
PointUtils.setUpdateByAcs(basePoint);
pointService.updateById(basePoint);
@ -128,18 +133,6 @@ public class FJQKTask extends AbstractTask {
// 向ACS请求所需木托盘在那个栈拆盘机?已经实时更新,故只需要自己查询即可
SchBasePoint endPointObj = fjMapper.findPointForFJQK(startRegionStr, new JSONObject()
.fluentPut("vehicleType", vehicleType).fluentPut("pointType", GeneralDefinition.DEVICE_POINT));
// 请求ACS释放一个木托盘
List list = CommonUtils.requestAcsReleaseVehicle(MapOf.of("to_command", "1"),
endPointObj.getDevice_code());
// SignalData signalData = SignalData.buildSignalData("to_command", "1");
// List<SignalData> signalList = new ArrayList<>();
// signalList.add(signalData);
// PutActionRequest putActionRequest = (PutActionRequest) BaseRequest.createRequest();
// putActionRequest.setDevice_code(endPointObj.getDevice_code());
// putActionRequest.setList(signalList);
// List<PutActionRequest> list = new ArrayList<>();
// list.add(putActionRequest);
wmsToAcsService.getVehicleForLaminatingMachine(list);
// 这个点的父点位为起点
return ObjectUtil.isNotEmpty(endPointObj) ? endPointObj : null;
}

11
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java

@ -63,10 +63,6 @@ public class FJRKTask extends AbstractTask {
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task);
// 获取起点 回写载具编码
String startPoint = task.getPoint_code1();
SchBasePoint startPointObj = pointService.getById(startPoint);
task.setVehicle_code(startPointObj.getVehicle_code());
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
// 找终点
SchBasePoint point = findNextPoint(nextRegionStr);
@ -115,16 +111,13 @@ public class FJRKTask extends AbstractTask {
// 强制入库组盘
// 组盘,返回组盘标识,设置待绑定,搬运结束就设置已绑定
String deviceCode = param.getString("device_code");
String vehicleType = param.getString("vehicle_type");
JSONObject stackParameters = param.getJSONObject("palletize");
if (vehicleType == null) {
vehicleType = GeneralDefinition.STEEL_TRAY;
}
String vehicleCode = param.getString("vehicle_code");
// 砖块数量
Integer qty = param.getInteger("qty");
SchBasePoint basePoint = pointService.getById(deviceCode);
String vehicleCode = basePoint.getVehicle_code();
PdmBdWorkorder workorderObject = workorderService.getDeviceProductionTask(basePoint.getParent_point_code());
String vehicleType = workorderObject.getVehicle_type();
// 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入
SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());

14
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java

@ -128,9 +128,9 @@ public class FJSKTask extends AbstractTask {
@Override
public String setGroupPlate(JSONObject param) {
// 查找组盘表信息,不做修改
String vehicleCode = param.getString("vehicle_code");
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
String vehicleType = param.getString("vehicle_type");
if (vehicleType == null) {
if (vehicleType == null || vehicleType.equals(GeneralDefinition.NO)) {
vehicleType = GeneralDefinition.STEEL_TRAY;
}
SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getGroupInfo(vehicleCode,
@ -168,16 +168,6 @@ public class FJSKTask extends AbstractTask {
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
pointService.updateById(endPointObj);
// 将组盘解绑并设置当前位置
// 组盘表数据改成已绑定
SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id());
TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType);
vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); // 当前位置
vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name());
vehiclematerialgroup.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
vehiclematerialgroup.setMove_way(vehiclematerialgroup.getMove_way() + " -> " + endPointObj.getPoint_code());
vehiclematerialgroupService.updateById(vehiclematerialgroup);
}
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSLTask.java

@ -111,13 +111,13 @@ public class FJSLTask extends AbstractTask {
public String setGroupPlate(JSONObject param) {
// 组盘,返回组盘标识,设置待绑定,搬运结束就设置已绑定
// 查找
String vehicleCode = param.getString("vehicle_code");
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
if (vehicleCode == null) {
throw new BadRequestException("载具编码不能为空");
}
String vehicleType = param.getString("vehicle_type");
JSONObject stackParameters = param.getJSONObject("palletize"); // 参数
if (vehicleType == null) {
if (vehicleType == null || vehicleType.equals(GeneralDefinition.NO)) {
vehicleType = GeneralDefinition.STEEL_TRAY;
}
// 修改参数

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

@ -48,7 +48,7 @@
</select>
<select id="getInventoryQuantity" resultType="java.lang.Integer">
SELECT
SUM(vg.material_qty) AS sum
IF(LENGTH(SUM(vg.material_qty)) > 0, SUM(vg.material_qty), 0) AS sum
FROM
`sch_base_vehiclematerialgroup` vg
WHERE (vg.point_code IN (

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

@ -157,6 +157,7 @@ public class HNMLTask extends AbstractTask {
private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject requestParam) {
// *: 混碾无工单
String materialCode = requestParam.getString("material_code"); // 混碾编码
materialCode = "GBMAC3";
Assert.notNull(materialCode, "物料编码不能为空!");
// 根据工单物料标识寻找点位
List<SchBasePoint> points = hnMapper.findPointForHNMLAndWorkOrder(nextRegionStr, materialCode);
@ -268,15 +269,16 @@ public class HNMLTask extends AbstractTask {
// 组盘
@Override
public String setGroupPlate(JSONObject param) {
// 吨袋号(泥料号+2位年+月日时分+设备号+碾次)x
// 吨袋号(泥料号+2位年+月日时分+设备号+碾次)
// LMS组盘时生成混料批次:压制工单+混砂机号+碾次
String vehicleCode = param.getString("vehicle_code");
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
String vehicleType = param.getString("vehicle_type");
// 泥料物料对应不出物料标识
String materialCode = param.getString("material_code"); // 泥料编码
String mixTimes = param.getString("mix_number"); // 碾次
String materialCode = param.getString("material_code"); // 泥料编码: 吨袋号,泥料前
// String substring = materialCode.substring(0, 12);
// String mixTimes = param.getString("mix_number"); // 碾次
// 载具类型默认料盅
if (vehicleType == null) {
if (vehicleType == null || vehicleType.equals(GeneralDefinition.NO)) {
vehicleType = GeneralDefinition.MATERIAL_CUP;
}
String deviceCode = param.getString("device_code");
@ -284,6 +286,9 @@ public class HNMLTask extends AbstractTask {
SchBasePoint basePoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, deviceCode)
.eq(SchBasePoint::getIs_used, true));
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位[" + deviceCode + "]已被禁用");
}
if (vehicleCode == null || vehicleCode.equals(GeneralDefinition.NO)) {
throw new BadRequestException("载具编码不能为空");
}
@ -307,7 +312,7 @@ public class HNMLTask extends AbstractTask {
groupEntity.setPoint_code(basePoint.getPoint_code()); // 当前位置
groupEntity.setPoint_name(basePoint.getPoint_name());
groupEntity.setMove_way(basePoint.getPoint_code()); // 头次
groupEntity.setMix_times(mixTimes); // 碾次
// groupEntity.setMix_times(mixTimes); // 碾次
groupEntity.setInstorage_time(DateUtil.now());
groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(weight)// 重量
? weight

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

@ -1,166 +1,166 @@
package org.nl.wms.sch.task_manage.task.tasks.hn;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
import org.nl.wms.sch.task_manage.task.TaskType;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.util.PointUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author: lyd
* @Description: 混料缺空呼叫空载具
* @Date: 2023/5/19
*/
@Deprecated
@Component
@TaskType("--")
public class HNQKTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "--";
private static String EMPTY_ZHONG = "1";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private IPdmBdWorkorderService workorderService;
/**
* 具体业务
*/
@Override
@Transactional(rollbackFor = Exception.class)
protected void create() {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList());
// 找起点
String extGroupData = task.getExt_group_data();
JSONObject jsonObject = JSONObject.parseObject(extGroupData);
SchBasePoint point = findStartPoint(startRegionStr, jsonObject);
if (ObjectUtil.isEmpty(point)) {
task.setRemark("未找到所需点位!");
taskService.update(task);
// 消息通知
continue;
}
// 设置终点并修改创建成功状态
task.setPoint_code1(point.getPoint_code());
task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode());
taskService.update(task);
point.setIng_task_code(task.getTask_code());
pointService.update(point);
//下发
// this.renotifyAcs(task);
}
}
/**
* 找起点, 通过料盅睏料线区域的空盅位置找到空盅
*
* @param startRegionStr
* @param extGroupData
* @return
*/
private SchBasePoint findStartPoint(List<String> startRegionStr, JSONObject extGroupData) {
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.in(SchBasePoint::getRegion_code, startRegionStr)
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
.eq(SchBasePoint::getPoint_type, EMPTY_ZHONG)
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.orderByAsc(SchBasePoint::getIn_order_seq)
.orderByAsc(SchBasePoint::getPoint_code);
List<SchBasePoint> schBasePoints = pointService.list(lam);
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
}
@Override
@Transactional(rollbackFor = Exception.class)
protected void updateStatus(String task_code, TaskStatus status) {
// 校验任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException("该任务已完成!");
}
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!");
}
// 获取参数
String startPoint = taskObj.getPoint_code1(); // 获取起点
String endPoint = taskObj.getPoint_code2(); // 获取起点
SchBasePoint startPointObj = pointService.getById(startPoint);
SchBasePoint endPointObj = pointService.getById(endPoint);
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
}
if (status.equals(TaskStatus.FINISHED)) { // 完成
// 起点清空
if (ObjectUtil.isNotEmpty(startPointObj)) {
PointUtils.clearPoint(startPointObj);
taskObj.setVehicle_code(startPointObj.getVehicle_code());
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
endPointObj.setVehicle_type("1");
endPointObj.setVehicle_code(startPointObj.getVehicle_code());
endPointObj.setVehicle_qty(1);
endPointObj.setUpdate_time(DateUtil.now());
pointService.updateById(endPointObj);
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
}
if (status.equals(TaskStatus.CANCELED)) { // 取消
// 起点解锁
if (ObjectUtil.isNotEmpty(startPointObj)) {
startPointObj.setIng_task_code("");
pointService.update(startPointObj);
}
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
}
taskService.update(taskObj);
}
@Override
public void forceFinish(String task_code) {
this.updateStatus(task_code, TaskStatus.FINISHED);
}
@Override
public void cancel(String task_code) {
this.updateStatus(task_code, TaskStatus.CANCELED);
}
}
//package org.nl.wms.sch.task_manage.task.tasks.hn;
//
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.util.ObjectUtil;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import org.nl.common.exception.BadRequestException;
//import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
//import org.nl.wms.sch.point.service.ISchBasePointService;
//import org.nl.wms.sch.point.service.dao.SchBasePoint;
//import org.nl.wms.sch.task.service.ISchBaseTaskService;
//import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
//import org.nl.wms.sch.task.service.dao.SchBaseTask;
//import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
//import org.nl.wms.sch.task_manage.AbstractTask;
//import org.nl.wms.sch.task_manage.GeneralDefinition;
//import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
//import org.nl.wms.sch.task_manage.task.TaskType;
//import org.nl.wms.sch.task_manage.task.core.TaskStatus;
//import org.nl.wms.util.PointUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.Arrays;
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * @Author: lyd
// * @Description: 混料缺空:呼叫空载具
// * @Date: 2023/5/19
// */
//@Deprecated
//@Component
//@TaskType("--")
//public class HNQKTask extends AbstractTask {
// private static String TASK_CONFIG_CODE = "--";
// private static String EMPTY_ZHONG = "1";
//
// @Autowired
// private ISchBasePointService pointService;
// @Autowired
// private ISchBaseTaskService taskService;
// @Autowired
// private ISchBaseTaskconfigService taskConfigService;
// @Autowired
// private IPdmBdWorkorderService workorderService;
//
// /**
// * 具体业务
// */
// @Override
// @Transactional(rollbackFor = Exception.class)
// protected void create() {
// // 获取任务
// List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// // 配置信息
// SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
// .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
// for (SchBaseTask task : tasks) {
// List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList());
// // 找起点
// String extGroupData = task.getExt_group_data();
// JSONObject jsonObject = JSONObject.parseObject(extGroupData);
// SchBasePoint point = findStartPoint(startRegionStr, jsonObject);
// if (ObjectUtil.isEmpty(point)) {
// task.setRemark("未找到所需点位!");
// taskService.update(task);
// // 消息通知
// continue;
// }
// // 设置终点并修改创建成功状态
// task.setPoint_code1(point.getPoint_code());
// task.setRemark("");
// task.setTask_status(TaskStatus.CREATED.getCode());
// taskService.update(task);
//
// point.setIng_task_code(task.getTask_code());
// pointService.update(point);
//
// //下发
//// this.renotifyAcs(task);
// }
// }
//
// /**
// * 找起点, 通过料盅睏料线区域的空盅位置找到空盅
// *
// * @param startRegionStr
// * @param extGroupData
// * @return
// */
// private SchBasePoint findStartPoint(List<String> startRegionStr, JSONObject extGroupData) {
// LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
// lam.in(SchBasePoint::getRegion_code, startRegionStr)
// .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
// .eq(SchBasePoint::getPoint_type, EMPTY_ZHONG)
// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
// .or()
// .eq(SchBasePoint::getIng_task_code, ""))
// .orderByAsc(SchBasePoint::getIn_order_seq)
// .orderByAsc(SchBasePoint::getPoint_code);
// List<SchBasePoint> schBasePoints = pointService.list(lam);
// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
// }
//
// @Override
// @Transactional(rollbackFor = Exception.class)
// protected void updateStatus(String task_code, TaskStatus status) {
// // 校验任务
// SchBaseTask taskObj = taskService.getByCode(task_code);
// if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
// throw new BadRequestException("该任务已完成!");
// }
// if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
// throw new BadRequestException("该任务已取消!");
// }
// // 获取参数
// String startPoint = taskObj.getPoint_code1(); // 获取起点
// String endPoint = taskObj.getPoint_code2(); // 获取起点
// SchBasePoint startPointObj = pointService.getById(startPoint);
// SchBasePoint endPointObj = pointService.getById(endPoint);
// // 根据传来的类型去对任务进行操作
// if (status.equals(TaskStatus.EXECUTING)) { // 执行中
// taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
// taskObj.setRemark("执行中");
// }
// if (status.equals(TaskStatus.FINISHED)) { // 完成
// // 起点清空
// if (ObjectUtil.isNotEmpty(startPointObj)) {
// PointUtils.clearPoint(startPointObj);
// taskObj.setVehicle_code(startPointObj.getVehicle_code());
// endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
// endPointObj.setVehicle_type("1");
// endPointObj.setVehicle_code(startPointObj.getVehicle_code());
// endPointObj.setVehicle_qty(1);
// endPointObj.setUpdate_time(DateUtil.now());
// pointService.updateById(endPointObj);
// }
// // 任务完成
// taskObj.setTask_status(TaskStatus.FINISHED.getCode());
// taskObj.setRemark(GeneralDefinition.TASK_FINISH);
// }
// if (status.equals(TaskStatus.CANCELED)) { // 取消
// // 起点解锁
// if (ObjectUtil.isNotEmpty(startPointObj)) {
// startPointObj.setIng_task_code("");
// pointService.update(startPointObj);
// }
// taskObj.setTask_status(TaskStatus.CANCELED.getCode());
// }
// taskService.update(taskObj);
// }
//
// @Override
// public void forceFinish(String task_code) {
// this.updateStatus(task_code, TaskStatus.FINISHED);
// }
//
// @Override
// public void cancel(String task_code) {
// this.updateStatus(task_code, TaskStatus.CANCELED);
// }
//}
//

7
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java

@ -102,7 +102,7 @@ public class CYZCTask extends AbstractTask {
@Override
public String setGroupPlate(JSONObject param) {
// 查找组盘表信息,不做修改
String vehicleCode = param.getString("vehicle_code");
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
String vehicleType = param.getString("vehicle_type");
if (vehicleCode == null) {
vehicleType = GeneralDefinition.STEEL_TRAY;
@ -181,7 +181,7 @@ public class CYZCTask extends AbstractTask {
// 载具编码:前面需要根据任务判断,没有载具不能生成任务
String vehicle_code = taskObj.getVehicle_code();
String vehicleType = taskObj.getVehicle_type();
if (vehicleType == null) {
if (vehicleType == null || vehicleType.equals(GeneralDefinition.NO)) {
vehicleType = GeneralDefinition.STEEL_TRAY;
}
String endPoint = taskObj.getPoint_code2(); // 获取终点
@ -195,6 +195,9 @@ public class CYZCTask extends AbstractTask {
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status,
GroupBindMaterialStatusEnum.BOUND.getValue())
.eq(SchBaseVehiclematerialgroup::getIs_firing, false));
if (ObjectUtil.isEmpty(one)) {
throw new BadRequestException(vehicle_code + " => " + vehicleType + "的组盘信息未找到");
}
one.setTask_code(taskObj.getTask_code());
one.setPoint_code(endPointObj.getPoint_code()); // 当前位置
one.setPoint_name(endPointObj.getPoint_name());

342
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java

@ -1,171 +1,171 @@
package org.nl.wms.sch.task_manage.task.tasks.yz;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
import org.nl.wms.sch.task_manage.task.TaskType;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.task.tasks.yz.mapper.YZMapper;
import org.nl.wms.util.PointUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author: lyd
* @Description: 压制缺料任务
* @Date: 2023/5/25
*/
@Slf4j
@Deprecated
@Component
@TaskType("-")
public class YZQLTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "-";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
@Autowired
private IPdmBdWorkorderService workorderService;
@Autowired
private YZMapper yzMapper;
@Override
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList());
// 找起点
String extGroupData = task.getExt_group_data();
JSONObject jsonObject = JSONObject.parseObject(extGroupData);
jsonObject.put("vehicle_type", task.getVehicle_type());
SchBasePoint point = findStartPoint(startRegionStr, jsonObject);
if (ObjectUtil.isEmpty(point)) {
task.setRemark("未找到所需点位!");
taskService.update(task);
// 消息通知
continue;
}
// 设置起点并修改创建成功状态
task.setPoint_code1(point.getPoint_code());
task.setTask_status(TaskStatus.CREATED.getCode());
task.setVehicle_code(point.getVehicle_code());
taskService.update(task);
point.setIng_task_code(task.getTask_code());
pointService.update(point);
//下发
// this.renotifyAcs(task);
}
}
/**
* 找起点业务混碾机工单的物料标识相同的位置
*
* @param startRegionStr : 区域列表
* @param extGroupData : 外部参数包含条件所需的信息
* @return
* @description : JSONObject获取不到就是null
*/
private SchBasePoint findStartPoint(List<String> startRegionStr, JSONObject extGroupData) {
// 获取当前工单
String workorderCode = extGroupData.getString("workorder_code");
PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
: null;
Assert.notNull(workOrder, "工单不能为空!");
// 查找混碾机工单的物料相同的位置
List<SchBasePoint> points = yzMapper.findPointForYZQL(startRegionStr, workOrder.getMaterial_id());
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
}
@Override
protected void updateStatus(String task_code, TaskStatus status) {
// 校验任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException("该任务已完成!");
}
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!");
}
// 获取参数
String startPoint = taskObj.getPoint_code1(); // 起点
JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
? JSONObject.parseObject(taskObj.getExt_group_data())
: null;
SchBasePoint startPointObj = pointService.getById(startPoint);
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
}
if (status.equals(TaskStatus.FINISHED)) { // 完成
// 任务上有载具编码 -> 获取当前载具编码的组盘信息
SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
.eq(SchBaseVehiclematerialgroup::getVehicle_code, taskObj.getVehicle_code())
.eq(SchBaseVehiclematerialgroup::getVehicle_type, taskObj.getVehicle_type())
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()));
// 将载具设置为已解绑
one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
vehiclematerialgroupService.update(one);
// 释放点位,将点位设置为空位,清空数据
if (ObjectUtil.isNotEmpty(startPointObj)) {
PointUtils.clearPoint(startPointObj);
// todo: 终点暂时无设置
}
// 任务修改成完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
}
if (status.equals(TaskStatus.CANCELED)) { // 取消
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
// 释放点位,起点正在执行的任务清空
if (ObjectUtil.isNotEmpty(startPointObj)) {
startPointObj.setIng_task_code("");
pointService.update(startPointObj);
}
}
taskService.update(taskObj);
}
@Override
public void forceFinish(String task_code) {
this.updateStatus(task_code, TaskStatus.FINISHED);
}
@Override
public void cancel(String task_code) {
this.updateStatus(task_code, TaskStatus.CANCELED);
}
}
//package org.nl.wms.sch.task_manage.task.tasks.yz;
//
//import cn.hutool.core.lang.Assert;
//import cn.hutool.core.util.ObjectUtil;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import lombok.extern.slf4j.Slf4j;
//import org.nl.common.exception.BadRequestException;
//import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
//import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
//import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
//import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
//import org.nl.wms.sch.point.service.ISchBasePointService;
//import org.nl.wms.sch.point.service.dao.SchBasePoint;
//import org.nl.wms.sch.task.service.ISchBaseTaskService;
//import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
//import org.nl.wms.sch.task.service.dao.SchBaseTask;
//import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
//import org.nl.wms.sch.task_manage.AbstractTask;
//import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
//import org.nl.wms.sch.task_manage.task.TaskType;
//import org.nl.wms.sch.task_manage.task.core.TaskStatus;
//import org.nl.wms.sch.task_manage.task.tasks.yz.mapper.YZMapper;
//import org.nl.wms.util.PointUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.Arrays;
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * @Author: lyd
// * @Description: 压制缺料任务
// * @Date: 2023/5/25
// */
//@Slf4j
//@Deprecated
//@Component
//@TaskType("-")
//public class YZQLTask extends AbstractTask {
// private static String TASK_CONFIG_CODE = "-";
//
// @Autowired
// private ISchBasePointService pointService;
// @Autowired
// private ISchBaseTaskService taskService;
// @Autowired
// private ISchBaseTaskconfigService taskConfigService;
// @Autowired
// private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
// @Autowired
// private IPdmBdWorkorderService workorderService;
// @Autowired
// private YZMapper yzMapper;
//
// @Override
// protected void create() throws BadRequestException {
// // 获取任务
// List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// // 配置信息
// SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
// .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
// for (SchBaseTask task : tasks) {
// List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList());
// // 找起点
// String extGroupData = task.getExt_group_data();
// JSONObject jsonObject = JSONObject.parseObject(extGroupData);
// jsonObject.put("vehicle_type", task.getVehicle_type());
// SchBasePoint point = findStartPoint(startRegionStr, jsonObject);
// if (ObjectUtil.isEmpty(point)) {
// task.setRemark("未找到所需点位!");
// taskService.update(task);
// // 消息通知
// continue;
// }
// // 设置起点并修改创建成功状态
// task.setPoint_code1(point.getPoint_code());
// task.setTask_status(TaskStatus.CREATED.getCode());
// task.setVehicle_code(point.getVehicle_code());
// taskService.update(task);
//
// point.setIng_task_code(task.getTask_code());
// pointService.update(point);
//
// //下发
//// this.renotifyAcs(task);
// }
// }
//
// /**
// * 找起点业务:混碾机工单的物料标识相同的位置
// *
// * @param startRegionStr : 区域列表
// * @param extGroupData : 外部参数,包含条件所需的信息
// * @return
// * @description : JSONObject获取不到就是null
// */
// private SchBasePoint findStartPoint(List<String> startRegionStr, JSONObject extGroupData) {
// // 获取当前工单
// String workorderCode = extGroupData.getString("workorder_code");
// PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode)
// ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
// .eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
// : null;
// Assert.notNull(workOrder, "工单不能为空!");
// // 查找混碾机工单的物料相同的位置
// List<SchBasePoint> points = yzMapper.findPointForYZQL(startRegionStr, workOrder.getMaterial_id());
// return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
// }
//
//
// @Override
// protected void updateStatus(String task_code, TaskStatus status) {
// // 校验任务
// SchBaseTask taskObj = taskService.getByCode(task_code);
// if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
// throw new BadRequestException("该任务已完成!");
// }
// if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
// throw new BadRequestException("该任务已取消!");
// }
// // 获取参数
// String startPoint = taskObj.getPoint_code1(); // 起点
// JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
// ? JSONObject.parseObject(taskObj.getExt_group_data())
// : null;
// SchBasePoint startPointObj = pointService.getById(startPoint);
// // 根据传来的类型去对任务进行操作
// if (status.equals(TaskStatus.EXECUTING)) { // 执行中
// taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
// taskObj.setRemark("执行中");
// }
// if (status.equals(TaskStatus.FINISHED)) { // 完成
// // 任务上有载具编码 -> 获取当前载具编码的组盘信息
// SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
// .eq(SchBaseVehiclematerialgroup::getVehicle_code, taskObj.getVehicle_code())
// .eq(SchBaseVehiclematerialgroup::getVehicle_type, taskObj.getVehicle_type())
// .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()));
// // 将载具设置为已解绑
// one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
// vehiclematerialgroupService.update(one);
// // 释放点位,将点位设置为空位,清空数据
// if (ObjectUtil.isNotEmpty(startPointObj)) {
// PointUtils.clearPoint(startPointObj);
// // todo: 终点暂时无设置
// }
// // 任务修改成完成
// taskObj.setTask_status(TaskStatus.FINISHED.getCode());
// }
// if (status.equals(TaskStatus.CANCELED)) { // 取消
// taskObj.setTask_status(TaskStatus.CANCELED.getCode());
// // 释放点位,起点正在执行的任务清空
// if (ObjectUtil.isNotEmpty(startPointObj)) {
// startPointObj.setIng_task_code("");
// pointService.update(startPointObj);
// }
// }
// taskService.update(taskObj);
// }
//
// @Override
// public void forceFinish(String task_code) {
// this.updateStatus(task_code, TaskStatus.FINISHED);
// }
//
// @Override
// public void cancel(String task_code) {
// this.updateStatus(task_code, TaskStatus.CANCELED);
// }
//}

8
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java

@ -101,7 +101,7 @@ public class YZSLTask extends AbstractTask {
TaskUtils.setUpdateByAcs(task);
taskService.updateById(task);
point.setIng_task_code(task.getTask_code());
// point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
@ -159,7 +159,7 @@ public class YZSLTask extends AbstractTask {
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.eq(SchBasePoint::getIs_used, true)
.orderBy(true, countUp > countLower, SchBasePoint::getPoint_code);
.orderBy(true, countUp <= countLower, SchBasePoint::getPoint_code);
List<SchBasePoint> schBasePoints = pointService.list(lam);
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
}
@ -193,13 +193,13 @@ public class YZSLTask extends AbstractTask {
@Override
public String setGroupPlate(JSONObject param) {
// 组盘,返回组盘标识,设置待绑定,搬运结束就设置已绑定
String vehicleCode = param.getString("vehicle_code");
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
if (vehicleCode == null) {
throw new BadRequestException("载具编码不能为空");
}
String vehicleType = param.getString("vehicle_type");
JSONObject stackParameters = param.getJSONObject("palletize");
if (vehicleType == null) {
if (vehicleType == null || vehicleType.equals(GeneralDefinition.NO)) {
vehicleType = GeneralDefinition.STEEL_TRAY;
}
String deviceCode = param.getString("device_code");

70
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/MesUtils.java

@ -0,0 +1,70 @@
package org.nl.wms.util;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.notice.impl.SysNoticeServiceImpl;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.ext.mes.service.dto.ResultForMes;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
/**
* @Author: lyd
* @Description: 与MES对接的接口请求
* @Date: 2023/9/6
*/
@Slf4j
public class MesUtils {
/**
* 一次发单条数据
* @param api
* @param object
* @return
* @param <T>
*/
public static <T> ResultForMes notifyMes(String api, T object) {
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
SysNoticeServiceImpl sysNoticeService = SpringContextHolder.getBean(SysNoticeServiceImpl.class);
//判断是否连接MES系统
Param isConnectAcs = sysParamService.findByCode(GeneralDefinition.IS_CONNECT_MES);
if (ObjectUtil.isEmpty(isConnectAcs)) {
return ResultForMes.requestRefuse("参数表中:" + GeneralDefinition.IS_CONNECT_MES + "不存在");
}
String isConnect = isConnectAcs.getValue();
//MES地址:127.0.0.1:8010
Param acsUrlObj = sysParamService.findByCode(GeneralDefinition.MES_URL);
if (ObjectUtil.isEmpty(acsUrlObj)) {
return ResultForMes.requestRefuse("参数表中:" + GeneralDefinition.MES_URL + "不存在");
}
String acsUrl = acsUrlObj.getValue();
JSONObject result;
if (StrUtil.equals(GeneralDefinition.NO, isConnect)) {
return ResultForMes.requestRefuse("未连接MES!");
}
String url = acsUrl + api;
log.info("下发mes的参数为:{}", object.toString());
ResultForMes resultForMes = ResultForMes.requestSuccess();
try {
String resultMsg = HttpRequest.post(url)
.body(JSON.toJSONString(object))
.execute().body();
result = JSONObject.parseObject(resultMsg);
resultForMes = JSONObject.toJavaObject(result, ResultForMes.class);
} catch (Exception e) {
String msg = e.getMessage();
//网络不通
log.error("连接失败:{}", msg);
// 发送通知
sysNoticeService.createNotice("接口请求失败: " + resultForMes.getMessage(), api, NoticeTypeEnum.EXCEPTION.getCode());
return ResultForMes.requestRefuse("网络不通,操作失败!");
}
return resultForMes;
}
}

55
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/OracleJDBCExample.java

@ -0,0 +1,55 @@
package org.nl.wms.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class OracleJDBCExample {
public static void main(String[] args) {
String jdbcUrl = "jdbc:oracle:thin:@172.27.37.66:1521:RTMES"; // 根据您的数据库配置修改连接字符串
String username = "LMSTELCOM"; // 您的数据库用户名
String password = "LMSTELCOM_6463"; // 您的数据库密码
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// 1. 加载 Oracle JDBC 驱动程序
Class.forName("oracle.jdbc.OracleDriver");
// 2. 创建数据库连接
connection = DriverManager.getConnection(jdbcUrl, username, password);
// 3. 创建 SQL 语句执行器
statement = connection.createStatement();
// 4. 执行 SQL 查询
String sqlQuery = "SELECT * FROM RTMG.VIEW_MATERIAL_LMS"; // 根据您的查询修改表名
resultSet = statement.executeQuery(sqlQuery);
// 5. 处理查询结果
while (resultSet.next()) {
// 从结果集中获取数据
String id = resultSet.getString("MATNR"); // 根据表的列名修改
// 打印查询结果
System.out.println("ID: " + id);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6. 关闭资源
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java

@ -165,7 +165,7 @@ public class TaskUtils {
}
/**
* 如果传来的载具编码是0就返回null
* 如果传来的载具编码是0就返回null, 否则替换成四位数用零补齐
* @param acsVehicleCode
* @return
*/
@ -173,6 +173,6 @@ public class TaskUtils {
if (ObjectUtil.isEmpty(acsVehicleCode) || acsVehicleCode.equals(GeneralDefinition.NO)) {
return null;
}
return acsVehicleCode;
return String.format("%04d", Integer.parseInt(acsVehicleCode));
}
}

23
lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml

@ -6,14 +6,29 @@ spring:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
primary: db1
primary: mysql
datasource:
db1:
mysql:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
# url: jdbc:log4jdbc:mysql://${DB_HOST:10.93.41.198}:${DB_PORT:3306}/${DB_NAME:rl_mg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
# username: ${DB_USER:root}
# password: ${DB_PWD:123456}
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:rtmg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
username: ${DB_USER:root}
password: ${DB_PWD:12356}
type: com.alibaba.druid.pool.DruidDataSource
oracle:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@172.27.37.66:1521:RTMES
username: ${DB_USER:LMSTELCOM}
password: ${DB_PWD:LMSTELCOM_6463}
type: com.alibaba.druid.pool.DruidDataSource
sqlserver:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://10.93.41.2\WINCC;DatabaseName=马钢_RH
username: ${DB_USER:sa}
password: ${DB_PWD:123}
type: com.alibaba.druid.pool.DruidDataSource
redis:
#数据库索引
host: ${REDIS_HOST:127.0.0.1}
@ -134,3 +149,7 @@ sa-token:
password:
# 连接超时时间
timeout: 10s
lucene:
index:
path: D:\lucene\index

22
lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml

@ -6,13 +6,28 @@ spring:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
primary: db1
primary: mysql
datasource:
db1:
mysql:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://${DB_HOST:10.93.41.198}:${DB_PORT:3306}/${DB_NAME:rl_mg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
username: ${DB_USER:root}
password: ${DB_PWD:123456}
# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:rtmg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
# username: ${DB_USER:root}
# password: ${DB_PWD:12356}
type: com.alibaba.druid.pool.DruidDataSource
oracle:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@172.27.37.66:1521:RTMES
username: ${DB_USER:LMSTELCOM}
password: ${DB_PWD:LMSTELCOM_6463}
type: com.alibaba.druid.pool.DruidDataSource
sqlserver:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://10.93.41.2\WINCC;DatabaseName=马钢_RH
username: ${DB_USER:sa}
password: ${DB_PWD:123}
type: com.alibaba.druid.pool.DruidDataSource
redis:
#数据库索引
@ -157,3 +172,6 @@ sa-token:
password:
# 连接超时时间
timeout: 10s
lucene:
index:
path: E:\lucene\index

25
lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml

@ -49,16 +49,16 @@ spring:
redis:
repositories:
enabled: false
#配置 Jpa
jpa:
hibernate:
ddl-auto: none
open-in-view: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
enable_lazy_load_no_trans: true
#
# #配置 Jpa
# jpa:
# hibernate:
# ddl-auto: none
# open-in-view: true
# properties:
# hibernate:
# dialect: org.hibernate.dialect.MySQL5InnoDBDialect
# enable_lazy_load_no_trans: true
task:
pool:
# 核心线程池大小
@ -122,12 +122,9 @@ security:
mybatis-plus:
configuration:
map-underscore-to-camel-case: false
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations:
- classpath:org.nl.**.mapper/*.xml
global-config:
db-config:
id-type: INPUT
lucene:
index:
path: C:\lucene\index

12
lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml

@ -48,6 +48,11 @@ https://juejin.cn/post/6844903775631572999
</appender>
<appender name="luceneAppender" class="org.nl.config.lucene.LuceneAppender" />
<appender name="asyncLuceneAppender" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="luceneAppender" />
<!-- 设置队列大小,根据您的需求调整 -->
<queueSize>512</queueSize>
</appender>
<!--异步到文件-->
<appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
@ -57,8 +62,9 @@ https://juejin.cn/post/6844903775631572999
</appender>
<!--开发环境:打印控制台-->
<springProfile name="dev">
<root level="debug">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="asyncLuceneAppender"/>
</root>
<logger name="org.springframework" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>
@ -101,9 +107,9 @@ https://juejin.cn/post/6844903775631572999
<!--生产环境:打印控制台和输出到文件-->
<springProfile name="prod">
<root level="debug">
<root level="INFO">
<appender-ref ref="asyncFileAppender"/>
<appender-ref ref="luceneAppender"/>
<appender-ref ref="asyncLuceneAppender"/>
</root>
<logger name="org.springframework" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/>

26
lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java

@ -6,6 +6,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.junit.jupiter.api.Test;
import org.nl.config.MapOf;
import org.nl.system.service.user.ISysUserService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.ext.mes.service.WmsToMesService;
import org.nl.wms.ext.mes.service.dao.mapper.MesRequestMapper;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task_manage.GeneralDefinition;
@ -29,6 +32,10 @@ public class ApplicationTest {
private ISchBasePointService pointService;
@Autowired
private YZMapper yzMapper;
@Autowired
private WmsToMesService wms;
@Autowired
private MesRequestMapper mesRequestMapper;
@Test
void contextLoads() {
System.out.println(userService.list());
@ -63,4 +70,23 @@ public class ApplicationTest {
List<SchBasePoint> schBasePoints = pointService.list(lam);
System.out.println(schBasePoints.get(0));
}
@Test
public void formats() {
String original = "1115";
String formatted = String.format("%04d", Integer.parseInt(original));
System.out.println("Formatted: " + formatted);
}
@Test
public void testMudToMes() {
List<MdBaseMaterial> mesMaterialInfos = mesRequestMapper.getMesMaterialInfos("");
System.out.println(mesMaterialInfos);
}
@Test
public void testMudToMes2() {
List<JSONObject> materials = mesRequestMapper.getMesMaterialInfos2();
System.out.println(materials);
}
}

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

@ -0,0 +1,24 @@
package org.nl.ext;
import org.junit.jupiter.api.Test;
import org.nl.wms.ext.mes.service.dao.mapper.MesRequestMapper;
import org.nl.wms.ext.mes.service.dto.MesMudConsumptionDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* @Author: lyd
* @Description:
* @Date: 2023/9/8
*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestDemo {
@Autowired
private MesRequestMapper mesRequestMapper;
@Test
public void test01() {
MesMudConsumptionDto mudObject = mesRequestMapper.getMudConsumption("1699671959522119680");
System.out.println(mudObject);
}
}

2
lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java

@ -161,7 +161,7 @@ public class PointCreate {
@Test
void test05() { // 双层缓存输送线缓存区域
List<SchBasePoint> pointList = new ArrayList<>();
for (int i = 1; i <= 40; i++) {
for (int i = 41; i <= 124; i++) {
String pointName = "缓存输送线";
String pointCode = "HCSSX";
if (i < 10) {

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

@ -1,5 +1,5 @@
<template>
<div class="app-container">
<div v-loading.fullscreen.lock="fullscreenLoading" class="app-container">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle">
@ -38,7 +38,18 @@
</el-form>
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<crudOperation :permission="permission" >
<el-button
slot="right"
class="filter-item"
type="success"
icon="el-icon-position"
size="mini"
@click="synchronize()"
>
同步
</el-button>
</crudOperation>
<!--表单组件-->
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px">
@ -156,6 +167,7 @@ export default {
},
rules: {
},
fullscreenLoading: false,
workShopList: []
}
},
@ -167,6 +179,15 @@ export default {
[CRUD.HOOK.beforeRefresh]() {
return true
},
synchronize() {
this.fullscreenLoading = true
crudMdBaseMaterial.synchronize(this.crud.query).then(res => {
this.fullscreenLoading = false
this.crud.notify('同步成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(() => {
this.fullscreenLoading = false
})
},
getWorkShopList() { //
crudMdBaseWorkShop.getWorkShopList().then(res => {
this.workShopList = res

10
lms/nladmin-ui/src/views/wms/basedata/material/mdBaseMaterial.js

@ -24,4 +24,12 @@ export function edit(data) {
})
}
export default { add, edit, del }
export function synchronize(data) {
return request({
url: 'api/mdBaseMaterial/synchronize',
method: 'post',
data
})
}
export default { add, edit, del, synchronize }

2
lms/nladmin-ui/src/views/wms/pdm/consumption/index.vue

@ -75,7 +75,7 @@ const defaultForm = {
current_point: null
}
export default {
name: 'PdmBdMudConsumption',
name: 'MudConsumption',
components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {

22
lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue

@ -72,6 +72,16 @@
>
开工
</el-button>
<el-button
slot="right"
class="filter-item"
type="success"
icon="el-icon-position"
size="mini"
@click="synchronize()"
>
同步
</el-button>
</crudOperation>
<!--表单组件-->
<el-dialog
@ -357,7 +367,7 @@
</template>
<script>
import crudPdmBdWorkorder from './pdmBdWorkorder'
import crudPdmBdWorkorder, { orderSynchronize } from './pdmBdWorkorder'
import crudSchBaseRegion from '@/views/wms/sch/region/schBaseRegion'
import crudSchBasePoint from '@/views/wms/sch/point/schBasePoint'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
@ -368,6 +378,7 @@ import pagination from '@crud/Pagination'
import crudMdBaseWorkShop from '@/views/wms/basedata/workshop/mdBaseWorkshop'
import MaterialDialog from '@/views/wms/sch/group/MaterialDialog.vue'
import item from '@/layout/components/Sidebar/Item.vue'
import crudMdBaseMaterial from '@/views/wms/basedata/material/mdBaseMaterial'
const defaultForm = {
workorder_id: null,
@ -532,6 +543,15 @@ export default {
this.crud.toQuery()
})
},
synchronize() {
this.fullscreenLoading = true
crudPdmBdWorkorder.orderSynchronize(this.crud.query).then(res => {
this.fullscreenLoading = false
this.crud.notify('同步成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(() => {
this.fullscreenLoading = false
})
}
}
}
</script>

11
lms/nladmin-ui/src/views/wms/pdm/workerorder/pdmBdWorkorder.js

@ -1,4 +1,5 @@
import request from '@/utils/request'
import { synchronize } from '@/views/wms/basedata/material/mdBaseMaterial'
export function add(data) {
return request({
@ -32,4 +33,12 @@ export function submits(param) {
})
}
export default { add, edit, del, submits }
export function orderSynchronize(data) {
return request({
url: 'api/pdmBdWorkorder/synchronize',
method: 'post',
data
})
}
export default { add, edit, del, submits, orderSynchronize }

3
lms/nladmin-ui/src/views/wms/sch/group/WorkOrderDialog.vue

@ -49,8 +49,9 @@
</el-table-column>
<el-table-column prop="workorder_code" label="工单编号" width="120px"/>
<el-table-column v-if="false" prop="material_id" label="物料标识" />
<el-table-column prop="workshop_code" label="所属车间" min-width="120" show-overflow-tooltip />
<el-table-column prop="material_code" label="物料编码" width="100" show-overflow-tooltip />
<el-table-column prop="half_material_code" label="半成品" width="100" show-overflow-tooltip />
<el-table-column prop="raw_material_code" label="配方" width="100" show-overflow-tooltip />
<el-table-column prop="material_name" label="物料名称" width="100" show-overflow-tooltip />
<el-table-column prop="material_spec" label="物料规格" width="100" show-overflow-tooltip />
<el-table-column prop="update_name" label="修改人" />

39
lms/nladmin-ui/src/views/wms/sch/group/index.vue

@ -107,7 +107,6 @@
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.point_code }}</span>
</el-option>
</el-select>
<!-- <el-input v-model="form.point_code" style="width: 240px;" />-->
</el-form-item>
<el-form-item label="点位名称">
<el-input v-model="form.point_name" style="width: 240px;" disabled/>
@ -192,6 +191,39 @@
<!--<el-form-item label="是否首个流程任务">
<el-input v-model="form.is_first_flow_task" style="width: 240px;" />
</el-form-item>-->
<el-form-item label="绑定状态">
<el-select
v-model="form.group_bind_material_status"
size="mini"
placeholder="绑定状态"
class="filter-item"
style="width: 240px;"
clearable
>
<el-option
v-for="item in dict.group_bind_material_status"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="载具类型">
<el-select
v-model="form.vehicle_type"
clearable
size="mini"
placeholder="请选择"
class="filter-item"
style="width: 240px;"
@change="hand"
>
<el-option
v-for="item in dict.vehicle_type"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="流程编码">
<el-input v-model="form.flow_code" style="width: 240px;" />
</el-form-item>
@ -296,6 +328,7 @@ import crudSchBaseRegion from '@/views/wms/sch/region/schBaseRegion'
const defaultForm = {
group_id: null,
vehicle_code: null,
vehicle_type: null,
material_id: null,
child_vehicle_code: null,
source_vehicle_code: null,
@ -330,7 +363,7 @@ const defaultForm = {
}
export default {
name: 'VehicleMaterialGroup',
dicts: ['group_status', 'group_bind_material_status'],
dicts: ['group_status', 'group_bind_material_status', 'vehicle_type'],
components: { WorkOrderDialog, MaterialDialog, pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
@ -403,6 +436,7 @@ export default {
this.form.material_id = row.material_id
this.form.material_spec = row.material_spec
this.form.material_code = row.material_code
this.form.redundance_material_code = row.raw_material_code
if (this.choose === '工单') {
this.form.workorder_code = row.workorder_code
}
@ -412,6 +446,7 @@ export default {
this.form.material_id = null
this.form.material_spec = null
this.form.material_code = null
this.form.redundance_material_code = null
},
setPointName(data) {
var point = this.pointList.find(item => item.point_code === data)

Loading…
Cancel
Save