Merge branch 'master' of http://121.40.234.130:8899/root/rl_mg
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -38,6 +38,18 @@
|
||||
>
|
||||
<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">
|
||||
@@ -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>
|
||||
@@ -239,6 +261,7 @@ export default {
|
||||
},
|
||||
device_types: [],
|
||||
regions: [],
|
||||
is_configs: [],
|
||||
uploadShow: false,
|
||||
|
||||
regions: [],
|
||||
@@ -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: {
|
||||
|
||||
Binary file not shown.
@@ -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("空指针异常发生了");
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理所有不可知的异常
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ public class PutActionRequest extends BaseRequest {
|
||||
* 设备号
|
||||
*/
|
||||
private String device_code;
|
||||
private String vehicle_type;
|
||||
|
||||
/**
|
||||
* 信号数据
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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> {
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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> {
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,4 +49,10 @@ public interface IPdmBdWorkorderService extends IService<PdmBdWorkorder> {
|
||||
PdmBdWorkorder getDeviceProductionTask(String deviceCode);
|
||||
|
||||
PdmBdWorkorder getByCode(String orderCode);
|
||||
|
||||
/**
|
||||
* 工单下发
|
||||
* @param entity
|
||||
*/
|
||||
void submits(PdmBdWorkorder entity);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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("任务已完成或已取消!");
|
||||
}
|
||||
|
||||
@@ -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、下发
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
JSONObject result;
|
||||
if (StrUtil.equals(GeneralDefinition.NO, isConnect)) {
|
||||
return ResultForAcs.requestRefuse("未连接ACS!");
|
||||
}
|
||||
String url = acsUrl + api;
|
||||
log.info("下发acs任务的参数为:{}", list.toString());
|
||||
ResultForAcs resultForAcs;
|
||||
try {
|
||||
String resultMsg = HttpRequest.post(url)
|
||||
.body(String.valueOf(list))
|
||||
.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;
|
||||
}
|
||||
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();
|
||||
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
|
||||
String acsUrl = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("ACS_URL").getValue();
|
||||
|
||||
String url = acsUrl + api;
|
||||
log.info("下发acs任务的参数为:{}", object.toString());
|
||||
try {
|
||||
String resultMsg = HttpRequest.post(url)
|
||||
.body(String.valueOf(object))
|
||||
.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;
|
||||
return resultForAcs;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
// 分拣机械手: 清空
|
||||
PointUtils.setUpdateByType(fjcPointObj, taskFinishedType);
|
||||
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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 p2.point_code IS NOT NULL
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 压制送空载具任务 x
|
||||
* @Description: 压制送空盅任务
|
||||
* @Date: 2023/5/25
|
||||
*/
|
||||
@Component
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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("");
|
||||
|
||||
@@ -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
Normal file
126
lms/nladmin-ui/src/views/wms/pdm/vehiclebiding/index.vue
Normal file
@@ -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>
|
||||
@@ -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 }
|
||||
@@ -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>
|
||||
|
||||
@@ -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 }
|
||||
|
||||
Reference in New Issue
Block a user