Browse Source

add: 新增物料展示,去外协物料打印,导出任务数据,导入载具号功能

master
yanps 8 months ago
parent
commit
8506ec5a04
  1. 60
      lms/nladmin-system/nlsso-server/pom.xml
  2. 13
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  3. 10
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/connector/service/dto/ConnectorDto.java
  4. 15
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/connector/service/impl/ConnectorToWmsServiceImpl.java
  5. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/fab/service/dto/SendMaterVo.java
  6. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/fab/service/dto/SendVehicleVo.java
  7. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/fab/service/impl/FabServiceImpl.java
  8. 126
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/impl/HandheldServiceImpl.java
  9. 33
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java
  10. 9
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/wms/service/LmsToWmsService.java
  11. 14
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/wms/service/impl/LmsToWmsServiceImpl.java
  12. 8
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java
  13. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.java
  14. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.xml
  15. 31
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java
  16. 10
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java
  17. 15
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java
  18. 92
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java
  19. 142
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoQueryFilePath.java
  20. 26
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java
  21. 56
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/ConnectorUtil.java
  22. 68
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/WmsUtil.java
  23. 23
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/BlankingTask.java
  24. 55
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/pcoperation/PcOperationSMTTask.java
  25. 102
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/pcoperation/ProcessingSMTTask.java
  26. 21
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/vehicle/controller/BmVehicleInfoController.java
  27. 6
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/vehicle/service/IBmVehicleInfoService.java
  28. 57
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/vehicle/service/impl/BmVehicleInfoServiceImpl.java
  29. 157
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PrintUtil.java
  30. BIN
      lms/nladmin-system/nlsso-server/src/main/resources/lib/spire.office.free-5.3.1.jar
  31. 34
      lms/nladmin-system/nlsso-server/src/main/resources/log/LmsToWms.xml
  32. 1
      lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
  33. 116
      lms/nladmin-ui/src/views/wms/sch/UploadDialog.vue
  34. 9
      lms/nladmin-ui/src/views/wms/sch/task/index.vue
  35. 27
      lms/nladmin-ui/src/views/wms/sch/vehicle/index.vue
  36. 10
      lms/nladmin-ui/src/views/wms/sch/vehicle/vehicle.js

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

@ -30,10 +30,57 @@
<jna.version>5.9.0</jna.version>
<lucene.version>8.2.0</lucene.version>
<configuration.version>1.9</configuration.version>
<commons-csv.version>1.8</commons-csv.version>
</properties>
<dependencies>
<!--导出CSV相关-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>${commons-csv.version}</version>
</dependency>
<dependency>
<groupId>com.spire</groupId>
<artifactId>office</artifactId>
<version>5.3.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/../nlsso-server/src/main/resources/lib/spire.office.free-5.3.1.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version> <!-- 请使用最新版本 -->
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version> <!-- 请使用最新版本 -->
</dependency>
<!--word模板数据解析-->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.0-beta</version>
</dependency>
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>aspose-pdf</artifactId>
<version>23.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.samba.jcifs</groupId>
<artifactId>jcifs</artifactId>
@ -285,19 +332,20 @@
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
<artifactId>poi</artifactId>
<version>5.2.3</version> <!-- 请使用最新版本 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version> <!-- 请使用最新版本 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version> <!-- 请使用最新版本 -->
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>

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

@ -45,6 +45,7 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.task.ConnectorUtil;
import org.nl.wms.sch.task_manage.task.TaskFactory;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper;
@ -554,16 +555,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (ObjectUtil.isEmpty(mdBaseMaterial)) {
//TODO:物料不存在
}
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setGroup_id(connectorDto.getID());
schBaseVehiclematerialgroup.setVehicle_code(connectorDto.getVehicle_code());
schBaseVehiclematerialgroup.setJob_name(connectorDto.getJobname());
schBaseVehiclematerialgroup.setMaterial_id(connectorDto.getProductID());
schBaseVehiclematerialgroup.setMaterial_qty(connectorDto.getCurrentqty());
schBaseVehiclematerialgroup.setRegion_code(connectorDto.getNextOperation());
schBaseVehiclematerialgroup.setExtend(JSON.toJSONString(connectorDto));
schBaseVehiclematerialgroup.setOrder_code(connectorDto.getProductionOrder());
schBaseVehiclematerialgroup.setCreate_name("Connector");
connectorDto.setCreate_name("Connector");
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = ConnectorUtil.createObject(connectorDto);
iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
if ("Y".equals(connectorDto.getFinished())) {
jobName = connectorDto.getJobname();

10
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/connector/service/dto/ConnectorDto.java

@ -93,4 +93,14 @@ public class ConnectorDto {
*/
@SerializedName("dueDate")
private String DueDate;
/**
* 交期时间
*/
private String due_date;
/**
* 优先级
*/
private String priority;
private String create_name;
}

15
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/connector/service/impl/ConnectorToWmsServiceImpl.java

@ -26,6 +26,7 @@ import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.task.ConnectorUtil;
import org.nl.wms.sch.task_manage.task.TaskFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -135,18 +136,10 @@ public class ConnectorToWmsServiceImpl implements ConnectorToWmsService {
.eq(SchBaseVehiclematerialgroup::getGroup_id, connectorDto.getID()));
if (ObjectUtil.isNotNull(one)) {
log.info("id:" + connectorDto.getID() + "," + "该物料信息已存在!");
throw new BadRequestException("id:" + connectorDto.getID() + "," + "该物料信息已存在!");
continue;
}
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setGroup_id(connectorDto.getID());
schBaseVehiclematerialgroup.setVehicle_code(connectorDto.getVehicle_code());
schBaseVehiclematerialgroup.setJob_name(connectorDto.getJobname());
schBaseVehiclematerialgroup.setMaterial_id(connectorDto.getProductID());
schBaseVehiclematerialgroup.setMaterial_qty(connectorDto.getCurrentqty());
schBaseVehiclematerialgroup.setRegion_code(connectorDto.getNextOperation());
schBaseVehiclematerialgroup.setExtend(JSON.toJSONString(connectorDto));
schBaseVehiclematerialgroup.setOrder_code(connectorDto.getProductionOrder());
schBaseVehiclematerialgroup.setCreate_name("Connector");
connectorDto.setCreate_name("Connector");
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = ConnectorUtil.createObject(connectorDto);
iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
}
return null;

5
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/fab/service/dto/SendMaterVo.java

