汪菘 2 years ago
parent
commit
136e50edf4
  1. 3
      acs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java
  2. 9
      acs/nladmin-system/src/main/java/org/nl/acs/device/wql/Qdevice_query_002.wql
  3. 47
      acs/nladmin-ui/src/views/acs/device/index.vue
  4. BIN
      lms/nladmin-system/doc/wms.xls
  5. 14
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/exception/handler/GlobalExceptionHandler.java
  6. 22
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java
  7. 44
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/ResultForAcs.java
  8. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/PutActionRequest.java
  9. 48
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/FeedBackSplitPalletStationRequest.java
  10. 65
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  11. 51
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java
  12. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java
  13. 17
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java
  14. 66
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/controller/PdmBdVehicleBindingController.java
  15. 43
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/IPdmBdVehicleBindingService.java
  16. 58
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dao/PdmBdVehicleBinding.java
  17. 12
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dao/mapper/PdmBdVehicleBindingMapper.java
  18. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dao/mapper/PdmBdVehicleBindingMapper.xml
  19. 46
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dto/PdmBdVehicleBindingDto.java
  20. 12
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dto/PdmBdVehicleBindingQuery.java
  21. 67
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/impl/PdmBdVehicleBindingServiceImpl.java
  22. 9
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java
  23. 6
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/IPdmBdWorkorderService.java
  24. 57
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java
  25. 8
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/controller/ReportController.java
  26. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java
  27. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java
  28. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java
  29. 76
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java
  30. 33
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java
  31. 15
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java
  32. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java
  33. 28
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java
  34. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java
  35. 36
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml
  36. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java
  37. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java
  38. 22
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java
  39. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java
  40. 24
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java
  41. 126
      lms/nladmin-ui/src/views/wms/pdm/vehiclebiding/index.vue
  42. 27
      lms/nladmin-ui/src/views/wms/pdm/vehiclebiding/pdmBdVehicleBinding.js
  43. 23
      lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue
  44. 10
      lms/nladmin-ui/src/views/wms/pdm/workerorder/pdmBdWorkorder.js

3
acs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java

@ -89,6 +89,9 @@ public class DeviceServiceImpl implements DeviceService, ApplicationAutoInitial
if (whereJson.get("device_type") != null) {
param.put("device_type", whereJson.get("device_type"));
}
if (whereJson.get("is_config") != null) {
param.put("is_config", whereJson.get("is_config"));
}
JSONObject json = WQL.getWO("Qdevice_query_002").addParamMap(param).pageQuery(WqlUtil.getHttpContext(page), "is_config asc,seq_num desc,update_time desc");
return json;

9
acs/nladmin-system/src/main/java/org/nl/acs/device/wql/Qdevice_query_002.wql

@ -24,6 +24,7 @@
输入.methods_id TYPEAS s_string
输入.blurry TYPEAS s_string
输入.region TYPEAS s_string
输入.is_config TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
@ -49,13 +50,16 @@
PAGEQUERY
SELECT
d.*, dict.label AS device_type_name,
dict2.label AS region_name
dict2.label AS region_name,
dict3.label AS config
FROM
ACS_DEVICE d
LEFT JOIN sys_dict_detail dict ON dict.value = d.device_type
AND dict.`name` = 'device_type'
LEFT JOIN sys_dict_detail dict2 ON dict2.value = d.region
AND dict2.`name` = 'region_type'
LEFT JOIN sys_dict_detail dict3 ON dict3.value = d.is_config
AND dict3.`name` = 'is_config'
WHERE
is_delete = '0'
OPTION 输入.blurry <> ""
@ -67,6 +71,9 @@
OPTION 输入.device_type <> ""
d.device_type = 输入.device_type
ENDOPTION
OPTION 输入.is_config <> ""
d.is_config = 输入.is_config
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF

47
acs/nladmin-ui/src/views/acs/device/index.vue

