Merge branch 'master' of http://121.40.234.130:7788/lyd/zhuzhouzhongwu
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package org.nl.common.utils;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -23,12 +24,12 @@ public class SecurityUtils {
|
||||
* @return 系统用户
|
||||
*/
|
||||
public static CurrentUser getCurrentUser() {
|
||||
Object loginInfo = StpUtil.getExtra("loginInfo");
|
||||
if (loginInfo==null){
|
||||
throw new BadRequestException("用户信息获取失败");
|
||||
try {
|
||||
Object loginInfo = StpUtil.getExtra("loginInfo");
|
||||
return JSONObject.parseObject(String.valueOf(loginInfo),CurrentUser.class);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
return JSONObject.parseObject(String.valueOf(loginInfo),CurrentUser.class);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -37,7 +38,11 @@ public class SecurityUtils {
|
||||
* @return 系统用户名称
|
||||
*/
|
||||
public static String getCurrentUsername() {
|
||||
return getCurrentUser().getUsername();
|
||||
CurrentUser user = getCurrentUser();
|
||||
if (user!=null){
|
||||
return user.getUsername();
|
||||
}
|
||||
return "系统用户";
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -46,13 +51,11 @@ public class SecurityUtils {
|
||||
* @return 系统用户名称
|
||||
*/
|
||||
public static String getCurrentNickName() {
|
||||
// CurrentUser user = getCurrentUser();
|
||||
// if (user!=null){
|
||||
// return user.getPresonName();
|
||||
// }
|
||||
// return null;
|
||||
//tofix postMan测试,完成后改回
|
||||
return "admin";
|
||||
CurrentUser user = getCurrentUser();
|
||||
if (user!=null){
|
||||
return user.getPresonName();
|
||||
}
|
||||
return "default";
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -61,8 +64,9 @@ public class SecurityUtils {
|
||||
* @return 系统用户Id
|
||||
*/
|
||||
public static String getCurrentUserId() {
|
||||
//return getCurrentUser().getId();
|
||||
//tofix postMan测试,完成后改回
|
||||
if (ObjectUtil.isNotEmpty(getCurrentUser())) {
|
||||
return getCurrentUser().getId();
|
||||
}
|
||||
return "1";
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,8 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* 解包入库策略
|
||||
* 1、正常入库:料桶入到缓存库
|
||||
* 2、退料入库(0012):入库到原料库
|
||||
* @Author: lyd
|
||||
* @Date: 2025/7/23
|
||||
*/
|
||||
|
||||
@@ -66,6 +66,6 @@ public class PdaJBController {
|
||||
@Log("解包退料")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> jbReturnMaterial(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(null, HttpStatus.OK);
|
||||
return new ResponseEntity<>(pdaJBService.jbReturnMaterial(whereJson), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,4 +29,11 @@ public interface PdaJBService {
|
||||
* @return
|
||||
*/
|
||||
PdaResponse confirmSet(JSONObject param);
|
||||
|
||||
/**
|
||||
* 原料退料
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
PdaResponse jbReturnMaterial(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -196,7 +196,12 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
|
||||
// 3、工单状态修改,设置实际开始时间
|
||||
workorder.setWorkorder_status("3");
|
||||
workorder.setOperator(SecurityUtils.getCurrentNickName());
|
||||
workorder.setReal_weight(workorder.getPlan_weight());
|
||||
workorder.setRealproducestart_date(DateUtil.now());
|
||||
workorder.setUpdate_time(DateUtil.now());
|
||||
workorder.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
workorder.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
workorderService.updateById(workorder);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
@@ -408,6 +413,100 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponse jbReturnMaterial(JSONObject param) {
|
||||
// param: area, point_code, workorder_id
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
String area = param.getString("area");
|
||||
String tpCode = param.getString("tp_code");
|
||||
String pointCode = param.getString("point_code");
|
||||
String workorderId = param.getString("workorder_id");
|
||||
PdmBdWorkorder workOrder = workorderService.getById(workorderId);
|
||||
if (ObjectUtil.isEmpty(workOrder)) {
|
||||
throw new BadRequestException("工单[" + workorderId + "]不存在!");
|
||||
}
|
||||
SchBasePoint device = pointService.getById(pointCode);
|
||||
if (ObjectUtil.isEmpty(device)) {
|
||||
throw new BadRequestException("设备:" + pointCode + " 不存在!");
|
||||
}
|
||||
MdPbStoragevehicleinfo vehicleInfo = storagevehicleinfoService.getByCode(tpCode);
|
||||
MdMeMaterialbase materialbase = materialbaseService.getById(workOrder.getMaterial_id());
|
||||
if (ObjectUtil.isEmpty(materialbase)) {
|
||||
throw new BadRequestException("物料【" + workOrder.getMaterial_id() + "】不存在!");
|
||||
}
|
||||
Structattr structattr = structattrService.findByCode(workOrder.getStruct_code());
|
||||
// 0 组盘(涉及什么库区,通过工单对应的仓位的属性。)
|
||||
GroupPlate groupPlate = new GroupPlate();
|
||||
groupPlate.setGroup_id(IdUtil.getStringId());
|
||||
groupPlate.setStoragevehicle_code(tpCode);
|
||||
// 料桶类型根据工单,工单是根据点位
|
||||
groupPlate.setStoragevehicle_type(vehicleInfo.getStoragevehicle_type());
|
||||
groupPlate.setMaterial_id(workOrder.getMaterial_id());
|
||||
groupPlate.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd"));
|
||||
groupPlate.setQty(workOrder.getPlan_weight());
|
||||
groupPlate.setQty_unit_id("11");
|
||||
groupPlate.setQty_unit_name("kg");
|
||||
groupPlate.setFrozen_qty(BigDecimal.ZERO);
|
||||
groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
|
||||
groupPlate.setCreate_id(currentUserId);
|
||||
groupPlate.setCreate_name(nickName);
|
||||
groupPlate.setCreate_time(now);
|
||||
groupplateService.save(groupPlate);
|
||||
// 1 创建退料入库单、明细单、分配单
|
||||
Map<String, Object> insertInvObj = new HashMap();
|
||||
ArrayList<HashMap> tableData = new ArrayList<>();
|
||||
HashMap<String, Object> table = new HashMap<>();
|
||||
tableData.add(table);
|
||||
insertInvObj.put("stor_id", structattr.getStor_id());
|
||||
insertInvObj.put("bill_status", "10");
|
||||
insertInvObj.put("total_qty", workOrder.getPlan_weight());
|
||||
insertInvObj.put("detail_count", 1);
|
||||
insertInvObj.put("bill_type", "0012");
|
||||
insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
|
||||
insertInvObj.put("tableData", tableData);
|
||||
table.put("group_id", groupPlate.getGroup_id());
|
||||
table.put("storagevehicle_code", tpCode);
|
||||
table.put("storagevehicle_type", vehicleInfo.getStoragevehicle_type());
|
||||
table.put("material_id", materialbase.getMaterial_id());
|
||||
table.put("pcsn", groupPlate.getPcsn());
|
||||
table.put("qty", groupPlate.getQty());
|
||||
table.put("qty_unit_id", groupPlate.getQty_unit_id());
|
||||
table.put("qty_unit_name", groupPlate.getQty_unit_name());
|
||||
table.put("fronzen_qty", groupPlate.getFrozen_qty());
|
||||
table.put("status", "01");
|
||||
table.put("material_code", materialbase.getMaterial_code());
|
||||
table.put("material_name", materialbase.getMaterial_name());
|
||||
table.put("material_spec", materialbase.getMaterial_spec());
|
||||
String invId = inBillService.insertDtl(insertInvObj);
|
||||
// 2 分配货位(获取一个空托盘的仓位)
|
||||
JSONObject divObj = new JSONObject();
|
||||
divObj.put("sect_code", structattr.getSect_code());
|
||||
divObj.put("stor_code", structattr.getStor_id());
|
||||
divObj.put("checked", true);
|
||||
List<IOStorInvDis> ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<IOStorInvDis>()
|
||||
.eq(IOStorInvDis::getIostorinv_id, invId));
|
||||
if (ioStorInvDis.size() == 0) {
|
||||
throw new BadRequestException("分配明细不存在!");
|
||||
}
|
||||
// 类型转换
|
||||
ArrayList<LinkedHashMap> tables = new ArrayList<>();
|
||||
ioStorInvDis.forEach(item -> tables.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)));
|
||||
divObj.put("tableMater", tables);
|
||||
inBillService.divStruct(divObj);
|
||||
// 3 一键设置、创建任务(4点任务,点位是设备对应的上料位01,和上料位02,仓位是分配的货位其中一个)
|
||||
Map<String, Object> jsonMst = buildTaskData(pointCode, workorderId, invId);
|
||||
inBillService.divPoint(jsonMst);
|
||||
// 4 工单结束(方便下一个工单可以继续)
|
||||
// 工单完成
|
||||
workOrder.setWorkorder_status("5");
|
||||
workOrder.setRealproduceend_date(DateUtil.now());
|
||||
workorderService.updateById(workOrder);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
private Map<String, Object> buildTaskData(String pointCode, String workorderId, String invId) {
|
||||
Map<String, Object> jsonMst = new HashMap<>();
|
||||
// ru库点
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
package org.nl.wms.sch_manage.service.util.tasks.jb;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 解包退料AGV任务
|
||||
* @Author: lyd
|
||||
* @Date: 2025/7/28
|
||||
*/
|
||||
@Slf4j
|
||||
@Component("JbBackAgvTask")
|
||||
public class JbBackAgvTask extends AbstractTask {
|
||||
@Resource
|
||||
private ISchBaseTaskService taskService;
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(json.getString("TaskCode"));
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(json.getString("task_type"));
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setPoint_code3(json.getString("point_code3"));
|
||||
task.setPoint_code4(json.getString("point_code4"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setVehicle_code2(json.getString("vehicle_code2"));
|
||||
task.setGroup_id(json.getString("group_id"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcsTaskDto sendAcsParam(String taskId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
|
||||
private void finishTask(SchBaseTask taskObj) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
|
||||
throw new BadRequestException("任务状态必须为生成才能取消任务");
|
||||
}
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
|
||||
private void cancelTask(SchBaseTask taskObj) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void backMes(String task_code) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,7 @@ import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.StInTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackAgvTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
@@ -92,6 +93,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
||||
private ISchBasePointService pointService;
|
||||
@Resource
|
||||
private JbDownAgvTask jbDownAgvTask;
|
||||
@Resource
|
||||
private JbBackAgvTask jbBackAgvTask;
|
||||
|
||||
@Override
|
||||
public IPage<IOStorInv> pageQuery(Map whereJson, PageQuery page) {
|
||||
@@ -620,6 +623,32 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
||||
JSONObject requestTaskParam = new JSONObject();
|
||||
requestTaskParam.put("tasks", jsonObjects);
|
||||
task_id = jbDownAgvTask.create(requestTaskParam);
|
||||
} else if ("0012".equals(invObj.getBill_type())) {
|
||||
// 解包退料入库
|
||||
String structCode = map.get("struct_code");
|
||||
if (ObjectUtil.isEmpty(structCode)) {
|
||||
throw new BadRequestException("仓位未分配!");
|
||||
}
|
||||
// 获取组盘信息
|
||||
GroupPlate groupPlate = mdPbGroupplateService.getOne(new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code())
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
|
||||
// 解包入库
|
||||
SchBasePoint rkPoint = pointService.getById(point_code);
|
||||
// 父点位
|
||||
SchBasePoint parentPoint = pointService.getById(rkPoint.getParent_point_code());
|
||||
SchBasePoint fullPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "3");
|
||||
SchBasePoint emptyPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "4");
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("task_type", "JbDownAgvTask");
|
||||
task.put("group_id", groupPlate.getGroup_id());
|
||||
task.put("workorder_id", whereJson.get("workorder_id"));
|
||||
task.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.put("point_code1", structCode);
|
||||
task.put("point_code2", emptyPoint.getPoint_code());
|
||||
task.put("point_code3", fullPoint.getPoint_code());
|
||||
task.put("point_code4", structCode);
|
||||
jbBackAgvTask.create(task);
|
||||
} else {
|
||||
//创建任务
|
||||
JSONObject task_form = new JSONObject();
|
||||
|
||||
@@ -332,8 +332,8 @@
|
||||
{{ dict.label.pdm_workorder_status[scope.row.workorder_status] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="plan_qty" label="计划数量" :min-width="flexWidth('plan_qty',crud.data,'计划数量')" />
|
||||
<el-table-column prop="real_qty" label="实际数量" :min-width="flexWidth('real_qty',crud.data,'实际数量')" />
|
||||
<el-table-column prop="plan_weight" label="计划重量" :min-width="flexWidth('plan_weight',crud.data,'计划数量')" />
|
||||
<el-table-column prop="real_weight" label="实际重量" :min-width="flexWidth('real_weight',crud.data,'实际数量')" />
|
||||
<!-- <el-table-column prop="region_code" label="区域编码" :min-width="flexWidth('region_code',crud.data,'区域编码')" />-->
|
||||
<el-table-column
|
||||
prop="region_name"
|
||||
@@ -616,13 +616,15 @@ export default {
|
||||
this.materialCode = code
|
||||
},
|
||||
tableChanged(row, flag) {
|
||||
console.log(row)
|
||||
if (flag === 1) {
|
||||
this.form.material_name = row.material_name
|
||||
this.form.material_id = row.material_id
|
||||
this.form.material_spec = '不存在'
|
||||
this.form.material_spec = row.material_spec
|
||||
this.form.material_code = row.material_code
|
||||
this.form.struct_code = row.struct_code
|
||||
this.form.raw_material_code = row.storagevehicle_code
|
||||
this.form.plan_weight = row.qty
|
||||
}
|
||||
},
|
||||
clearRecordMesOrder() {
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
<el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" />
|
||||
<el-table-column prop="qty_unit_name" label="计量单位" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" />
|
||||
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
|
||||
<el-table-column prop="insert_time" label="入库时间" :min-width="flexWidth('insert_time',crud.data,'入库时间')" />
|
||||
<el-table-column prop="create_time" label="入库时间" :min-width="flexWidth('insert_time',crud.data,'入库时间')" />
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<pagination />
|
||||
|
||||
Reference in New Issue
Block a user