@ -1,10 +1,14 @@
package org.nl.wms.ext.fab.service.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SendMaterVo {
/**
* 载具编码
@ -14,6 +18,7 @@ public class SendMaterVo {
* 物料id
*/
public String material_id;
public String material_code;
/**
* 订单号
*/

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/fab/service/dto/SendVehicleVo.java

@ -35,6 +35,10 @@ public class SendVehicleVo {
* 物料id
*/
private String material_id;
/**
* 物料号
*/
private String material_code;
/**
* 优先级
*/

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

@ -2,6 +2,7 @@ package org.nl.wms.ext.fab.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -82,6 +83,10 @@ public class FabServiceImpl {
case "cmt":
Assert.noNullElements(new Object[]{form.getString("device_code"), form.getString("vehicle_code")}, "参数不能为空!");
CallMaterVo callMaterVo = form.toJavaObject(CallMaterVo.class);
SchBasePoint schBasePoint2 = iSchBasePointService.selectByPointCode(callMaterVo.getDevice_code());
if (schBasePoint2.getPoint_status().equals(GoodsEnum.IN_STOCK.getValue())) {
throw new BadRequestException("该点位已存在物料!");
}
param.put("device_code", callMaterVo.getDevice_code());
param.put("config_code", "PcOperationCMTask");
param.put("region_code", callMaterVo.getRegion_code());
@ -102,7 +107,7 @@ public class FabServiceImpl {
if (ObjectUtil.isEmpty(schBasePoint1)) {
throw new BadRequestException("点位不存在");
}
if (!schBasePoint1.getPoint_status().equals(GoodsEnum.OUT_OF_STOCK.getValue()) || schBasePoint1.getIs_lock()) {
if (StrUtil.isNotEmpty(schBasePoint1.getVehicle_code())) {
throw new BadRequestException("该点位不是空站点,请确认再呼叫");
}
param.put("device_code", callEmpVo.getDevice_code());

126
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/impl/HandheldServiceImpl.java

@ -36,6 +36,7 @@ import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.task.TaskFactory;
import org.nl.wms.sch.task_manage.task.core.TaskType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@ -75,8 +76,8 @@ public class HandheldServiceImpl implements HandheldService {
@Override
public void emptyCageStorageTask(JSONObject param) {
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_list")
}, "参数不能为空!");
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_list")},
"参数不能为空!");
String vehicle = param.getString("vehicle_list");
String device_code = param.getString("device_code");
String type = param.getString("type");
@ -101,10 +102,6 @@ public class HandheldServiceImpl implements HandheldService {
/**
* 空载具送回货架
*
* @param vehicle
* @param device_code
* @param param
*/
private void applyDeliveryRacks(String vehicle, String device_code, JSONObject param) {
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
@ -121,14 +118,7 @@ public class HandheldServiceImpl implements HandheldService {
throw new BadRequestException("载具号已存在别的点位,请确认再下发");
}
// 准备参数:设备编码
JSONObject jo = new JSONObject();
jo.put("device_code", device_code);
jo.put("config_code", "RACKTask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_code", vehicle);
jo.put("vehicle_type", mdBaseVehicle.getVehicle_type());
jo.put("ext_data", param);
connectorTask.apply(jo);
applyTask(param, vehicle, device_code, mdBaseVehicle, connectorTask);
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
.eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code())
.set(SchBasePoint::getIs_lock, true));
@ -136,10 +126,6 @@ public class HandheldServiceImpl implements HandheldService {
/**
* 内部过道送托盘
*
* @param vehicle
* @param device_code
* @param param
*/
private void interiorAisle(String vehicle, String device_code, JSONObject param) {
MdBaseVehicle mdBaseVehicle = iMdBaseVehicleService.selectByVehicleCode(vehicle);
@ -162,10 +148,6 @@ public class HandheldServiceImpl implements HandheldService {
/**
* 空料架送回
*
* @param vehicle
* @param device_code
* @param param
*/
private void semiAutomaticBending(String vehicle, String device_code, JSONObject param) {
MdBaseVehicle mdBaseVehicle = iMdBaseVehicleService.selectByVehicleCode(vehicle);
@ -174,26 +156,11 @@ public class HandheldServiceImpl implements HandheldService {
&& !mdBaseVehicle.getVehicle_type().equals(VehicleTypeEnum.RACKS_S06.getVehicleCode())) {
throw new BadRequestException("不是料架,生成搬运任务失败!");
}
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
AbstractTask connectorTask = taskFactory.getTask("RACKTask");
// 准备参数:设备编码
JSONObject jo = new JSONObject();
jo.put("device_code", device_code);
jo.put("config_code", "RACKTask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_code", vehicle);
jo.put("vehicle_type", mdBaseVehicle.getVehicle_type());
jo.put("ext_data", param);
connectorTask.apply(jo);
rackTask(param, vehicle, device_code, mdBaseVehicle);
}
/**
* 空料框送回
*
* @param vehicle
* @param device_code
* @param param
*/
private void artificialBending(String vehicle, String device_code, JSONObject param) {
String[] vehicle_list = null;
@ -230,7 +197,6 @@ public class HandheldServiceImpl implements HandheldService {
throw new BadRequestException("托盘类型不匹配,,生成搬运任务失败!");
}
});
}
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
@ -254,15 +220,14 @@ public class HandheldServiceImpl implements HandheldService {
@Override
@Transactional(rollbackFor = Exception.class)
public void cageBlankingTask(JSONObject param) {
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_code")},
"当前点位或载具号不能为空!");
boolean allNotEmpty = ObjectUtil.isAllNotEmpty(param.getString("device_code"), param.getString("vehicle_code"), param.getString("type"));
Assert.isTrue(allNotEmpty, "当前点位,载具号或类型不能为空!");
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(param.getString("device_code"));
Assert.notNull(schBasePoint, "当前点位不存在!");
SchBasePoint one = iSchBasePointService.getOne(Wrappers.lambdaQuery(SchBasePoint.class)
.eq(SchBasePoint::getVehicle_code, param.getString("vehicle_code"))
.ne(SchBasePoint::getPoint_code, param.getString("device_code")));
if (ObjectUtil.isNotEmpty(one)) {
throw new BadRequestException("载具号已存在别的点位,请确认再下发");
}
Assert.isNull(one, "载具号已存在别的点位,请确认再下发");
String region_code = param.getString("region_code");
String device_code = param.getString("device_code");
String vehicle_code = param.getString("vehicle_code");
@ -288,13 +253,6 @@ public class HandheldServiceImpl implements HandheldService {
/**
* connector下料入库
*
* @param
* @param param
* @param region_code
* @param device_code
* @param vehicle_code
* @param connectorTask
*/
private void connectorBlanking(JSONObject param, String region_code, String device_code, String vehicle_code, AbstractTask connectorTask) {
JSONObject jo = new JSONObject();
@ -314,15 +272,8 @@ public class HandheldServiceImpl implements HandheldService {
/**
* 物料下料去货架
*
* @param param
* @param region_code
* @param device_code
* @param vehicle_code
* @param connectorTask
*/
private void goShelves(SchBasePoint schBasePoint, JSONObject param, String region_code, String device_code, String vehicle_code, AbstractTask connectorTask) {
//TODO:是否需要加上是否有无货校验
Assert.noNullElements(param.getJSONArray("material"), "参数不能为空!");
JSONArray materials = param.getJSONArray("material");
JSONObject jo = new JSONObject();
@ -338,7 +289,7 @@ public class HandheldServiceImpl implements HandheldService {
if (StrUtil.isBlank(region_code)) {
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
materials.stream().forEach(material2 -> {
materials.forEach(material2 -> {
boolean material_code = ObjectUtil.isEmpty(((LinkedHashMap) material2).get("material_code"));
if (material_code) {
((LinkedHashMap) material2).remove("material_code");
@ -353,7 +304,7 @@ public class HandheldServiceImpl implements HandheldService {
json.put("region_code", schBasePoint.getRegion_code());
json.put("materials", jsonArray);
JSONObject json1 = wmsToConnectorService.applyRegionAndDueDate(json);
if (ObjectUtil.isNotEmpty(json1) && json1.getInteger("status") == 200) {
if (ObjectUtil.isNotEmpty(json1) && json1.getInteger("status") == HttpStatus.OK.value()) {
JSONArray date = json1.getJSONArray("data");
date.stream().map(date1 -> JSONObject.parseObject(StrUtil.toString(date1))).forEach(json2 -> {
List<cn.hutool.json.JSONObject> updatedMaterials = materials.stream()
@ -363,10 +314,8 @@ public class HandheldServiceImpl implements HandheldService {
jsonObject.putOpt("due_date", json2.getString("due_date"));
jsonObject.putOpt("region_code", json2.getString("next_region_code"));
jsonObject.putOpt("priority", json2.getString("priority"));
return jsonObject; // 更新的对象
} else {
return jsonObject; // 其他对象保持不变
}
return jsonObject;
})
.collect(Collectors.toList());
materials.clear();
@ -384,38 +333,18 @@ public class HandheldServiceImpl implements HandheldService {
jo.put("config_code", "BLANKINGTask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_code", vehicle_code);
param.put("region_code", region_code);
param.put("materials",materials);
jo.put("ext_data", param);
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
.eq(SchBasePoint::getPoint_code, device_code)
.set(SchBasePoint::getIs_lock, true));
connectorTask.apply(jo);
iSchBaseVehiclematerialgroupService.remove(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicle_code));
String finalRegion_code = region_code;
materials.stream().forEach(material -> {
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(material);
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(vehicle_code);
schBaseVehiclematerialgroup.setMaterial_qty(jsonObject.getInt("material_qty"));
schBaseVehiclematerialgroup.setMaterial_code(jsonObject.getStr("material_code"));
schBaseVehiclematerialgroup.setOrder_code(jsonObject.getStr("order_code"));
schBaseVehiclematerialgroup.setDue_date(jsonObject.getStr("due_date"));
schBaseVehiclematerialgroup.setCreate_name(SecurityUtils.getCurrentNickName());
schBaseVehiclematerialgroup.setPriority(jsonObject.getStr("priority"));
schBaseVehiclematerialgroup.setRegion_code(StrUtil.isBlank(finalRegion_code) ? jsonObject.getStr("region_code") : finalRegion_code);
iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
});
}
}
/**
* 物料下料去外协或内部加工区
*
* @param param
* @param region_code
* @param device_code
* @param vehicle_code
* @param connectorTask
*/
private void goWxOrNx(JSONObject param, String region_code, String device_code, String vehicle_code, AbstractTask connectorTask) {
JSONObject jo = new JSONObject();
@ -426,14 +355,14 @@ public class HandheldServiceImpl implements HandheldService {
MdBaseVehicle mdBaseVehicle = iMdBaseVehicleService.selectByVehicleCode(vehicle_code);
if (mdBaseVehicle.getVehicle_type().equals(VehicleTypeEnum.TRAY.getVehicleCode()))
throw new BadRequestException("钢托盘不能存放加工区!");
param.put("region_code", region_code);
jo.put("device_code", device_code);
jo.put("config_code", "ProcessingSMTTask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_code", vehicle_code);
jo.put("region_code", region_code);
param.put("target_region_code", region_code);
jo.put("ext_data", param);
param.put("region_code", region_code);
param.put("target_region_code", region_code);
connectorTask.apply(jo);
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
.eq(SchBasePoint::getPoint_code, device_code)
@ -478,7 +407,7 @@ public class HandheldServiceImpl implements HandheldService {
if (StrUtil.equals(status, "0")) {
iSchBaseTaskService.updateTaskStatusByPointCode(pointCodes);
if (param.getJSONArray("pointCodes").size() > 0) {
param.getJSONArray("pointCodes").stream().forEach(pointCode -> {
param.getJSONArray("pointCodes").forEach(pointCode -> {
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(pointCode);
iSchBaseVehiclematerialgroupService.remove(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getVehicle_code, jsonObject.get("vehicle_code")));
@ -537,10 +466,18 @@ public class HandheldServiceImpl implements HandheldService {
|| !mdBaseVehicle.getVehicle_type().equals(VehicleTypeEnum.RACKS_S06.getVehicleCode())) {
throw new BadRequestException("不是料架,生成搬运任务失败!");
}
rackTask(param, vehicle_code, device_code, mdBaseVehicle);
}
private void rackTask(JSONObject param, String vehicle_code, String device_code, MdBaseVehicle mdBaseVehicle) {
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
AbstractTask connectorTask = taskFactory.getTask("RACKTask");
// 准备参数:设备编码
applyTask(param, vehicle_code, device_code, mdBaseVehicle, connectorTask);
}
private void applyTask(JSONObject param, String vehicle_code, String device_code, MdBaseVehicle mdBaseVehicle, AbstractTask connectorTask) {
JSONObject jo = new JSONObject();
jo.put("device_code", device_code);
jo.put("config_code", "RACKTask");
@ -608,7 +545,7 @@ public class HandheldServiceImpl implements HandheldService {
@Override
public void updateRegionCodeByOrder(JSONArray json) {
Assert.noNullElements(json, "参数不能为空!");
json.stream().forEach(material -> {
json.forEach(material -> {
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(material);
iSchBaseVehiclematerialgroupService.update(Wrappers.lambdaUpdate(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getOrder_code, jsonObject.getStr("order_code"))
@ -626,7 +563,7 @@ public class HandheldServiceImpl implements HandheldService {
if (ObjectUtil.isEmpty(username)) return null;
List<String> list = JSONUtil.toList(username.getDevices(), String.class);
List<JSONObject> jsonList = new ArrayList<>();
list.stream().forEach(device -> {
list.forEach(device -> {
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device);
if (ObjectUtil.isNotEmpty(schBasePoint)) {
JSONObject map = new JSONObject();
@ -643,8 +580,8 @@ public class HandheldServiceImpl implements HandheldService {
deviceInLogin(JSONObject json) {
Assert.notNull(json.getString("device_code"), "登录参数不能为空");
if (StrUtil.isNotEmpty(json.getString("device_code"))) {
Object regin_code = redisUtils.get("mobile:" + json.getString("device_code"));
if (regin_code != null) {
Object region_code = redisUtils.get("mobile:" + json.getString("device_code"));
if (region_code != null) {
throw new BadRequestException("当前设备工序已经登陆,无法继续选择");
} else {
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
@ -692,10 +629,7 @@ public class HandheldServiceImpl implements HandheldService {
public boolean isLock() {
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
Param isConnectConnector = sysParamService.findByCode(GeneralDefinition.ADD_ROUTE_DOOR);
if (Integer.parseInt(isConnectConnector.getValue()) == 0) {
return false;
}
return true;
return Integer.parseInt(isConnectConnector.getValue()) != 0;
}

33
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java

@ -26,6 +26,7 @@ import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.dto.PointMaterialInfo;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.task.ConnectorUtil;
import org.nl.wms.sch.task_manage.task.TaskFactory;
import org.nl.wms.sch.task_manage.task.tasks.sorting.SortingCMTTask;
import org.nl.wms.sch.task_manage.task.tasks.sorting.SortingCNTTask;
@ -69,7 +70,8 @@ public class SortingServiceImpl implements SortingService {
, jsonObject.getString("task_type"), jsonObject.getString("is_empty")}, "请求参数不能为空");
JSONArray jsonArray = JSONUtil.parseArray(jsonObject.get("pallet_detail"));
if (StrUtil.isNotEmpty(jsonObject.getString("is_rawdata")) && "1".equals(jsonObject.getString("is_rawdata"))) {
createMaterial(jsonArray, jsonObject.getString("vehicle_code"));
List<ConnectorDto> connectorDtos = BeanUtil.copyToList(jsonArray, ConnectorDto.class);
createMaterial(connectorDtos, jsonObject.getString("vehicle_code"));
} else {
//任务号
String task_code = jsonObject.getString("task_code");
@ -204,32 +206,15 @@ public class SortingServiceImpl implements SortingService {
}
}
private void createMaterial(JSONArray jsonArray, String vehicleCode) {
private void createMaterial(List<ConnectorDto> connectorDtos, String vehicleCode) {
iSchBaseVehiclematerialgroupService.remove(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode));
for (Object o : jsonArray) {
JSONObject jO = (JSONObject) JSONObject.toJSON(o);
String workorder = jO.getString("ProductionOrder");
String ProductID = jO.getString("ProductID");
Integer qty = jO.getInteger("Currentqty");
String Jobname = jO.getString("Jobname");
String dueDate = jO.getString("DueDate");
String region_code = jO.getString("NextOperation");
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(vehicleCode);
schBaseVehiclematerialgroup.setMaterial_id(ProductID);
schBaseVehiclematerialgroup.setMaterial_qty(qty);
schBaseVehiclematerialgroup.setRegion_code(region_code);
schBaseVehiclematerialgroup.setOrder_code(workorder);
schBaseVehiclematerialgroup.setJob_name(Jobname);
if (StrUtil.isNotEmpty(dueDate) && isValidISO8601(dueDate)) {
dueDate = parseDate(dueDate);
}
schBaseVehiclematerialgroup.setDue_date(dueDate);
schBaseVehiclematerialgroup.setCreate_name("Sorting");
schBaseVehiclematerialgroup.setExtend(JSON.toJSONString(jO));
connectorDtos.forEach(connectorDto -> {
connectorDto.setID(null);
connectorDto.setCreate_name("Sorting");
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = ConnectorUtil.createObject(connectorDto);
iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
}
});
}
public static String parseDate(String isoString) {

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

@ -1,7 +1,16 @@
package org.nl.wms.ext.wms.service;
import com.alibaba.fastjson.JSONObject;
/**
* @author LENOVO
*/
public interface LmsToWmsService {
/**
* 反馈物料状态
* @param jsonObject3
* @return
*/
JSONObject feedbackMaterialStatus(JSONObject jsonObject3);
}

14
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/wms/service/impl/LmsToWmsServiceImpl.java

@ -1,5 +1,9 @@
package org.nl.wms.ext.wms.service.impl;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.ext.wms.service.LmsToWmsService;
import org.nl.wms.sch.task_manage.task.ConnectorUtil;
import org.nl.wms.sch.task_manage.task.WmsUtil;
import org.springframework.stereotype.Service;
/**
@ -7,5 +11,13 @@ import org.springframework.stereotype.Service;
* @author LENOVO
*/
@Service
public class LmsToWmsServiceImpl {
public class LmsToWmsServiceImpl implements LmsToWmsService {
@Override
public JSONObject feedbackMaterialStatus(JSONObject json) {
String api = "/api/wms/sendMaterial";
return WmsUtil.notifyWms(api, json);
}
}

8
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.ext.fab.service.dto.SendVehicleVo;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery;
@ -106,4 +107,11 @@ public interface ISchBaseVehiclematerialgroupService extends IService<SchBaseVeh
* @return
*/
String selectMaterialFile(String groupId);
/**
* 根据载具号查询交期时间
* @param sendVehicleVo
* @return
*/
String selectDueDateByVehicleCode(SendVehicleVo sendVehicleVo);
}

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.ext.fab.service.dto.SendVehicleVo;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery;
@ -29,4 +30,6 @@ public interface SchBaseVehiclematerialgroupMapper extends BaseMapper<SchBaseVeh
IPage<SchBaseVehiclematerialgroup> selectAllByPage(IPage<SchBaseVehiclematerialgroup> page, @Param("query") SchBaseVehiclematerialgroupQuery query);
List<String> selectMaterialPathByIsEmpty();
String selectDueDateByVehicleCode(@Param("sendVehicle") SendVehicleVo sendVehicleVo);
}

7
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.xml

@ -111,4 +111,11 @@
FROM sch_base_vehiclematerialgroup sbv
WHERE sbv.material_path is null
</select>
<select id="selectDueDateByVehicleCode" resultType="java.lang.String">
SELECT sbv.due_date
FROM sch_base_vehiclematerialgroup sbv
WHERE sbv.material_id = #{sendVehicle.material_code} AND sbv.order_code = #{sendVehicle.order_code} limit 1
</select>
</mapper>

31
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java

@ -6,6 +6,8 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -24,6 +26,7 @@ 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.ext.fab.service.dto.CallMaterVo;
import org.nl.wms.ext.fab.service.dto.SendVehicleVo;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
@ -43,6 +46,8 @@ import javax.servlet.ServletOutputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;
@ -99,7 +104,6 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
.ne(SchBaseVehiclematerialgroup::getGroup_id, item.getGroup_id()));
if (CollUtil.isNotEmpty(schBaseVehiclematerialgroups)) {
item.setHasChildren(true);
/*item.setChildren(schBaseVehiclematerialgroups);*/
}
item.setHas_work(true);
});
@ -181,6 +185,7 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
orderList.put("region_code", order_code.get(0).getRegion_code());
orderList.put("due_date", order_code.get(0).getDue_date());
orderList.put("priority", order_code.get(0).getPriority());
orderList.put("material_code", order_code.get(0).getMaterial_id());
}
});
maps = maps.stream().sorted(Comparator.comparingLong(order -> {
@ -241,20 +246,32 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
SchBaseVehiclematerialgroup one = this.getOne(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getGroup_id, groupId));
if (ObjectUtil.isNotEmpty(one) && StrUtil.isNotEmpty(one.getMaterial_path())) {
byte[] bytes = pdf2png(one.getMaterial_path(), "png");
if (ObjectUtil.isNotEmpty(bytes)) {
BASE64Encoder encoder = new BASE64Encoder();
return "data:image/png;base64," + encoder.encode(bytes).replace("\r\n", "");
}
InetAddress localhost = null;
try {
localhost = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
String url = localhost.getHostAddress() + ":" + 8083 + "/api/file/selectFile";
log.info("查询物料路径:{}",url);
JSONObject jsonObject = new JSONObject();
jsonObject.put("path", one.getMaterial_path());
return HttpRequest.post(url)
.body(JSON.toJSONString(jsonObject))
.execute().body();
}
return null;
}
@Override
public String selectDueDateByVehicleCode(SendVehicleVo sendVehicleVo) {
return vehiclematerialgroupMapper.selectDueDateByVehicleCode(sendVehicleVo);
}
/**
* 使用pdfbox将整个pdf转换成图片
*
* @param fileAddress 文件地址 :C:\\Users\\user\\Desktop\\test
* @param filename PDF文件名不带后缀名
* @param type 图片类型 png 和jpg
*/
public byte[] pdf2png(String fileAddress, String type) {

10
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java

@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
@ -19,6 +20,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import sun.security.krb5.internal.PAData;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
@ -27,6 +30,7 @@ import java.util.Set;
**/
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "任务管理管理")
@RequestMapping("/api/schBaseTask")
public class SchBaseTaskController {
@ -88,11 +92,11 @@ public class SchBaseTaskController {
}
@PostMapping("/upload")
@GetMapping("/upload")
@Log("导出数据")
@ApiOperation("导出数据")
public ResponseEntity<Object> upload(@RequestBody JSONObject json) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
public void upload(HttpServletResponse response,@RequestParam Map whereJson) {
schBaseTaskService.downTask(schBaseTaskService.queryAll(whereJson),response);
}
}

15
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -120,4 +121,18 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
* @param pointCodes
*/
void updateTaskStatusByPointCode(List<String> pointCodes);
/**
* 导出任务
* @param json
* @param response
*/
void downTask(List<SchBaseTask> json, HttpServletResponse response);
/**
* 创建数据不分页
* @param whereJson
* @return
*/
List<SchBaseTask> queryAll(Map whereJson);
}

92
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java

@ -2,9 +2,14 @@ package org.nl.wms.sch.task.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -14,6 +19,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
@ -29,6 +37,11 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
@ -49,6 +62,8 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Autowired
private TaskFactory taskFactory;
public static final String SYS_TEM_DIR = System.getProperty("java.io.tmpdir") + File.separator;
@Override
public IPage<SchBaseTask> queryAll(Map whereJson, PageQuery page) {
String task_code = ObjectUtil.isNotEmpty(whereJson.get("task_code")) ? whereJson.get("task_code").toString() : null;
@ -329,4 +344,81 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
}
}
@Override
public void downTask(List<SchBaseTask> json, HttpServletResponse response) {
ArrayList<List> jsonObjects = new ArrayList<>();
json.forEach(item -> {
List task = new ArrayList();
task.add(item.getTask_id());
task.add(item.getTask_code());
task.add(item.getTask_status());
task.add(item.getConfig_code());
task.add(item.getVehicle_type());
task.add(item.getVehicle_code());
task.add(item.getRemark());
task.add(item.getPoint_code1());
task.add(item.getPoint_code2());
task.add(item.getCreate_time());
task.add(item.getUpdate_time());
jsonObjects.add(task);
});
String[] tableHeaderArr = {"任务ID","任务编码","任务状态","配置编码","载具类型","载具号","提示信息", "起点", "终点", "创建时间", "修改时间"};
String fileName = "导出文件.csv";
byte[] bytes = writeExcelAfterToBytes(tableHeaderArr, jsonObjects);
responseSetProperties(fileName, bytes, response);
}
@Override
public List<SchBaseTask> queryAll(Map whereJson) {
LambdaQueryWrapper<SchBaseTask> lam = new LambdaQueryWrapper<>();
boolean more_task_status = StrUtil.toString(whereJson.get("more_task_status")).contains(",");
String[] moreTaskStatuses = new String[5];
if(more_task_status){
moreTaskStatuses = StrUtil.toString(whereJson.get("more_task_status")).split(",");
}else{
moreTaskStatuses[0] = StrUtil.toString(whereJson.get("more_task_status"));
}
lam.eq(ObjectUtil.isNotEmpty(whereJson.get("task_code")), SchBaseTask::getTask_code, whereJson.get("task_code"))
.eq(ObjectUtil.isNotEmpty(whereJson.get("vehicle_code")), SchBaseTask::getVehicle_code, whereJson.get("vehicle_code"))
.eq(ObjectUtil.isNotEmpty(whereJson.get("point_code")), SchBaseTask::getPoint_code1, whereJson.get("point_code"))
.eq(ObjectUtil.isNotEmpty(whereJson.get("point_code")), SchBaseTask::getPoint_code2, whereJson.get("point_code"))
.ge(ObjectUtil.isNotEmpty(whereJson.get("begin_time")), SchBaseTask::getCreate_time, whereJson.get("begin_time"))
.le(ObjectUtil.isNotEmpty(whereJson.get("end_time")), SchBaseTask::getCreate_time, whereJson.get("end_time"))
.in(ObjectUtil.isNotEmpty(whereJson.get("more_task_status")), SchBaseTask::getTask_status, moreTaskStatuses)
.orderByDesc(SchBaseTask::getCreate_time);
return schBaseTaskMapper.selectList(lam);
}
public static byte[] writeExcelAfterToBytes(String[] headers, ArrayList<List> cellList) {
ExcelWriter writer = null;
ByteArrayOutputStream outputStream = null;
try {
writer = ExcelUtil.getBigWriter();
writer.writeHeadRow(Arrays.asList(headers));
writer.write(cellList, true);
outputStream = new ByteArrayOutputStream();
writer.flush(outputStream);
}catch (Exception e){
log.error("writeExcelAfterToBytes error:{}", e.getMessage(), e);
} finally {
writer.close();
}
return outputStream.toByteArray();
}
public static void responseSetProperties(String fileName, byte[] bytes, HttpServletResponse response) {
try {
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name());
response.setContentType("application/csv");
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=30");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
OutputStream outputStream = response.getOutputStream();
outputStream.write(bytes);
outputStream.flush();
} catch (IOException e) {
log.error("iostream error:{}", e.getMessage(), e);
}
}
}

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

@ -3,6 +3,11 @@ package org.nl.wms.sch.task_manage;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
@ -18,15 +23,16 @@ import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.util.PrintUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.net.InetAddress;
import java.nio.file.*;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
@ -43,126 +49,24 @@ public class AutoQueryFilePath {
@Autowired
private ISchBaseVehiclematerialgroupService iSchBaseVehiclematerialgroupService;
@Autowired
private SysParamServiceImpl sysParamService;
@Autowired
private ISysNoticeService noticeService;
private String materialUrl = null;
private File directory = null;
@SneakyThrows
public void run() {
List<String> materials = iSchBaseVehiclematerialgroupService.selectMaterialPathIsEmpty();
Param byCode = sysParamService.findByCode(GeneralDefinition.MATERIAL_URL);
String materialUrl = byCode.getValue();
directory = new File(materialUrl);
if (ObjectUtil.isNotEmpty(directory) && !directory.exists()) {
directory = new File(materialUrl);
}
if (ObjectUtil.isNotEmpty(directory) && CollUtil.isNotEmpty(materials)) {
if (directory.exists() && directory.isDirectory()) {
noticeService.createNotice("开始查询物料图片路径!", IdUtil.randomUUID(),
NoticeTypeEnum.WARN.getCode());
selectMaterialPath(directory, materials);
noticeService.createNotice("结束查询物料图片路径!", IdUtil.randomUUID(),
NoticeTypeEnum.WARN.getCode());
} else {
noticeService.createNotice("物料图片路径!" + directory.exists(), IdUtil.randomUUID(),
NoticeTypeEnum.WARN.getCode());
}
}
}
public void applyMaterialPath(String url) {
System.setProperty("jcifs.smb.client.username", "");
System.setProperty("jcifs.smb.client.password", "");
System.setProperty("jcifs.smb.client.domain", "");
ByteArrayOutputStream byteArrayOutputStream;
InputStream inputStream;
try {
SmbFile smbFile = new SmbFile(url);
if (ObjectUtil.isNotEmpty(smbFile) && (smbFile.isFile() || smbFile.isDirectory())) {
noticeService.createNotice("物料图片路径:" + smbFile.isFile() + ":" + smbFile.isDirectory(), IdUtil.randomUUID(),
NoticeTypeEnum.WARN.getCode());
} else {
noticeService.createNotice("物料图片路径", IdUtil.randomUUID(),
NoticeTypeEnum.WARN.getCode());
}
} catch (Exception e) {
noticeService.createNotice("报错:" + e.getMessage(), IdUtil.randomUUID(),
NoticeTypeEnum.WARN.getCode());
e.printStackTrace();
}
}
public static void main(String[] args) {
// 设置远程计算机的 SMB URL
String url = "smb://192.168.10.59/Users/Administrator/Desktop/9000/9002/9002_large.png";
// 设置用户名和密码(如果有域名也可以指定)
String username = "Administrator";
String password = "20001217";
String domain = ""; // 如果没有域,可以为空字符串
// 配置 JCIFS 客户端的用户名、密码和域
System.setProperty("jcifs.smb.client.username", username);
System.setProperty("jcifs.smb.client.password", password);
System.setProperty("jcifs.smb.client.domain", domain);
try {
// 创建一个 SmbFile 对象,表示远程共享文件
SmbFile smbFile = new SmbFile(url);
/*SmbFile[] smbFiles = smbFile.listFiles();
for (int i = 0; i < Arrays.stream(smbFiles).count(); i++) {
SmbFile smbFile1 = smbFiles[i];
boolean directory = smbFile1.isDirectory();
}*/
// 打开文件输入流
InputStream inputStream = new SmbFileInputStream(smbFile);
// 使用 ByteArrayOutputStream 收集数据
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, bytesRead);
}
// 将 ByteArrayOutputStream 转换为字节数组
byte[] fileBytes = byteArrayOutputStream.toByteArray();
BASE64Encoder encoder = new BASE64Encoder();
System.out.println("data:image/png;base64," + encoder.encode(fileBytes).replace("\r\n", ""));
// 关闭文件读取器
byteArrayOutputStream.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 查找物料图片路径
*/
public void selectMaterialPath(File directory, List<String> materials) {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
selectMaterialPath(file, materials);
} else if (file.isFile() && CollUtil.contains(materials, file.getName().substring(0, file.getName().lastIndexOf('.')))) {
String material = file.getName().substring(0, file.getName().lastIndexOf('.'));
InetAddress localhost = InetAddress.getLocalHost();
String url = localhost.getHostAddress() + ":" + 8083 + "//api/file/selectPath";
log.info("查询物料路径:{}",url);
String resultMsg = HttpRequest.post(url)
.body(JSON.toJSONString(materials))
.execute().body();
log.info("物料路径查询结果:{}", resultMsg);
JSONArray jsonArray = JSONUtil.parseArray(resultMsg);
jsonArray.forEach(item -> {
JSONObject jsonObject = JSONUtil.parseObj(item);
iSchBaseVehiclematerialgroupService.update(Wrappers.lambdaUpdate(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getMaterial_id, material)
.set(SchBaseVehiclematerialgroup::getMaterial_path, file.getPath()));
}
}
}
.eq(SchBaseVehiclematerialgroup::getMaterial_id, jsonObject.getStr("name"))
.set(SchBaseVehiclematerialgroup::getMaterial_path, jsonObject.getStr("value"))
);
});
}
}

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

@ -109,7 +109,14 @@ public class GeneralDefinition {
* 是否连接
*/
public static final String IS_CONNECT_ACS = "is_connect_acs";
/**
* 是否连接connector
*/
public static final String IS_CONNECT_CONNECTOR = "is_connect_connector";
/**
* 是否连接wms
*/
public static final String IS_CONNECT_WMS = "is_connect_wms";
/**
* 外协区到冲床一自动门
*/
@ -134,7 +141,14 @@ public class GeneralDefinition {
* CONNECTOR路径
*/
public static final String CONNECTOR_URL = "connector_url";
/**
* Sorting路径
*/
public static final String SORTING_URL = "sorting_url";
/**
* wms路径
*/
public static final String WMS_URL = "wms_url";
/**
* 是否连接
*/
@ -179,6 +193,18 @@ public class GeneralDefinition {
* 物料图片路径
*/
public static final String MATERIAL_URL = "material_url";
/**
* 模板存放路径
*/
public static final String TEMPLATE_URL = "template_url";
/**
* 数据文件路径
*/
public static final String FILE_URL = "file_url";
/**
* 打印机名称
*/
public static final String PRINTER_NAME = "printer_ame";
public static final Map<String,List<String>> CYZZD01 = MapOf.of("CYZZD01", ListUtil.of("CYXLDJW01", "CYXLDJW02"));
public static final Map<String,List<String>> CYZZD02 = MapOf.of("CYZZD02", ListUtil.of("CYXLDJW03", "CYXLDJW04"));

56
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/ConnectorUtil.java

@ -13,6 +13,8 @@ import org.nl.config.SpringContextHolder;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
import org.nl.wms.ext.connector.service.dto.ConnectorDto;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.springframework.http.HttpStatus;
@ -26,44 +28,6 @@ import java.util.Map;
*/
@Slf4j
public class ConnectorUtil {
public static JSONObject notifyAcs(String api, List<AcsTaskDto> list) {
//判断是否连接ACS系统
String isConnect = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_connect_acs").getValue();
// list转JSONArray
String s = JSON.toJSONString(list);
JSONObject result = new JSONObject();
if (StrUtil.equals("0", isConnect)) {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "未连接ACS!");
result.put("data", new JSONObject());
return result;
}
//ACS地址:127.0.0.1:8010
String acsUrl = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("acs_url").getValue();
String url = acsUrl + api;
log.info("下发acs任务的参数为:{}", list.toString());
try {
String resultMsg = HttpRequest.post(url)
.body(s)
.execute().body();
result = JSONObject.parseObject(resultMsg);
} catch (Exception e) {
String msg = e.getMessage();
//ConnectException: Connection refused: connect
//网络不通
log.error("连接失败:{}", msg);
result.put("status", HttpStatus.BAD_REQUEST);
result.put("message", "网络不通,操作失败!");
result.put("data", new JSONObject());
}
//acs抛异常这里
/* if (result.getString("status").equals(String.valueOf(HttpStatus.BAD_REQUEST.value())))
throw new BadRequestException(result.getString("message"));*/
// 如果下发完毕,就修改状态
return result;
}
/**
* 新的请求方式对象中包含数组
*
@ -197,4 +161,20 @@ public class ConnectorUtil {
}
return result;
}
public static SchBaseVehiclematerialgroup createObject(ConnectorDto connectorDto) {
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setGroup_id(connectorDto.getID());
schBaseVehiclematerialgroup.setVehicle_code(connectorDto.getVehicle_code());
schBaseVehiclematerialgroup.setJob_name(connectorDto.getJobname());
schBaseVehiclematerialgroup.setMaterial_id(connectorDto.getProductID());
schBaseVehiclematerialgroup.setMaterial_qty(connectorDto.getCurrentqty());
schBaseVehiclematerialgroup.setRegion_code(connectorDto.getNextOperation());
schBaseVehiclematerialgroup.setExtend(JSON.toJSONString(connectorDto));
schBaseVehiclematerialgroup.setOrder_code(connectorDto.getProductionOrder());
schBaseVehiclematerialgroup.setDue_date(connectorDto.getDue_date());
schBaseVehiclematerialgroup.setPriority(connectorDto.getPriority());
schBaseVehiclematerialgroup.setCreate_name(connectorDto.getCreate_name());
return schBaseVehiclematerialgroup;
}
}

68
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/WmsUtil.java

@ -0,0 +1,68 @@
package org.nl.wms.sch.task_manage.task;
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.MapOf;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.springframework.http.HttpStatus;
import java.util.Map;
/**
* ACS连接工具类:
*/
@Slf4j
public class WmsUtil {
/**
* 新的请求方式对象中包含数组
*
* @param api
* @param object
* @param <T>
* @return
*/
public static <T> JSONObject notifyWms(String api, T object) {
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
Param isConnectConnector = sysParamService.findByCode(GeneralDefinition.IS_CONNECT_WMS);
if (ObjectUtil.isEmpty(isConnectConnector)) {
log.info("参数表中:" + GeneralDefinition.IS_CONNECT_WMS + "不存在");
return new JSONObject();
}
String isConnect = isConnectConnector.getValue();
Param connectorUrlObj = sysParamService.findByCode(GeneralDefinition.WMS_URL);
if (ObjectUtil.isEmpty(connectorUrlObj)) {
log.info("参数表中:" + GeneralDefinition.WMS_URL + "不存在");
return new JSONObject();
}
String connectorUrl = connectorUrlObj.getValue();
JSONObject result;
if (StrUtil.equals(GeneralDefinition.NO, isConnect)) {
log.info("未连接Wms!");
return new JSONObject();
}
String url = connectorUrl + api;
log.info("反馈WMS物料送达到内部加工区:{},url:{}", JSON.toJSONString(object), url);
try {
String resultMsg = HttpRequest.post(url)
.body(JSON.toJSONString(object))
.execute().body();
result = JSONObject.parseObject(resultMsg);
log.info("反馈WMS物料送达到内部加工区的响应参数为:{}", result);
} catch (Exception e) {
String msg = e.getMessage();
//网络不通
log.error("连接失败:{}", msg);
return JSONObject.parseObject(StrUtil.toString(AcsResponse.requestRefuse("网络不通,操作失败!")));
}
return result;
}
}

23
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/BlankingTask.java

@ -2,14 +2,18 @@ package org.nl.wms.sch.task_manage.task.tasks.handheld;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.nl.common.enums.GoodsEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.vehicle.service.IMdBaseVehicleService;
import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.connector.service.dto.ConnectorDto;
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;
@ -149,6 +153,25 @@ public class BlankingTask extends AbstractTask {
.set(SchBasePoint::getPoint_status, GoodsEnum.IN_STOCK.getValue())
.set(SchBasePoint::getIs_lock, false));
}
schBaseVehiclematerialgroupService.remove(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getVehicle_code, taskObj.getVehicle_code()));
String request_param = taskObj.getRequest_param();
JSONObject jsonObject1 = JSONObject.parseObject(request_param);
String finalRegion_code = jsonObject1.getString("region_code");
JSONArray materials = jsonObject1.getJSONArray("materials");
materials.forEach(material -> {
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(material);
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(taskObj.getVehicle_code());
schBaseVehiclematerialgroup.setMaterial_qty(jsonObject.getInt("material_qty"));
schBaseVehiclematerialgroup.setMaterial_id(jsonObject.getStr("material_code"));
schBaseVehiclematerialgroup.setOrder_code(jsonObject.getStr("order_code"));
schBaseVehiclematerialgroup.setDue_date(jsonObject.getStr("due_date"));
schBaseVehiclematerialgroup.setCreate_name(SecurityUtils.getCurrentNickName());
schBaseVehiclematerialgroup.setPriority(jsonObject.getStr("priority"));
schBaseVehiclematerialgroup.setRegion_code(StrUtil.isBlank(finalRegion_code) ? jsonObject.getStr("region_code") : finalRegion_code);
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
});
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);

55
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/pcoperation/PcOperationSMTTask.java

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -18,6 +19,8 @@ import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.fab.service.dto.CallEmpVo;
import org.nl.wms.ext.fab.service.dto.SendMaterVo;
import org.nl.wms.ext.fab.service.dto.SendVehicleVo;
import org.nl.wms.ext.fab.service.dto.SendVehiclesVo;
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;
@ -86,37 +89,6 @@ public class PcOperationSMTTask extends AbstractTask {
NoticeTypeEnum.WARN.getCode());
continue;
}
List<SendMaterVo> sendMaterVos = new ArrayList<>();
if (CollUtil.isNotEmpty(sendMaterVo.getMaterial_info())) {
sendMaterVo.getMaterial_info().stream().forEach(sendMater -> {
JSONObject jsonObject = JSONObject.parseObject(sendMater);
SendMaterVo sendMaterVo1 = new SendMaterVo();
sendMaterVo1.setMaterial_qty(jsonObject.getInteger("material_qty"));
sendMaterVo1.setOrder_code(jsonObject.getString("order_code"));
sendMaterVo1.setDue_date(jsonObject.getString("due_date"));
sendMaterVo1.setRegion_code(jsonObject.getString("region_code"));
sendMaterVo1.setPriority(jsonObject.getString("priority"));
sendMaterVos.add(sendMaterVo1);
});
}
//删除组盘记录生成新的
schBaseVehiclematerialgroupService.remove(new QueryWrapper<SchBaseVehiclematerialgroup>().eq("vehicle_code", sendMaterVo.getVehicle_code()));
if (CollUtil.isNotEmpty(sendMaterVos)) {
SchBasePoint finalSchBasePoint = schBasePoint;
sendMaterVos.stream().forEach(smv -> {
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(sendMaterVo.getVehicle_code());
schBaseVehiclematerialgroup.setPoint_code(finalSchBasePoint.getPoint_code());
schBaseVehiclematerialgroup.setMaterial_id(smv.getMaterial_id());
schBaseVehiclematerialgroup.setMaterial_qty(smv.getMaterial_qty());
schBaseVehiclematerialgroup.setRegion_code(smv.getRegion_code());
schBaseVehiclematerialgroup.setOrder_code(smv.getOrder_code());
schBaseVehiclematerialgroup.setDue_date(smv.getDue_date());
schBaseVehiclematerialgroup.setHas_work(sendMaterVo.getHas_work());
schBaseVehiclematerialgroup.setPriority(smv.getPriority());
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
});
}
// 设置终点并修改创建成功状态
task.setPoint_code2(schBasePoint.getPoint_code());
task.setVehicle_type(schBasePoint.getCan_vehicle_type());
@ -180,6 +152,27 @@ public class PcOperationSMTTask extends AbstractTask {
.set(SchBasePoint::getPoint_status, GoodsEnum.IN_STOCK.getValue())
.set(SchBasePoint::getIs_lock, false));
}
SendMaterVo sendMaterVo = JSONObject.parseObject(taskObj.getRequest_param(),SendMaterVo.class);
List<SendMaterVo> sendMaterVos = new ArrayList<>();
sendMaterVo.getMaterial_info().forEach(materVo -> {
sendMaterVos.add(BeanUtil.copyProperties(JSONUtil.parseObj(materVo),SendMaterVo.class));
});
//删除组盘记录生成新的
schBaseVehiclematerialgroupService.remove(new QueryWrapper<SchBaseVehiclematerialgroup>().eq("vehicle_code", sendMaterVo.getVehicle_code()));
if (CollUtil.isNotEmpty(sendMaterVos)) {
sendMaterVos.forEach(smv -> {
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(sendMaterVo.getVehicle_code());
schBaseVehiclematerialgroup.setPoint_code(schBasePoint.getPoint_code());
schBaseVehiclematerialgroup.setMaterial_id(smv.getMaterial_code());
schBaseVehiclematerialgroup.setMaterial_qty(smv.getMaterial_qty());
schBaseVehiclematerialgroup.setRegion_code(smv.getRegion_code());
schBaseVehiclematerialgroup.setOrder_code(smv.getOrder_code());
schBaseVehiclematerialgroup.setDue_date(smv.getDue_date());
schBaseVehiclematerialgroup.setPriority(smv.getPriority());
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
});
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);

102
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/pcoperation/ProcessingSMTTask.java

@ -1,23 +1,35 @@
package org.nl.wms.sch.task_manage.task.tasks.pcoperation;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.aspose.pdf.Document;
import com.aspose.pdf.TextAbsorber;
import com.aspose.pdf.TextFragment;
import com.aspose.pdf.TextFragmentAbsorber;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.enums.GoodsEnum;
import org.nl.common.enums.region.RegionEnum;
import org.nl.common.enums.wms.PointStatusEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.database.vehicle.service.IMdBaseVehicleService;
import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.fab.service.dto.SendMaterVo;
import org.nl.wms.ext.fab.service.dto.SendVehicleVo;
import org.nl.wms.ext.wms.service.LmsToWmsService;
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;
@ -31,11 +43,17 @@ import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.PrintUtil;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 物料下料转运在外协内部加工区
@ -60,6 +78,10 @@ public class ProcessingSMTTask extends AbstractTask {
private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService;
@Autowired
private IMdBaseVehicleService mdBaseVehicleService;
@Autowired
private LmsToWmsService lmsToWmsService;
@Autowired
private SysParamServiceImpl sysParamService;
@Override
protected void create() throws BadRequestException {
@ -79,7 +101,6 @@ public class ProcessingSMTTask extends AbstractTask {
NoticeTypeEnum.WARN.getCode());
continue;
}
//TODO: 分配逻辑
SchBasePoint schBasePoint = schBasePointService.selectGroundByRegionCode(targetRegionCode, GoodsEnum.OUT_OF_STOCK.getValue());
if (ObjectUtil.isEmpty(schBasePoint)) {
task.setRemark("未找到所需点位!");
@ -89,8 +110,6 @@ public class ProcessingSMTTask extends AbstractTask {
NoticeTypeEnum.WARN.getCode());
continue;
}
//删除组盘记录生成新的
//schBaseVehiclematerialgroupService.remove(new QueryWrapper<SchBaseVehiclematerialgroup>().eq("vehicle_code", sendMaterVo.getVehicle_code()));
// 设置终点并修改创建成功状态
task.setPoint_code2(schBasePoint.getPoint_code());
task.setVehicle_type(schBasePoint.getCan_vehicle_type());
@ -166,27 +185,64 @@ public class ProcessingSMTTask extends AbstractTask {
.set(SchBasePoint::getPoint_status, point_status)
.set(SchBasePoint::getIs_lock, false));
}
schBaseVehiclematerialgroupService.remove(new QueryWrapper<SchBaseVehiclematerialgroup>().eq("vehicle_code", taskObj.getVehicle_code()));
cn.hutool.json.JSONObject jsonObject2 = JSONUtil.parseObj(taskObj.getRequest_param());
JSONArray materials = jsonObject2.getJSONArray("mater");
materials.stream().forEach(material -> {
String replace = StrUtil.replace(StrUtil.toString(material), "=", ":");
replace = replace.replaceAll("material_code:,", "");
cn.hutool.json.JSONObject jsonObject1 = JSONUtil.parseObj(replace);
if (replace.contains("OR")) {
Object materialCode = jsonObject1.get("order_code");
jsonObject1.put("order_code", materialCode.toString());
replace = jsonObject1.toString();
}
JSONObject jsonObject = JSONObject.parseObject(replace);
String region_code = jsonObject2.getStr("region_code");
JSONArray materials = jsonObject2.getJSONArray("material");
if (CollUtil.isEmpty(materials)) {
materials = jsonObject2.getJSONArray("mater");
}
List<SendVehicleVo> sendVehicleVos = BeanUtil.copyToList(materials, SendVehicleVo.class);
sendVehicleVos.forEach(sendVehicleVo -> {
String dueDate = schBaseVehiclematerialgroupService.selectDueDateByVehicleCode(sendVehicleVo);
sendVehicleVo.setDue_date(dueDate);
});
if (region_code.equals(RegionEnum.NBJG.getRegion_code())) {
JSONObject jsonObject3 = new JSONObject();
jsonObject3.put("vehicle_code", taskObj.getVehicle_code());
jsonObject3.put("id", taskObj.getTask_code());
JSONArray jsonArray = new JSONArray();
sendVehicleVos.forEach(sendVehicleVo -> {
JSONObject jsonObject4 = new JSONObject();
jsonObject4.put("product_id", sendVehicleVo.getMaterial_code());
jsonObject4.put("current_qty", sendVehicleVo.getMaterial_qty());
jsonObject4.put("production_order", sendVehicleVo.getOrder_code());
jsonObject4.put("due_date", sendVehicleVo.getDue_date());
jsonArray.add(jsonObject4);
});
jsonObject3.put("materials", jsonArray);
lmsToWmsService.feedbackMaterialStatus(jsonObject3);
} else if (region_code.equals(RegionEnum.WXJG.getRegion_code())) {
Param byCode = sysParamService.findByCode(GeneralDefinition.TEMPLATE_URL);
Param filePath = sysParamService.findByCode(GeneralDefinition.FILE_URL);
Param printerName = sysParamService.findByCode(GeneralDefinition.PRINTER_NAME);
if (ObjectUtil.isEmpty(byCode) || ObjectUtil.isEmpty(filePath) || ObjectUtil.isEmpty(printerName)) {
throw new BadRequestException("请先配置模板或存放文件地址,或打印机名称");
}
JSONObject json = new JSONObject();
json.put("vehicleCode", taskObj.getVehicle_code());
JSONArray jsonArray = new JSONArray();
sendVehicleVos.forEach(sendVehicleVo -> {
JSONObject jsonObject4 = new JSONObject();
jsonObject4.put("number", sendVehicleVo.getMaterial_code());
jsonObject4.put("qty", sendVehicleVo.getMaterial_qty());
jsonObject4.put("orderCode", sendVehicleVo.getOrder_code());
jsonObject4.put("dueDate", StrUtil.isNotEmpty(sendVehicleVo.getDue_date()) ? sendVehicleVo.getDue_date() : "2024-12-17 12:00:00");
jsonObject4.put("next", StrUtil.isNotEmpty(sendVehicleVo.getRegion_code()) ? sendVehicleVo.getRegion_code() : "111-10");
jsonArray.add(jsonObject4);
});
json.put("data", jsonArray);
PrintUtil.printWord(byCode.getValue(), json, filePath.getValue(), printerName.getValue());
}
schBaseVehiclematerialgroupService.remove(new QueryWrapper<SchBaseVehiclematerialgroup>().eq("vehicle_code", taskObj.getVehicle_code()));
sendVehicleVos.forEach(sendVehicleVo -> {
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(taskObj.getVehicle_code());
schBaseVehiclematerialgroup.setMaterial_qty(jsonObject.getInteger("material_qty"));
schBaseVehiclematerialgroup.setMaterial_code(jsonObject.getString("material_code"));
schBaseVehiclematerialgroup.setOrder_code(jsonObject.getString("order_code"));
schBaseVehiclematerialgroup.setDue_date(jsonObject.getString("due_date"));
schBaseVehiclematerialgroup.setMaterial_qty(sendVehicleVo.getMaterial_qty());
schBaseVehiclematerialgroup.setMaterial_id(sendVehicleVo.getMaterial_code());
schBaseVehiclematerialgroup.setOrder_code(sendVehicleVo.getOrder_code());
schBaseVehiclematerialgroup.setDue_date(sendVehicleVo.getDue_date());
schBaseVehiclematerialgroup.setCreate_name(SecurityUtils.getCurrentNickName());
schBaseVehiclematerialgroup.setRegion_code(schBasePoint2.getPoint_code());
//schBaseVehiclematerialgroup.setRegion_code(schBasePoint2.getPoint_code());
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
});
// 任务完成
@ -197,6 +253,7 @@ public class ProcessingSMTTask extends AbstractTask {
taskService.updateById(taskObj);
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
SchBasePoint schBasePoint1 = schBasePointService.selectByPointCode(taskObj.getPoint_code2());
@ -211,11 +268,6 @@ public class ProcessingSMTTask extends AbstractTask {
PointUtils.setUpdateByAcs(schBasePoint);
schBasePointService.updateById(schBasePoint);
}
if (StrUtil.isNotEmpty(taskObj.getVehicle_code())) {
schBaseVehiclematerialgroupService.remove(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
.eq(SchBaseVehiclematerialgroup::getVehicle_code, taskObj.getVehicle_code()));
}
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());

21
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/vehicle/controller/BmVehicleInfoController.java

@ -1,17 +1,24 @@
package org.nl.wms.sch.vehicle.controller;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.ApiOperation;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.sch.vehicle.service.IBmVehicleInfoService;
import org.nl.wms.sch.vehicle.service.dao.BmVehicleInfo;
import org.nl.wms.sch.vehicle.service.dto.VehicleQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
/**
* <p>
@ -38,7 +45,10 @@ public class BmVehicleInfoController {
@GetMapping
@Log("查询载具")
public ResponseEntity<Object> query(VehicleQuery query, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(vehicleInfoService.page(page.build(), query.build())), HttpStatus.OK);
return new ResponseEntity<>(TableDataInfo.build(vehicleInfoService.page(page.build(), Wrappers.lambdaQuery(BmVehicleInfo.class)
.like(StrUtil.isNotEmpty(query.getVehicle_code()),BmVehicleInfo::getVehicle_code, query.getVehicle_code())
.eq(StrUtil.isNotEmpty(query.getVehicle_type()),BmVehicleInfo::getVehicle_type, query.getVehicle_type())
.orderByDesc(BmVehicleInfo::getCreate_time))), HttpStatus.OK);
}
@PostMapping
@ -56,7 +66,7 @@ public class BmVehicleInfoController {
@Log("删除载具")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
public ResponseEntity<Object> delete(@RequestBody String[] ids) {
vehicleInfoService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@ -80,5 +90,12 @@ public class BmVehicleInfoController {
vehicleInfoService.updateVehicleMaterial(form);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/excelImport")
@Log("excel导入")
public ResponseEntity<Object> excelImport(MultipartFile file, HttpServletRequest request) {
vehicleInfoService.excelImport(file, request);
return new ResponseEntity<>(HttpStatus.OK);
}
}

6
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/vehicle/service/IBmVehicleInfoService.java

@ -7,7 +7,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.sch.vehicle.service.dao.BmVehicleInfo;
import org.nl.wms.sch.vehicle.service.dto.VehicleQuery;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@ -75,7 +77,7 @@ public interface IBmVehicleInfoService extends IService<BmVehicleInfo> {
* 多选删除
* @param ids /
*/
void deleteAll(Long[] ids);
void deleteAll(String[] ids);
/**
* 多修改启用状态
@ -88,4 +90,6 @@ public interface IBmVehicleInfoService extends IService<BmVehicleInfo> {
* @param code /
*/
JSONObject getVehicle(String code);
void excelImport(MultipartFile file, HttpServletRequest request);
}

57
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/vehicle/service/impl/BmVehicleInfoServiceImpl.java

@ -2,7 +2,11 @@ package org.nl.wms.sch.vehicle.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -23,7 +27,10 @@ import org.nl.wms.sch.vehicle.service.dto.VehicleQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -42,6 +49,9 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, B
@Autowired
private ISysDictService dictService;
@Autowired
private BmVehicleInfoMapper baseMapper;
@Override
public BmVehicleInfo vehileInfo(String vehicle_code) {
return this.getOne(new QueryWrapper<BmVehicleInfo>().eq("vehicle_code", vehicle_code));
@ -55,7 +65,7 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, B
throw new BadRequestException("此载具已存在");
}
//转编码类型:
Dict dict = dictService.getOne(new QueryWrapper<Dict>().eq("value", map.getString("vehicle_type")));
Dict dict = dictService.getOne(new QueryWrapper<Dict>().eq("code", "can_vehicle_type").eq("value", map.getString("vehicle_type")));
if (dict == null) {
throw new BadRequestException("此载具类型" + map.getString("vehicle_type") + "没有配置字典值");
}
@ -134,11 +144,11 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, B
}
@Override
public void deleteAll(Long[] ids) {
public void deleteAll(String[] ids) {
if (ids.length > 0) {
Arrays.stream(ids).forEach(id -> {
this.remove(Wrappers.lambdaQuery(BmVehicleInfo.class)
.eq(BmVehicleInfo::getVehicle_code,String.valueOf(id)));
.eq(BmVehicleInfo::getVehicle_code, id));
});
}
}
@ -158,4 +168,45 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, B
json.put("value", CodeUtil.getNewCode(code));
return json;
}
@Override
public void excelImport(MultipartFile file, HttpServletRequest request) {
if (file.isEmpty()) {
throw new BadRequestException("文件为空,请添加数据后重新导入");
}
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
// 从第二行开始获取数据 excelReader.read的结果是一个2纬的list,外层是行,内层是行对应的所有列
List<List<Object>> read = excelReader.read(1, excelReader.getRowCount());
// 循环获取的数据
for (int i = 0; i < read.size(); i++) {
List list = read.get(i);
JSONObject param = new JSONObject();
String vehicleCode = list.get(0).toString();
String vehicleType = list.get(1).toString();
if (StrUtil.isEmpty(vehicleCode) || StrUtil.isEmpty(vehicleType)) {
throw new BadRequestException("载具号或载具类型为空!");
}
BmVehicleInfo one = getOne(Wrappers.lambdaQuery(BmVehicleInfo.class).eq(BmVehicleInfo::getVehicle_code, vehicleCode));
if(ObjectUtil.isNotEmpty(one)){
continue;
}
Dict dict = dictService.getOne(new QueryWrapper<Dict>().eq("code", "can_vehicle_type").eq("value", vehicleType));
//按照列获取
BmVehicleInfo entity = new BmVehicleInfo();
entity.setVehicle_code(vehicleCode);
entity.setVehicle_name(dict.getLabel());
entity.setCreate_name(SecurityUtils.getCurrentNickName());
entity.setCreate_time(DateUtil.now());
entity.setUpdate_name(SecurityUtils.getCurrentNickName());
entity.setUpdate_time(DateUtil.now());
entity.setVehicle_type(dict.getValue());
this.save(entity);
}
}
}

157
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PrintUtil.java

@ -0,0 +1,157 @@
package org.nl.wms.util;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.exception.RenderException;
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
import com.spire.doc.Document;
import com.spire.ms.Printing.PrinterSettings;
import lombok.extern.slf4j.Slf4j;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
/**
* @author
* @version 1.0
* @date 2024-04-01 19:59
* @description
*/
@Slf4j
public class PrintUtil {
public static void printWord(String templatePath, JSONObject json, String filePath, String printerName) {
XWPFTemplate template = null;
try {
FileInputStream fileInputStream = new FileInputStream(new File(templatePath));
//设置占位符:
Configure config = Configure.builder()
.buildGramer("${", "}")
.setValidErrorHandler(new Configure.AbortHandler())
.bind("data", new HackLoopTableRenderPolicy())
.build();
template = XWPFTemplate.compile(fileInputStream, config).render(json);
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");
String formattedDateTime = now.format(formatter);
filePath = filePath + "\\template_" + formattedDateTime + ".docx";
template.writeToFile(filePath);
Document document = new Document();
document.loadFromFile(filePath);
PrinterSettings printerSettings = new PrinterSettings();
printerSettings.setPrinterName(printerName); // "NPI269576"
printerSettings.setCopies((short) 1);
printerSettings.setFromPage(2);
printerSettings.setToPage(4);
printerSettings.setFromPage(1);
printerSettings.setToPage(document.getPageCount());
document.getPrintDocument().setPrinterSettings(printerSettings);
document.getPrintDocument().print();
} catch (RenderException | IOException ex) {
log.info("打印word的报错:{}", ex.getMessage());
ex.printStackTrace();
} finally {
try {
if (template != null) {
template.close();
}
} catch (IOException ignored) {
}
}
}
public static void main(String[] args) throws IOException {
//加载Word文档
Document document = new Document();
// document.loadFromFile("D:\\znxj\\downloadPath\\中.docx");
document.loadFromFile("C:\\Users\\LENOVO\\Desktop\\1.docx");
//创建PrinterSettings对象
PrinterSettings printerSettings = new PrinterSettings();
//指定物理打印机名称
printerSettings.setPrinterName("NPI269576");
//设置打印份数
printerSettings.setCopies((short) 1);
//设置打印范围
printerSettings.setFromPage(2);
printerSettings.setToPage(4);
// 设置打印的起始页和结束页为文档的第一页和最后一页
printerSettings.setFromPage(1);
printerSettings.setToPage(document.getPageCount());
//应用打印设置
document.getPrintDocument().setPrinterSettings(printerSettings);
//执行打印
document.getPrintDocument().print();
/*XWPFTemplate template = null;
ByteArrayOutputStream wordOut = new ByteArrayOutputStream(1024);
try {
File file = new File("C:\\Users\\LENOVO\\Desktop\\2.docx");
FileInputStream fileInputStream = new FileInputStream(file);
//设置占位符:
Configure config = Configure.builder()
.buildGramer("${", "}") //设置模板中的占位符${}, 默认是{{}}
.setValidErrorHandler(new Configure.AbortHandler()) //若模板中占位符与填充属性不对应,则报错;
.bind("list", new HackLoopTableRenderPolicy()) //设置模板中表格的参数属性
.build();
JSONObject jsonObject = new JSONObject();
jsonObject.put("vehicleCode","G001");
List<JSONObject> jsonObjectList = new ArrayList<>();
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("orderCode","23451y4967");
jsonObject1.put("number","328458732");
jsonObject1.put("qty","22");
jsonObject1.put("next","111-11");
jsonObject1.put("dueDate","2023-12-12 04:00:00");
jsonObject1.put("index","1");
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("orderCode","23451y496");
jsonObject2.put("number","32845873");
jsonObject2.put("qty","23");
jsonObject2.put("next","111-12");
jsonObject2.put("dueDate","2023-12-12 05:00:00");
jsonObject2.put("index","2");
jsonObjectList.add(jsonObject1);
jsonObjectList.add(jsonObject2);
jsonObject.put("list",jsonObjectList);
//填充文本域:
template = XWPFTemplate.compile(fileInputStream, config).render(jsonObject);
// template.write(wordOut);
template.writeToFile("C:\\Users\\LENOVO\\Desktop\\1.docx");
}catch (RenderException | IOException ex){
throw ex;
} finally {
try {
if (template != null){
template.close();
}
} catch (IOException ex) {
}
}*/
}
public static File getFile(String filePath) {
File file = new File(filePath);
if (file.exists()) {
log.info("是文件:{}", Arrays.toString(file.list()));
return file;
}
log.info("不是文件");
return file;
}
}

BIN
lms/nladmin-system/nlsso-server/src/main/resources/lib/spire.office.free-5.3.1.jar

Binary file not shown.

34
lms/nladmin-system/nlsso-server/src/main/resources/log/LmsToWms.xml

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<included>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!--<define name="DEVICECODE" class="org.nl.common.logging.DeviceCodeDir"/>-->
<!-- 按照每天生成日志文件 -->
<appender name="FILE_14" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/LmsToWms/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
<!--单个日志最大容量 至少10MB才能看得出来-->
<maxFileSize>200MB</maxFileSize>
<!--所有日志最多占多大容量-->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!-- <logger name="org.nl.start.Init" level="info" additivity="false">
<appender-ref ref="FILE3"/>
</logger>-->
<!-- 打印sql -->
<logger name="org.nl.wms.sch.task_manage.task.WmsUtil" level="info" additivity="false">
<appender-ref ref="FILE_14"/>
</logger>
</included>

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

@ -21,6 +21,7 @@
<include resource="log/ConnectorAndSorting.xml"/>
<include resource="log/ConnectorToWmsServiceImpl.xml"/>
<include resource="log/SortingToWms.xml"/>
<include resource="log/LmsToWms.xml"/>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

116
lms/nladmin-ui/src/views/wms/sch/UploadDialog.vue

@ -0,0 +1,116 @@
<template>
<el-dialog
title="导入Excel文件"
append-to-body
:visible.sync="dialogVisible"
destroy-on-close
width="400px"
:show-close="true"
@close="close"
@open="open"
>
<el-upload
ref="upload"
class="upload-demo"
action=""
drag
:on-exceed="is_one"
:limit="1"
:auto-upload="false"
:multiple="false"
:show-file-list="true"
:on-change="uploadByJsqd"
:file-list="fileList"
accept=".xlsx,.xls"
>
<i class="el-icon-upload" />
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
<div slot="tip" class="el-upload__tip">只能上传Excel文件且不超过10MB</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</span>
</el-dialog>
</template>
<script>
import crudVehicle from './vehicle/vehicle'
import CRUD, { crud } from '@crud/crud'
export default {
name: 'UploadDialog',
mixins: [crud()],
components: {},
props: {
dialogShow: {
type: Boolean,
default: false
},
openParam: {
type: String
}
},
data() {
return {
dialogVisible: false,
fileList: [],
file1: ''
}
},
watch: {
dialogShow: {
handler(newValue, oldValue) {
this.dialogVisible = newValue
}
},
openParam: {
handler(newValue, oldValue) {
this.opendtlParam = newValue
}
}
},
methods: {
open() {
},
close() {
this.$emit('update:dialogShow', false)
},
is_one() {
this.crud.notify('只能上传一个excel文件!', CRUD.NOTIFICATION_TYPE.WARNING)
},
//
beforeAvatarUpload(file) {
// 2Mb
if (file.size > 10 * 1024 * 1024) {
return false
}
return true
},
//
uploadByJsqd(file) {
this.file1 = file
},
submit() {
if (this.beforeAvatarUpload(this.file1)) {
this.fileList.name = this.file1.name
this.fileList.url = ''
var formdata = new FormData()
formdata.append('file', this.file1.raw)
// excelImport formdata
crudVehicle.excelImport(formdata).then((res) => {
this.crud.notify('导入成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.$emit('tableChanged3', '')
this.$emit('update:dialogShow', false)
})
} else {
this.crud.notify('文件过大,请上传小于10MB的文件〜', CRUD.NOTIFICATION_TYPE.WARNING)
}
}
}
}
</script>

9
lms/nladmin-ui/src/views/wms/sch/task/index.vue

@ -79,7 +79,6 @@
size="mini"
type="success"
icon="el-icon-upload"
:disabled="crud.selections.length === 0"
@click="uploadExcel()"
>
导出
@ -267,6 +266,8 @@ import CRUD, { crud, form, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import { downloadFile } from '@/utils'
import { download } from '@/api/data'
const defaultForm = {
task_id: null,
@ -342,9 +343,9 @@ export default {
this.crud.toQuery()
},
uploadExcel() {
const selectData = this.crud.selections
crudSchBaseTask.upload(selectData).then(res => {
console.log('++++++++++++++++++++', res)
download(this.crud.url + '/upload', this.crud.getQueryParams()).then(res => {
downloadFile(res, crud.title + '数据', 'csv')
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
})
},
handTaskStatus(value) {

27
lms/nladmin-ui/src/views/wms/sch/vehicle/index.vue

@ -46,7 +46,18 @@
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<crudOperation :permission="permission">
<el-button
slot="right"
class="filter-item"
type="warning"
icon="el-icon-upload2"
size="mini"
@click="uploadShow = true"
>
导入
</el-button>
</crudOperation>
<!--表单组件-->
<el-dialog
:close-on-click-modal="false"
@ -182,11 +193,11 @@
{{ dict.label.storagevehicle_type[scope.row.vehicle_type] }}
</template>
</el-table-column>
<el-table-column prop="vehicle_code" label="载具编码">
<template slot-scope="scope">
<el-table-column prop="vehicle_code" label="载具编码" />
<!-- <template slot-scope="scope">
<el-link type="warning" @click="toView(scope.row.vehicle_code)">{{ scope.row.vehicle_code }}</el-link>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column prop="vehicle_name" label="载具名称" />
<el-table-column label="是否启用" align="center" prop="is_used">
<template slot-scope="scope">
@ -235,6 +246,7 @@
/> -->
<pagination />
</div>
<UploadDialog :dialog-show.sync="uploadShow" @tableChanged3="tableChanged3" />
</div>
</template>
@ -246,6 +258,7 @@ import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import { getLodop } from '@/assets/js/lodop/LodopFuncs'
import UploadDialog from '../UploadDialog.vue'
const defaultForm = {
vehicle_code: null,
@ -256,7 +269,7 @@ const defaultForm = {
export default {
name: 'Storagevehicleinfo',
dicts: ['storagevehicle_type', 'VEHICLE_OVER_TYPE'],
components: { pagination, crudOperation, rrOperation, udOperation },
components: { pagination, crudOperation, rrOperation, udOperation, UploadDialog },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({
@ -299,6 +312,7 @@ export default {
materType: '01',
materialShow: false,
dialogVisible: false,
uploadShow: false,
materialForm: {},
resultCodeArr: [],
permission: {},
@ -330,6 +344,9 @@ export default {
[CRUD.HOOK.beforeRefresh]() {
return true
},
tableChanged3() {
this.crud.toQuery()
},
onCloseDialog() {
this.form = defaultForm
},

10
lms/nladmin-ui/src/views/wms/sch/vehicle/vehicle.js

@ -61,4 +61,12 @@ export function getMaterialByVehicle(vehicle_code) {
})
}
export default { add, edit, del, changeActive, getMaterialByVehicle, getVehicle, vehileInfo, updateVehicleMaterial }
export function excelImport(data) {
return request({
url: 'api/bmVehicleInfo/excelImport',
method: 'post',
data
})
}
export default { add, edit, del, changeActive, getMaterialByVehicle, getVehicle, vehileInfo, updateVehicleMaterial, excelImport }

Loading…
Cancel
Save