@ -38,17 +38,29 @@
>
<el-option v-for="item in regions" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
<el-select
v-model="query.is_config"
clearable
filterable
size="small"
placeholder="是否配置"
class="filter-item"
style="width: 190px"
@change="crud.toQuery"
>
<el-option v-for="item in is_configs" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
<rrOperation />
</div>
<crudOperation :permission="permission">
<el-button
slot="right"
class="filter-item"
size="mini"
type="warning"
icon="el-icon-download"
@click="crud.doExport"
>导出模型</el-button>
slot="right"
class="filter-item"
size="mini"
type="warning"
icon="el-icon-download"
@click="crud.doExport"
>导出模型</el-button>
<el-button
slot="right"
class="filter-item"
@ -108,6 +120,16 @@
/>
</el-select>
</el-form-item>
<el-form-item label="是否配置" prop="is_config">
<el-select v-model="form.is_config" style="width: 370px" placeholder="请选择">
<el-option
v-for="item in is_configs"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="顺序号" prop="seq_num">
<el-input-number v-model="form.seq_num" value="1" :min="1" label="描述文字" />
</el-form-item>
@ -194,8 +216,8 @@ import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import { get } from '@/api/system/dictDetail'
import UploadDialog from '@/views/acs/device/UploadDialog'
import {download} from '@/api/data'
import {downloadFile} from '@/utils'
import { download } from '@/api/data'
import { downloadFile } from '@/utils'
const defaultForm = {
manufacturer: null,
@ -239,8 +261,9 @@ export default {
},
device_types: [],
regions: [],
is_configs: [],
uploadShow: false,
regions: [],
rules: {
device_code: [
@ -268,6 +291,10 @@ export default {
get('region').then(data => {
this.regions = data.content
})
//
get('is_config').then(data => {
this.is_configs = data.content
})
})
},
methods: {

BIN
lms/nladmin-system/doc/wms.xls

Binary file not shown.

14
lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/exception/handler/GlobalExceptionHandler.java

@ -21,6 +21,9 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.exception.EntityExistException;
import org.nl.common.exception.EntityNotFoundException;
import org.nl.common.utils.ThrowableUtil;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
@ -39,6 +42,17 @@ import static org.springframework.http.HttpStatus.NOT_FOUND;
@RestControllerAdvice
public class GlobalExceptionHandler {
@Autowired
private ISysNoticeService noticeService;
@ExceptionHandler(NullPointerException.class)
public ResponseEntity<String> handleNullPointerException(NullPointerException ex) {
// 在这里处理空指针异常
noticeService.createNotice("异常信息:" + ex.getMessage(), "空指针异常发",
NoticeTypeEnum.EXCEPTION.getCode());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("空指针异常发生了");
}
/**
* 处理所有不可知的异常
*/

22
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java

@ -1,9 +1,31 @@
package org.nl.wms.ext.acs.service;
import com.alibaba.fastjson.JSONArray;
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
import org.nl.wms.ext.acs.service.dto.to.acs.PutActionRequest;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import java.util.List;
import java.util.Map;
/**
* @Author: lyd
* @Description: Wms请求Acs
* @Date: 2023/6/30
*/
public interface WmsToAcsService {
/**
* 下发工单
* @param workorder
* @return
*/
ResultForAcs order(PdmBdWorkorder workorder);
/**
* 下发信号 - 覆膜机释放托盘
* @param list
* @return
*/
ResultForAcs getVehicleForLaminatingMachine(List<PutActionRequest> list);
}

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

@ -0,0 +1,44 @@
package org.nl.wms.ext.acs.service.dto;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
/**
* @Author: lyd
* @Description: 统一接口返回 - 请求ACS返回的数据类型
* @Date: 2023/7/28
*/
@Data
public class ResultForAcs {
private int status;
private String message;
private String timestamp;
private JSONObject data;
public static ResultForAcs requestRefuse(String message) {
ResultForAcs result = new ResultForAcs();
result.setStatus(HttpStatus.HTTP_BAD_REQUEST);
result.setMessage(message);
result.setTimestamp(DateUtil.now());
return result;
}
public static ResultForAcs requestOk() {
ResultForAcs result = new ResultForAcs();
result.setStatus(HttpStatus.HTTP_OK);
result.setMessage("请求成功");
result.setTimestamp(DateUtil.now());
return result;
}
public static ResultForAcs requestOk(String message, JSONObject data) {
ResultForAcs result = new ResultForAcs();
result.setStatus(HttpStatus.HTTP_OK);
result.setMessage(message);
result.setTimestamp(DateUtil.now());
result.setData(data);
return result;
}
}

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

@ -18,6 +18,7 @@ public class PutActionRequest extends BaseRequest {
* 设备号
*/
private String device_code;
private String vehicle_type;
/**
* 信号数据

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

@ -0,0 +1,48 @@
package org.nl.wms.ext.acs.service.dto.to.wms;
import lombok.Data;
import org.nl.wms.ext.acs.service.dto.to.BaseRequest;
/**
* @Author: lyd
* @Description: 分拣反馈记录木托盘与钢托盘的绑定
* @Date: 2023/7/31
*/
@Data
public class FeedBackSplitPalletStationRequest extends BaseRequest {
/**
* 取货点位
*/
private String get_station;
/**
* 放货点位
*/
private String put_station;
/**
* 取货点位载具号
*/
private String get_station_vehicle_code;
/**
* 放货点位载具号
*/
private String put_station_vehicle_code;
/**
* 取货点当前数量
*/
private String get_station_qty;
/**
* 放货点当前数量
*/
private String put_station_qty;
}

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

@ -18,6 +18,7 @@ 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.acs.PutActionRequest;
import org.nl.wms.ext.acs.service.dto.to.wms.ApplyTaskRequest;
import org.nl.wms.ext.acs.service.dto.to.wms.FeedBackSplitPalletStationRequest;
import org.nl.wms.ext.acs.service.dto.to.wms.FeedBackTaskStatusRequest;
import org.nl.wms.ext.acs.service.dto.to.wms.GetPalletizeRequest;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
@ -30,6 +31,8 @@ import org.nl.wms.pdm.record.service.dao.PdmBdRequestMaterialRecord;
import org.nl.wms.pdm.residue.service.IPdmBdMaterialResidueService;
import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService;
import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking;
import org.nl.wms.pdm.vehiclebiding.service.IPdmBdVehicleBindingService;
import org.nl.wms.pdm.vehiclebiding.service.dao.PdmBdVehicleBinding;
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;
@ -96,6 +99,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private RedissonClient redissonClient;
@Autowired
private IPdmBdMaterialResidueService materialResidueService;
@Autowired
private IPdmBdVehicleBindingService vehicleBindingService;
@Override
public BaseResponse acsApply(JSONObject param) {
@ -311,6 +316,38 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return requestNo;
}
/** 分拣 - 记录钢托与木托的绑定 */
public BaseResponse recordVehicleBiding(JSONObject param) {
FeedBackSplitPalletStationRequest request = param.toJavaObject(FeedBackSplitPalletStationRequest.class);
String getStation = request.getGet_station(); // 取货点
String putStation = request.getPut_station(); // 放货点
// 查找当前点位中的信息,如果acs没有提供,就获取点位上的数据,如果点位没有,则数据失效
SchBasePoint pickupPoint = pointService.getById(getStation);
SchBasePoint putPoint = pointService.getById(putStation);
if (request.getGet_station_vehicle_code() == null) {
request.setGet_station_vehicle_code(pickupPoint.getVehicle_code());
}
if (request.getPut_station_vehicle_code() == null) {
request.setPut_station_vehicle_code(putPoint.getVehicle_code());
}
// 获取工单
PdmBdWorkorder productionTask = workorderService.getDeviceProductionTask(pickupPoint.getParent_point_code());
// 插入数据
PdmBdVehicleBinding vehicleBinding = new PdmBdVehicleBinding();
vehicleBinding.setOrigin_vehicle_code(request.getGet_station_vehicle_code());
vehicleBinding.setOrigin_vehicle_type(pickupPoint.getVehicle_type());
vehicleBinding.setOrigin_qty(request.getGet_station_qty());
vehicleBinding.setTarget_vehicle_code(request.getPut_station_vehicle_code());
vehicleBinding.setTarget_vehicle_type(putPoint.getVehicle_type());
vehicleBinding.setTarget_qty(request.getPut_station_qty());
if (productionTask != null) {
vehicleBinding.setOrder_code(productionTask.getWorkorder_code());
}
vehicleBindingService.create(vehicleBinding);
return BaseResponse.responseOk(request.getRequestNo());
}
/** 反馈压机残留重量*/
public BaseResponse applyFeedbackWeight(JSONObject param) {
ApplyTaskRequest applyTaskRequest = param.toJavaObject(ApplyTaskRequest.class);
@ -351,34 +388,36 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
/** 人工排产确认 */
public BaseResponse orderVerify(JSONObject param) { // 执行中
String requestNo = param.getString("requestNo");
String workorderId = param.getString("workorder_id");
if (workorderId == null) {
String workorderCode = param.getString("order_code");
if (workorderCode == null) {
return BaseResponse.responseError(requestNo, "工单标识不能为空!");
}
PdmBdWorkorder bdWorkorder = workorderService.getById(workorderId);
PdmBdWorkorder bdWorkorder = workorderService.getByCode(workorderCode);
if (bdWorkorder == null) {
return BaseResponse.responseError(requestNo, "物料信息为空!");
}
bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.PRODUCING.getCode());
bdWorkorder.setRealproducestart_date(DateUtil.now());
workorderService.update(bdWorkorder);
TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
workorderService.updateById(bdWorkorder);
return BaseResponse.responseOk(requestNo);
}
/** 工单完成 */
public BaseResponse orderFinish(JSONObject param) { // 完成
String requestNo = param.getString("requestNo");
String workorderId = param.getString("workorder_id");
if (workorderId == null) {
String workorderCode = param.getString("order_code");
if (workorderCode == null) {
return BaseResponse.responseError(requestNo, "工单标识不能为空!");
}
PdmBdWorkorder bdWorkorder = workorderService.getById(workorderId);
PdmBdWorkorder bdWorkorder = workorderService.getByCode(workorderCode);
if (bdWorkorder == null) {
return BaseResponse.responseError(requestNo, "物料信息为空!");
}
bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.COMPLETE.getCode());
bdWorkorder.setRealproduceend_date(DateUtil.now());
workorderService.update(bdWorkorder);
TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
workorderService.updateById(bdWorkorder);
return BaseResponse.responseOk(requestNo);
}
@ -554,7 +593,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
try {
abstractTask.updateTaskStatus(taskCode, status);
} catch (Exception e) {
log.error("任务状态更新失败:{}", message);
log.error("任务状态更新失败: {}", message);
return BaseResponse.responseError(requestNo, "任务:[" + taskCode + "]状态更新失败," + message);
}
return BaseResponse.responseOk(requestNo, "任务状态反馈成功!");
@ -587,7 +626,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String requestNo = actionRequest.getRequestNo();
String deviceCode = actionRequest.getDevice_code();
List<SignalData> list = actionRequest.getList();
// String vehicleType = actionRequest.getVehicle_type();
String vehicleType = actionRequest.getVehicle_type();
if (deviceCode == null) {
return BaseResponse.responseError(requestNo, "设备编码不能为空");
}
@ -610,9 +649,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
&& move.equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) || (pointStatus.equals(move))) { // 不做操作
return BaseResponse.responseOk(requestNo);
}
// if (vehicleType != null) {
// schBasePoint.setVehicle_type(vehicleType);
// }
if (vehicleType != null) {
schBasePoint.setVehicle_type(vehicleType);
}
schBasePoint.setPoint_status(move);
PointUtils.setUpdateByAcs(schBasePoint);
pointService.updateById(schBasePoint);

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

@ -1,15 +1,64 @@
package org.nl.wms.ext.acs.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpStatus;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
import org.nl.wms.ext.acs.service.dto.to.acs.PutActionRequest;
import org.nl.wms.ext.record.service.ISysInteractRecordService;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.task.AcsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: lyd
* @Description:
* @Description: WMS请求ACS - 业务开发
* @Date: 2023/6/30
*/
@Slf4j
@Service
public class WmsToAcsServiceImpl implements WmsToAcsService {
@Autowired
private ISysInteractRecordService interactRecordService;
@Override
public ResultForAcs order(PdmBdWorkorder workorder) {
String api = "api/wms/order";
List<PdmBdWorkorder> list = new ArrayList<>();
list.add(workorder);
ResultForAcs resultForAcs = ResultForAcs.requestOk();
try {
resultForAcs = AcsUtil.notifyAcs(api, list);
} catch (Exception e) {
log.error(api + ": {}", e.getMessage());
resultForAcs.setTimestamp(DateUtil.now());
resultForAcs.setStatus(HttpStatus.HTTP_BAD_REQUEST);
resultForAcs.setMessage(e.getMessage());
}
// 记录日志
interactRecordService.saveRecord(workorder, resultForAcs, GeneralDefinition.LMS_ACS);
return resultForAcs;
}
@Override
public ResultForAcs getVehicleForLaminatingMachine(List<PutActionRequest> list) {
String api = "api/wms/order"; // todo: ???
ResultForAcs resultForAcs = ResultForAcs.requestOk();
try {
resultForAcs = AcsUtil.notifyAcs(api, list);
} catch (Exception e) {
log.error(api + ": {}", e.getMessage());
resultForAcs.setTimestamp(DateUtil.now());
resultForAcs.setStatus(HttpStatus.HTTP_BAD_REQUEST);
resultForAcs.setMessage(e.getMessage());
}
// 记录日志
// interactRecordService.saveRecord(workorder, resultForAcs, GeneralDefinition.LMS_ACS);
return resultForAcs;
}
}

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java

@ -4,8 +4,10 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.record.service.dao.SysInteractRecord;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import java.util.Map;
import java.util.Set;
@ -47,4 +49,6 @@ public interface ISysInteractRecordService extends IService<SysInteractRecord> {
* 创建记录
*/
void saveRecord(Object request, BaseResponse response, String direction);
void saveRecord(PdmBdWorkorder workorder, ResultForAcs resultForAcs, String lmsAcs);
}

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

@ -11,10 +11,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.query.PageQuery;
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.record.service.ISysInteractRecordService;
import org.nl.wms.ext.record.service.dao.mapper.SysInteractRecordMapper;
import org.nl.wms.ext.record.service.dao.SysInteractRecord;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -77,4 +79,19 @@ public class SysInteractRecordServiceImpl extends ServiceImpl<SysInteractRecordM
sysInteractRecordMapper.insert(entity);
}
@Override
public void saveRecord(PdmBdWorkorder workorder, ResultForAcs resultForAcs, String lmsAcs) {
SysInteractRecord entity = new SysInteractRecord();
entity.setInteract_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setInteract_code(workorder.getWorkorder_code());
entity.setCode(resultForAcs.getStatus());
entity.setMessage(resultForAcs.getMessage());
entity.setRecord_time(DateUtil.now());
entity.setDirection(lmsAcs);
entity.setRequest_param(JSONObject.toJSONString(workorder));
entity.setResponse_param(JSONObject.toJSONString(resultForAcs));
entity.setIs_success(resultForAcs.getStatus() == HttpStatus.HTTP_OK);
sysInteractRecordMapper.insert(entity);
}
}

66
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/controller/PdmBdVehicleBindingController.java

@ -0,0 +1,66 @@
package org.nl.wms.pdm.vehiclebiding.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.pdm.vehiclebiding.service.IPdmBdVehicleBindingService;
import org.nl.wms.pdm.vehiclebiding.service.dao.PdmBdVehicleBinding;
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 java.util.Map;
import java.util.Set;
/**
* @author lyd
* @date 2023-07-31
**/
@Slf4j
@RestController
@Api(tags = "分拣载具关联记录管理")
@RequestMapping("/api/pdmBdVehicleBinding")
public class PdmBdVehicleBindingController {
@Autowired
private IPdmBdVehicleBindingService pdmBdVehicleBindingService;
@GetMapping
@Log("查询分拣载具关联记录")
@ApiOperation("查询分拣载具关联记录")
//@SaCheckPermission("@el.check('pdmBdVehicleBinding:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page){
return new ResponseEntity<>(TableDataInfo.build(pdmBdVehicleBindingService.queryAll(whereJson,page)),HttpStatus.OK);
}
@PostMapping
@Log("新增分拣载具关联记录")
@ApiOperation("新增分拣载具关联记录")
//@SaCheckPermission("@el.check('pdmBdVehicleBinding:add')")
public ResponseEntity<Object> create(@Validated @RequestBody PdmBdVehicleBinding entity){
pdmBdVehicleBindingService.create(entity);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping
@Log("修改分拣载具关联记录")
@ApiOperation("修改分拣载具关联记录")
//@SaCheckPermission("@el.check('pdmBdVehicleBinding:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody PdmBdVehicleBinding entity){
pdmBdVehicleBindingService.update(entity);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除分拣载具关联记录")
@ApiOperation("删除分拣载具关联记录")
//@SaCheckPermission("@el.check('pdmBdVehicleBinding:del')")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
pdmBdVehicleBindingService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
}

43
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/IPdmBdVehicleBindingService.java

@ -0,0 +1,43 @@
package org.nl.wms.pdm.vehiclebiding.service;
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.pdm.vehiclebiding.service.dao.PdmBdVehicleBinding;
import java.util.Map;
import java.util.Set;
/**
* @description 服务接口
* @author lyd
* @date 2023-07-31
**/
public interface IPdmBdVehicleBindingService extends IService<PdmBdVehicleBinding> {
/**
* 查询数据分页
* @param whereJson 条件
* @param pageable 分页参数
* @return IPage<PdmBdVehicleBinding>
*/
IPage<PdmBdVehicleBinding> queryAll(Map whereJson, PageQuery pageable);
/**
* 创建
* @param entity /
*/
void create(PdmBdVehicleBinding entity);
/**
* 编辑
* @param entity /
*/
void update(PdmBdVehicleBinding entity);
/**
* 多选删除
* @param ids /
*/
void deleteAll(Set<String> ids);
}

58
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dao/PdmBdVehicleBinding.java

@ -0,0 +1,58 @@
package org.nl.wms.pdm.vehiclebiding.service.dao;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* @description /
* @author lyd
* @date 2023-07-31
**/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("pdm_bd_vehicle_binding")
public class PdmBdVehicleBinding implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "associate_id", type = IdType.NONE)
@ApiModelProperty(value = "对应标识")
private String associate_id;
@ApiModelProperty(value = "源载具编码")
private String origin_vehicle_code;
@ApiModelProperty(value = "源载具类型")
private String origin_vehicle_type;
@ApiModelProperty(value = "目标载具编码")
private String target_vehicle_code;
@ApiModelProperty(value = "目标载具类型")
private String target_vehicle_type;
@ApiModelProperty(value = "源当前物料数量")
private String origin_qty;
@ApiModelProperty(value = "目标当前物料数量")
private String target_qty;
@ApiModelProperty(value = "取货点")
private String get_station;
@ApiModelProperty(value = "放货点")
private String put_station;
@ApiModelProperty(value = "工单号")
private String order_code;
@ApiModelProperty(value = "记录时间")
private String record_time;
}

12
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dao/mapper/PdmBdVehicleBindingMapper.java

@ -0,0 +1,12 @@
package org.nl.wms.pdm.vehiclebiding.service.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.pdm.vehiclebiding.service.dao.PdmBdVehicleBinding;
/**
* @author lyd
* @date 2023-07-31
**/
public interface PdmBdVehicleBindingMapper extends BaseMapper<PdmBdVehicleBinding> {
}

5
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dao/mapper/PdmBdVehicleBindingMapper.xml

@ -0,0 +1,5 @@
<?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.pdm.vehiclebiding.service.dao.mapper.PdmBdVehicleBindingMapper">
</mapper>

46
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dto/PdmBdVehicleBindingDto.java

@ -0,0 +1,46 @@
package org.nl.wms.pdm.vehiclebiding.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @description /
* @author lyd
* @date 2023-07-31
**/
@Data
public class PdmBdVehicleBindingDto implements Serializable {
/** 对应标识 */
private String associate_id;
/** 源载具编码 */
private String origin_vehicle_code;
/** 源载具类型 */
private String origin_vehicle_type;
/** 目标载具编码 */
private String target_vehicle_code;
/** 目标载具类型 */
private String target_vehicle_type;
/** 源当前物料数量 */
private String origin_qty;
/** 目标当前物料数量 */
private String target_qty;
/** 取货点 */
private String get_station;
/** 放货点 */
private String put_station;
/** 工单号 */
private String order_code;
/** 记录时间 */
private String record_time;
}

12
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/dto/PdmBdVehicleBindingQuery.java

@ -0,0 +1,12 @@
package org.nl.wms.pdm.vehiclebiding.service.dto;
import org.nl.common.domain.query.BaseQuery;
import org.nl.wms.pdm.vehiclebiding.service.dao.PdmBdVehicleBinding;
/**
* @author lyd
* @date 2023-07-31
**/
public class PdmBdVehicleBindingQuery extends BaseQuery<PdmBdVehicleBinding> {
}

67
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/vehiclebiding/service/impl/PdmBdVehicleBindingServiceImpl.java

@ -0,0 +1,67 @@
package org.nl.wms.pdm.vehiclebiding.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.pdm.vehiclebiding.service.IPdmBdVehicleBindingService;
import org.nl.wms.pdm.vehiclebiding.service.dao.mapper.PdmBdVehicleBindingMapper;
import org.nl.wms.pdm.vehiclebiding.service.dao.PdmBdVehicleBinding;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.Set;
/**
* @description 服务实现
* @author lyd
* @date 2023-07-31
**/
@Slf4j
@Service
public class PdmBdVehicleBindingServiceImpl extends ServiceImpl<PdmBdVehicleBindingMapper, PdmBdVehicleBinding> implements IPdmBdVehicleBindingService {
@Autowired
private PdmBdVehicleBindingMapper pdmBdVehicleBindingMapper;
@Override
public IPage<PdmBdVehicleBinding> queryAll(Map whereJson, PageQuery page){
LambdaQueryWrapper<PdmBdVehicleBinding> lam = new LambdaQueryWrapper<>();
IPage<PdmBdVehicleBinding> pages = new Page<>(page.getPage() + 1, page.getSize());
pdmBdVehicleBindingMapper.selectPage(pages, lam);
return pages;
}
@Override
public void create(PdmBdVehicleBinding entity) {
String now = DateUtil.now();
entity.setAssociate_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setRecord_time(now);
pdmBdVehicleBindingMapper.insert(entity);
}
@Override
public void update(PdmBdVehicleBinding entity) {
PdmBdVehicleBinding dto = pdmBdVehicleBindingMapper.selectById(entity.getAssociate_id());
if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!");
String now = DateUtil.now();
entity.setRecord_time(now);
pdmBdVehicleBindingMapper.updateById(entity);
}
@Override
public void deleteAll(Set<String> ids) {
// 真删除
pdmBdVehicleBindingMapper.deleteBatchIds(ids);
}
}

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

@ -1,5 +1,6 @@
package org.nl.wms.pdm.workorder.controller;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@ -63,4 +64,12 @@ public class PdmBdWorkorderController {
pdmBdWorkorderService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/submits")
@Log("工单下发")
@ApiOperation("工单下发")
public ResponseEntity<Object> submits(@RequestBody PdmBdWorkorder entity){
pdmBdWorkorderService.submits(entity);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}

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

@ -49,4 +49,10 @@ public interface IPdmBdWorkorderService extends IService<PdmBdWorkorder> {
PdmBdWorkorder getDeviceProductionTask(String deviceCode);
PdmBdWorkorder getByCode(String orderCode);
/**
* 工单下发
* @param entity
*/
void submits(PdmBdWorkorder entity);
}

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

@ -2,6 +2,8 @@ package org.nl.wms.pdm.workorder.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -12,15 +14,21 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.nl.wms.pdm.workorder.service.dao.mapper.PdmBdWorkorderMapper;
import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.Set;
/**
@ -35,6 +43,11 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
@Autowired
private PdmBdWorkorderMapper pdmBdWorkorderMapper;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private ISysNoticeService noticeService;
@Override
public IPage<PdmBdWorkorder> queryAll(PdmBdWorkorderQuery query, PageQuery page){
IPage<PdmBdWorkorder> pages = new Page<>(page.getPage() + 1, page.getSize());
@ -96,4 +109,48 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
return pdmBdWorkorderMapper.selectOne(lam);
}
@Override
public void submits(PdmBdWorkorder entity) {
PdmBdWorkorder pdmBdWorkorder = pdmBdWorkorderMapper.selectById(entity.getWorkorder_id());
if (ObjectUtil.isEmpty(pdmBdWorkorder)) {
throw new BadRequestException("工单编码[" + entity.getWorkorder_code() + "]不存在");
}
// 检验是否已经开工
if (pdmBdWorkorder.getWorkorder_status().equals(WorkOrderStatusEnum.PRODUCING.getCode())) {
throw new BadRequestException("工单已生产");
}
if (pdmBdWorkorder.getWorkorder_status().equals(WorkOrderStatusEnum.COMPLETE.getCode())) {
throw new BadRequestException("工单已完工");
}
// 查找是否有当前设备已经开工的工单
LambdaQueryWrapper<PdmBdWorkorder> lam = new QueryWrapper<PdmBdWorkorder>().lambda();
lam.eq(PdmBdWorkorder::getPoint_code, entity.getPoint_code())
.eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode())
.eq(PdmBdWorkorder::getIs_delete, false);
PdmBdWorkorder bdWorkorder = pdmBdWorkorderMapper.selectOne(lam);
if (ObjectUtil.isNotEmpty(bdWorkorder)) {
throw new BadRequestException("该设备已有生产工单,不能重复下发");
}
ResultForAcs resultForAcs = null;
try {
resultForAcs = wmsToAcsService.order(pdmBdWorkorder);
} catch (Exception e) {
log.error("工单下发异常:" + e.getMessage());
// 通知
noticeService.createNotice("工单下发失败: " + e.getMessage(), "工单下发失败: "
+ pdmBdWorkorder.getWorkorder_code(), NoticeTypeEnum.EXCEPTION.getCode());
throw new BadRequestException("工单下发失败");
}
if (resultForAcs.getStatus() != HttpStatus.HTTP_OK) {
// 不成功
noticeService.createNotice(resultForAcs.getMessage(), "工单下发失败: " + pdmBdWorkorder.getWorkorder_code(),
NoticeTypeEnum.EXCEPTION.getCode());
throw new BadRequestException("工单下发失败");
}
// 修改工单数据
pdmBdWorkorder.setWorkorder_status(WorkOrderStatusEnum.ISSUED.getCode());
TaskUtils.setWorkOrderUpdateByAcs(pdmBdWorkorder);
pdmBdWorkorderMapper.updateById(pdmBdWorkorder);
}
}

8
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/controller/ReportController.java

@ -36,4 +36,12 @@ public class ReportController {
// return new ResponseEntity<>(TableDataInfo.build(reportService.mudTransfer(json,page)), HttpStatus.OK);
return null;
}
@PostMapping("/inventoryAlert")
@Log("库存物料提示记录表")
@ApiOperation("库存物料提示记录表")
public ResponseEntity<Object> inventoryAlert(JSONObject json, PageQuery page){
// return new ResponseEntity<>(TableDataInfo.build(reportService.inventoryAlert(json,page)), HttpStatus.OK);
return null;
}
}

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

@ -210,7 +210,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
throw new BadRequestException("操作失败");
}
// 根据标识找到任务
SchBaseTask taskOne = schBaseTaskMapper.selectById(task_code);
SchBaseTask taskOne = this.getByCode(task_code);
if (Integer.parseInt(taskOne.getTask_status()) >= Integer.parseInt(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException("任务已完成或已取消!");
}

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

@ -7,6 +7,7 @@ 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.ext.acs.service.dto.ResultForAcs;
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;
@ -57,7 +58,7 @@ public abstract class AbstractTask {
* @author ldjun
* @created 2020年6月12日 下午5:52:28
*/
protected JSONObject renotifyAcs(SchBaseTask task) {
protected ResultForAcs renotifyAcs(SchBaseTask task) {
Assert.notNull(task);
List<SchBaseTask> taskList = new ArrayList<>();
taskList.add(task);
@ -70,7 +71,7 @@ public abstract class AbstractTask {
* @author ldjun
* @created 2020年6月12日 下午5:52:28
*/
protected JSONObject renotifyAcs(List<SchBaseTask> taskList) {
protected ResultForAcs renotifyAcs(List<SchBaseTask> taskList) {
//1、获取任务
//2、根据任务配置补全任务
//3、下发

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

@ -62,4 +62,9 @@ public class GeneralDefinition {
public static final String UPPER_CONVEYOR_LINE = "3";
/** 下输送线 */
public static final String LOWER_CONVEYOR_LINE = "4";
// 参数名称
/** 是否连接 */
public static final String IS_CONNECT_ACS = "is_connect_acs";
/** ACS路径 */
public static final String ACS_URL = "acs_url";
}

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

@ -1,105 +1,67 @@
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.JSONArray;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
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.record.service.ISysInteractRecordService;
import org.nl.wms.ext.record.service.impl.SysInteractRecordServiceImpl;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.springframework.http.HttpStatus;
import java.util.List;
/**
* ACS连接工具类:
* ACS连接工具类: 不允许直接操作结果将其封装到ResultForAcs由实现类操作
*/
@Slf4j
public class AcsUtil {
/**
* 统一多数据入口
* 统一多数据入口 默认执行的参数都是jsonArray
* @param api
* @param list
* @return
* @param <T>
*/
public static <T> JSONObject notifyAcs(String api, List<T> list) {
public static <T> ResultForAcs notifyAcs(String api, List<T> list) {
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
// list转JSONArray
String s = JSON.toJSONString(list);
//判断是否连接ACS系统
Param isConnectAcs = sysParamService.findByCode("IS_CONNECT_ACS");
Param isConnectAcs = sysParamService.findByCode(GeneralDefinition.IS_CONNECT_ACS);
if (ObjectUtil.isEmpty(isConnectAcs)) {
throw new BadRequestException("参数表中:IS_CONNECT_ACS不存在");
throw new BadRequestException("参数表中:" + GeneralDefinition.IS_CONNECT_ACS + "不存在");
}
String isConnect = isConnectAcs.getValue();
JSONObject result = new JSONObject();
if (StrUtil.equals(GeneralDefinition.NO, 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
Param acsUrlObj = sysParamService.findByCode("ACS_URL");
Param acsUrlObj = sysParamService.findByCode(GeneralDefinition.ACS_URL);
if (ObjectUtil.isEmpty(acsUrlObj)) {
throw new BadRequestException("参数表中:ACS_URL不存在");
throw new BadRequestException("参数表中:" + GeneralDefinition.ACS_URL + "不存在");
}
String acsUrl = acsUrlObj.getValue();
String url = acsUrl + api;
log.info("下发acs任务的参数为:{}", list.toString());
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(list))
.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());
}
return result;
}
public static <T> JSONObject notifyAcs(String api, T object) {
//判断是否连接ACS系统
String isConnect = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_ACS").getValue();
JSONObject result = new JSONObject();
JSONObject result;
if (StrUtil.equals(GeneralDefinition.NO, isConnect)) {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "未连接ACS!");
result.put("data", new JSONObject());
return result;
return ResultForAcs.requestRefuse("未连接ACS!");
}
//ACS地址:127.0.0.1:8010
String acsUrl = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("ACS_URL").getValue();
String url = acsUrl + api;
log.info("下发acs任务的参数为:{}", object.toString());
log.info("下发acs任务的参数为:{}", list.toString());
ResultForAcs resultForAcs;
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(object))
.body(s)
.execute().body();
result = JSONObject.parseObject(resultMsg);
resultForAcs = JSONObject.toJavaObject(result, ResultForAcs.class);
} 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());
return ResultForAcs.requestRefuse("网络不通,操作失败!");
}
// 记录交互表
return result;
return resultForAcs;
}
}

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

@ -7,7 +7,9 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.config.MapOf;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.ext.acs.service.WmsToAcsService;
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;
@ -24,6 +26,7 @@ import org.nl.wms.sch.task_manage.enums.*;
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.fj.mapper.FJMapper;
import org.nl.wms.util.CommonUtils;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -57,6 +60,8 @@ public class FJMKTask extends AbstractTask {
private FJMapper fjMapper;
@Autowired
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Override
protected void create() throws BadRequestException {
// 获取任务
@ -73,6 +78,7 @@ public class FJMKTask extends AbstractTask {
String requestParam = task.getRequest_param();// 任务的其他数据
JSONObject jsonObject = JSONObject.parseObject(requestParam);
// 找终点
/** 包装位 */
SchBasePoint packagePoint = findNextPoint(nextRegionStr, jsonObject);
if (ObjectUtil.isEmpty(packagePoint)) {
task.setRemark("包装线不可用!");
@ -87,6 +93,7 @@ public class FJMKTask extends AbstractTask {
// 1 获取点位相应数量
// 2 获取库存数量
// 3 木托盘需要多少块
/** 覆膜机木托盘位 */
SchBasePoint LaminatePoint = findStartPoint(startRegionStr, jsonObject);
if (ObjectUtil.isEmpty(LaminatePoint)) {
task.setRemark("覆膜区不可用!");
@ -101,7 +108,7 @@ public class FJMKTask extends AbstractTask {
// 设置终点并修改创建成功状态
task.setPoint_code3(LaminatePoint.getParent_point_code());
task.setPoint_code4(task.getPoint_code1());
task.setVehicle_code2(vehicleCode);
task.setVehicle_code2(vehicleCode); // 覆膜机下的木托盘编码
task.setTask_status(TaskStatus.CREATED.getCode());
task.setRemark("");
taskService.updateById(task);
@ -109,6 +116,7 @@ public class FJMKTask extends AbstractTask {
packagePoint.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(packagePoint);
pointService.updateById(packagePoint);
// 覆膜机对接位
SchBasePoint basePoint = pointService.getById(LaminatePoint.getParent_point_code());
basePoint.setIng_task_code(task.getTask_code());
basePoint.setVehicle_code(vehicleCode);
@ -202,7 +210,10 @@ public class FJMKTask extends AbstractTask {
// 向ACS请求所需木托盘在那个栈拆盘机?已经实时更新,故只需要自己查询即可
SchBasePoint endPointObj = fjMapper.findPointForFJQK(startRegionStr, new JSONObject()
.fluentPut("vehicleType", vehicleType).fluentPut("pointType", GeneralDefinition.DEVICE_POINT));
// todo: 请求ACS释放一个木托盘
// 请求ACS释放一个木托盘
List list = CommonUtils.requestAcsReleaseVehicle(MapOf.of("to_command", "1"),
endPointObj.getDevice_code());
wmsToAcsService.getVehicleForLaminatingMachine(list);
// 这个点的父点位为起点
return ObjectUtil.isNotEmpty(endPointObj) ? endPointObj : null;
}
@ -283,15 +294,23 @@ public class FJMKTask extends AbstractTask {
SchBasePoint fjcPointObj = pointService.getById(fjcPoint);
if (ObjectUtil.isNotEmpty(bzxPointObj)) {
// 包装位: 解锁
PointUtils.setUpdateByType(bzxPointObj, taskFinishedType);
PointUtils.clearPoint(bzxPointObj);
// 覆膜位: 解锁 . 清空
PointUtils.setUpdateByType(fmPointObj, taskFinishedType);
PointUtils.clearPoint(fmPointObj);
// 机械手对接位: 赋值
fjcPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
fjcPointObj.setVehicle_qty(1);
fjcPointObj.setVehicle_type(taskObj.getVehicle_type());
// 分拣机械手: 清空
PointUtils.setUpdateByType(fjcPointObj, taskFinishedType);
pointService.updateById(fjcPointObj);
PointUtils.clearPoint(fjcPointObj);
if (ObjectUtil.isNotEmpty(fmPointObj)) {
// 机械手对接位: 赋值
fjcPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
fjcPointObj.setVehicle_qty(1);
fjcPointObj.setVehicle_type(taskObj.getVehicle_type());
fjcPointObj.setVehicle_code(taskObj.getVehicle_code2()); // 拿过来的载具编码
PointUtils.setUpdateByType(fjcPointObj, taskFinishedType);
pointService.updateById(fjcPointObj);
}
// 组盘设置已经解绑
SchBaseVehiclematerialgroup vehicleMaterialGroupObj =
vehiclematerialgroupService.getById(taskObj.getGroup_id());

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

@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.config.MapOf;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.acs.service.dto.SignalData;
import org.nl.wms.ext.acs.service.dto.to.BaseRequest;
import org.nl.wms.ext.acs.service.dto.to.acs.PutActionRequest;
@ -26,6 +28,7 @@ import org.nl.wms.sch.task_manage.task.AcsUtil;
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.fj.mapper.FJMapper;
import org.nl.wms.util.CommonUtils;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -53,10 +56,11 @@ public class FJQKTask extends AbstractTask {
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private IPdmBdWorkorderService workorderService;
@Autowired
private ISysNoticeService noticeService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private FJMapper fjMapper;
@Override
protected void create() throws BadRequestException {
@ -86,6 +90,7 @@ public class FJQKTask extends AbstractTask {
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());
@ -123,14 +128,18 @@ public class FJQKTask extends AbstractTask {
// 向ACS请求所需木托盘在那个栈拆盘机?已经实时更新,故只需要自己查询即可
SchBasePoint endPointObj = fjMapper.findPointForFJQK(startRegionStr, new JSONObject()
.fluentPut("vehicleType", vehicleType).fluentPut("pointType", GeneralDefinition.DEVICE_POINT));
// todo: 请求ACS释放一个木托盘
// 请求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);
// AcsUtil.notifyAcs("", putActionRequest);
// List<PutActionRequest> list = new ArrayList<>();
// list.add(putActionRequest);
wmsToAcsService.getVehicleForLaminatingMachine(list);
// 这个点的父点位为起点
return ObjectUtil.isNotEmpty(endPointObj) ? endPointObj : null;
}

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

@ -21,6 +21,7 @@ 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.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.TaskType;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
@ -191,6 +192,12 @@ public class FJQLTask extends AbstractTask {
processTracking.setProcess_location(endPoint);
processTracking.setRecord_time(DateUtil.now());
processTrackingService.create(processTracking);
// 终点设置对应的参数
endPointObj.setVehicle_code(startPointObj.getVehicle_code());
endPointObj.setVehicle_type(startPointObj.getVehicle_type());
endPointObj.setPoint_status(PointStatusEnum.FULL_POINT.getCode());
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
pointService.updateById(endPointObj);
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());

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

@ -124,7 +124,7 @@ public class HNMLTask extends AbstractTask {
task.setRemark("");
task.setVehicle_type(GeneralDefinition.MATERIAL_CUP);
// 告知acs去左边右边
String deviceCode = point.getDevice_code();
String deviceCode = point.getDevice_code(); // 获取设备编码
int number = Integer.parseInt(deviceCode.replaceAll("[^0-9]", ""));
// 1左边2右边
number = (number % 2) == 0 ? 2 : (number % 2);
@ -152,15 +152,13 @@ public class HNMLTask extends AbstractTask {
// *: 混碾无工单
String materialCode = requestParam.getString("material_code"); // 混碾编码
Assert.notNull(materialCode, "物料编码不能为空!");
MdBaseMaterial baseMaterialObj = materialService.findByCode(materialCode);
Assert.notNull(baseMaterialObj, "物料: " + materialCode + "未找到!");
// 根据工单物料标识寻找点位
List<SchBasePoint> points = hnMapper.findPointForHNMLAndWorkOrder(nextRegionStr, baseMaterialObj.getMaterial_id());
List<SchBasePoint> points = hnMapper.findPointForHNMLAndWorkOrder(nextRegionStr, materialCode);
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
}
@Override
public void forceFinish(String task_code) {
public void forceFinish(String task_code) { // 人工完成任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
@ -169,12 +167,13 @@ public class HNMLTask extends AbstractTask {
}
@Override
public void cancel(String task_code) {
public void cancel(String task_code) { // 人工取消任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
// todo: 通知acs取消任务
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
@ -211,6 +210,10 @@ public class HNMLTask extends AbstractTask {
// 找到父点位
SchBasePoint serviceOne = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, parentPointCode));
// 父点位(设备)需要切换成非空状态
PointUtils.setUpdateByType(serviceOne, taskFinishedType);
serviceOne.setPoint_status(PointStatusEnum.FULL_POINT.getCode());
pointService.updateById(serviceOne);
// 找压机工单
PdmBdWorkorder one = workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.eq(serviceOne != null, PdmBdWorkorder::getPoint_code, serviceOne.getPoint_code())
@ -231,11 +234,11 @@ public class HNMLTask extends AbstractTask {
}
}
// 更新组盘数据
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue());
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
TaskUtils.setGroupUpdateByType(groupEntity, taskFinishedType);
vehiclematerialgroupService.updateById(groupEntity);
// 起点清空
PointUtils.clearPoint(startPointObj);
// 起点清空 - 由ACS请求修改
// PointUtils.clearPoint(startPointObj);
taskObj.setRemark("任务完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
@ -270,7 +273,7 @@ public class HNMLTask extends AbstractTask {
String vehicleType = param.getString("vehicle_type");
// 泥料物料对应不出物料标识
String materialCode = param.getString("material_code"); // 泥料编码
String mixTimes = param.getString("bag_number"); // 碾次
String mixTimes = param.getString("grinding_number"); // 碾次
// 载具类型默认料盅
if (vehicleType == null) {
vehicleType = GeneralDefinition.MATERIAL_CUP;
@ -285,13 +288,14 @@ public class HNMLTask extends AbstractTask {
}
// 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入
SchBaseVehiclematerialgroup groupObject = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType,
GroupBindMaterialStatusEnum.WAIT_BIND.getValue());
GroupBindMaterialStatusEnum.BOUND.getValue());
if (groupObject != null) {
return groupObject.getGroup_id();
}
// 要把数据存到组盘表
SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
groupEntity.setMaterial_id("-");
groupEntity.setRedundance_material_code(materialCode);
groupEntity.setCreate_id(GeneralDefinition.ACS_ID);
groupEntity.setCreate_name(GeneralDefinition.ACS_NAME);
@ -307,7 +311,7 @@ public class HNMLTask extends AbstractTask {
groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(weight)// 重量
? weight
: BigDecimal.valueOf(0));
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.WAIT_BIND.getValue()); // 待绑定
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 待绑定
groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
groupEntity.setIs_delete(false);
vehiclematerialgroupService.save(groupEntity);

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

@ -13,5 +13,5 @@ import java.util.List;
*/
public interface HNMapper extends BaseMapper<JSONObject> {
List<SchBasePoint> findPointForHNML(List<String> regionCode, String materialId);
List<SchBasePoint> findPointForHNMLAndWorkOrder(List<String> regionCode, String materialId);
List<SchBasePoint> findPointForHNMLAndWorkOrder(List<String> regionCode, String materialCode);
}

36
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml

@ -23,23 +23,31 @@
</select>
<select id="findPointForHNMLAndWorkOrder" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*
p.*,
p2.point_code AS device_code
FROM
`sch_base_point` p
LEFT JOIN (
SELECT
p2.point_code
FROM
sch_base_point p2
WHERE
p2.point_code IN (
SELECT w.point_code FROM pdm_bd_workorder w
WHERE w.raw_material_code = #{materialCode} AND w.workorder_status = '3'
)
AND p2.point_status = '1'
ORDER BY p2.update_time LIMIT 1
) p2 ON p.parent_point_code LIKE CONCAT('%', p2.point_code, '%')
WHERE
p.point_type = '5'
AND p.point_status = '1'
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.parent_point_code LIKE CONCAT('%',
(SELECT p2.point_code FROM sch_base_point p2
WHERE p2.point_code IN (
SELECT w.point_code FROM pdm_bd_workorder w WHERE w.material_id = #{materialId} AND w.workorder_status = '3'
)
AND p2.point_status = '1'
ORDER BY p2.update_time LIMIT 1), '%')
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
AND p.point_status = '1'
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
AND p2.point_code IS NOT NULL
</select>
</mapper>

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

@ -159,10 +159,10 @@ public class YZQKTask extends AbstractTask {
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
PointUtils.clearPoint(startPointObj);
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
endPointObj.setVehicle_type("2");
endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY);
endPointObj.setVehicle_qty(1);
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
pointService.update(endPointObj);
pointService.updateById(endPointObj);
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());

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

@ -33,7 +33,7 @@ import java.util.stream.Collectors;
/**
* @Author: lyd
* @Description: 压制送空载具任务 x
* @Description: 压制送空盅任务
* @Date: 2023/5/25
*/
@Component

22
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java

@ -2,10 +2,18 @@ package org.nl.wms.util;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.ext.acs.service.dto.PalletizeDto;
import org.nl.wms.ext.acs.service.dto.SignalData;
import org.nl.wms.ext.acs.service.dto.to.BaseRequest;
import org.nl.wms.ext.acs.service.dto.to.acs.PutActionRequest;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @Author: lyd
@ -33,4 +41,18 @@ public class CommonUtils {
return jsonObject.toJavaObject(clazz);
}
// 请求ACS释放一个木托盘
public static List<PutActionRequest> requestAcsReleaseVehicle(HashMap<String, String> map, String deviceCode) {
List<PutActionRequest> list = new CopyOnWriteArrayList<>();
PutActionRequest putActionRequest = (PutActionRequest) BaseRequest.createRequest();
putActionRequest.setDevice_code(deviceCode);
List<SignalData> signalList = new CopyOnWriteArrayList<>();
for (Map.Entry<String, String> entry : map.entrySet()) {
SignalData signalData = SignalData.buildSignalData(entry.getKey(), entry.getValue());
signalList.add(signalData);
}
putActionRequest.setList(signalList);
list.add(putActionRequest);
return list;
}
}

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

@ -1,6 +1,7 @@
package org.nl.wms.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
@ -39,6 +40,9 @@ public class PointUtils {
* @param point
*/
public static void clearPoint(SchBasePoint point) {
if (ObjectUtil.isEmpty(point)) {
return; // 空直接退出
}
SchBasePointServiceImpl pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class);
point.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
point.setVehicle_type("");

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

@ -208,4 +208,28 @@ public class PointCreate {
}
pointService.saveBatch(pointList);
}
@Test
void test07() { // 码垛机械手
// 创建YJ01JLW01
List<SchBasePoint> pointList = new ArrayList<>();
for (int i = 1; i <= 8; i++) {
String pointName = "压制不合格位0";
String pointCode = "YZBHGW0";
String papointCode = "YJ0";
pointName = pointName + i;
pointCode = pointCode + i;
papointCode = papointCode + i;
SchBasePoint point = new SchBasePoint();
point.setPoint_code(pointCode);
point.setPoint_name(pointName);
point.setRegion_code("YZ");
point.setRegion_name("压制区域");
point.setPoint_type("3");
point.setParent_point_code(papointCode);
point.setIs_has_workder(false);
point.setIs_auto(false);
pointList.add(point);
}
pointService.saveBatch(pointList);
}
}

126
lms/nladmin-ui/src/views/wms/pdm/vehiclebiding/index.vue

@ -0,0 +1,126 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<!--表单组件-->
<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">
<el-form-item label="源载具编码">
<el-input v-model="form.origin_vehicle_code" style="width: 370px;" />
</el-form-item>
<el-form-item label="源载具类型">
<el-input v-model="form.origin_vehicle_type" style="width: 370px;" />
</el-form-item>
<el-form-item label="目标载具编码">
<el-input v-model="form.target_vehicle_code" style="width: 370px;" />
</el-form-item>
<el-form-item label="目标载具类型">
<el-input v-model="form.target_vehicle_type" style="width: 370px;" />
</el-form-item>
<el-form-item label="源当前物料数量">
<el-input v-model="form.origin_qty" style="width: 370px;" />
</el-form-item>
<el-form-item label="目标当前物料数量">
<el-input v-model="form.target_qty" style="width: 370px;" />
</el-form-item>
<el-form-item label="取货点">
<el-input v-model="form.get_station" style="width: 370px;" />
</el-form-item>
<el-form-item label="放货点">
<el-input v-model="form.put_station" style="width: 370px;" />
</el-form-item>
<el-form-item label="工单号">
<el-input v-model="form.order_code" style="width: 370px;" />
</el-form-item>
<el-form-item label="记录时间">
<el-input v-model="form.record_time" style="width: 370px;" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</el-dialog>
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column prop="origin_vehicle_code" label="源载具编码" :min-width="flexWidth('origin_vehicle_code',crud.data,'源载具编码')"/>
<el-table-column prop="origin_vehicle_type" label="源载具类型" :min-width="flexWidth('origin_vehicle_type',crud.data,'源载具类型')"/>
<el-table-column prop="target_vehicle_code" label="目标载具编码" :min-width="flexWidth('target_vehicle_code',crud.data,'目标载具编码')"/>
<el-table-column prop="target_vehicle_type" label="目标载具类型" :min-width="flexWidth('target_vehicle_type',crud.data,'目标载具类型')"/>
<el-table-column prop="origin_qty" label="源当前物料数量" :min-width="flexWidth('origin_qty',crud.data,'源当前物料数量')"/>
<el-table-column prop="target_qty" label="目标当前物料数量" :min-width="flexWidth('target_qty',crud.data,'目标当前物料数量')"/>
<el-table-column prop="get_station" label="取货点" :min-width="flexWidth('get_station',crud.data,'取货点')"/>
<el-table-column prop="put_station" label="放货点" :min-width="flexWidth('put_station',crud.data,'放货点')"/>
<el-table-column prop="order_code" label="工单号" :min-width="flexWidth('order_code',crud.data,'工单号')"/>
<el-table-column prop="record_time" label="记录时间" :min-width="flexWidth('record_time',crud.data,'记录时间')"/>
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
/>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
import crudPdmBdVehicleBinding from './pdmBdVehicleBinding'
import CRUD, {crud, form, header, presenter} from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
const defaultForm = {
associate_id: null,
origin_vehicle_code: null,
origin_vehicle_type: null,
target_vehicle_code: null,
target_vehicle_type: null,
origin_qty: null,
target_qty: null,
get_station: null,
put_station: null,
order_code: null,
record_time: null
}
export default {
name: 'PdmBdVehicleBinding',
components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({
title: '分拣载具关联记录',
url: 'api/pdmBdVehicleBinding',
idField: 'associate_id',
sort: 'associate_id,desc',
crudMethod: { ...crudPdmBdVehicleBinding }
})
},
data() {
return {
permission: {
},
rules: {
} }
},
methods: {
// false
[CRUD.HOOK.beforeRefresh]() {
return true
}
}
}
</script>
<style scoped>
</style>

27
lms/nladmin-ui/src/views/wms/pdm/vehiclebiding/pdmBdVehicleBinding.js

@ -0,0 +1,27 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/pdmBdVehicleBinding',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/pdmBdVehicleBinding/',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/pdmBdVehicleBinding',
method: 'put',
data
})
}
export default { add, edit, del }

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

@ -60,7 +60,19 @@
</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"
:disabled="!(crud.selections[0]) || crud.selections[1]"
@click="submits(crud.selections[0])"
>
开工
</el-button>
</crudOperation>
<!--表单组件-->
<el-dialog
:close-on-click-modal="false"
@ -510,7 +522,14 @@ export default {
this.crud.query.more_order_status = value.toString()
}
this.crud.toQuery()
}
},
//
submits(row) {
crudPdmBdWorkorder.submits(row).then(res => {
this.crud.notify('下发成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
})
},
}
}
</script>

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

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

Loading…
Cancel
Save