add:解包工单审核

This commit is contained in:
2026-06-30 09:11:11 +08:00
parent 77ee64ed08
commit aa1dda4fa2
24 changed files with 528 additions and 105 deletions

View File

@@ -36,6 +36,8 @@ public class CurrentUser implements Serializable {
private List<String> permissions = new ArrayList<>();
private List<String> roleNames = new ArrayList<>();
public static CurrentUser getDefaultUser() {
CurrentUser def = new CurrentUser();
def.setId("2");

View File

@@ -127,7 +127,7 @@ public class PdaJBServiceImpl implements PdaJBService {
String flag = whereJson.getString("flag");
List<PdmBdWorkorder> workorders = pdaJBMapper.getUnProductOrderList(
whereJson.getString("point_code"),
"1".equals(flag) ? "1" : "4");
"1".equals(flag) ? "2" : "4");
return PdaResponse.requestParamOk(workorders);
}
@@ -166,8 +166,8 @@ public class PdaJBServiceImpl implements PdaJBService {
if (ObjectUtil.isEmpty(workorder)) {
throw new BadRequestException("工单不存在!");
}
if (!"1".equals(workorder.getWorkorder_status())) {
throw new BadRequestException("该工单不是未生产,无法开工!");
if (!"2".equals(workorder.getWorkorder_status())) {
throw new BadRequestException("该工单不是审核状态,无法开工!");
}
final String taskPointCode = pointCode;
// 判断任务
@@ -446,7 +446,7 @@ public class PdaJBServiceImpl implements PdaJBService {
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, false)
.in(SchBaseTask::getConfig_code, Arrays.asList("JbDownAgvTask", "JbDownManualTask"))
.in(SchBaseTask::getConfig_code, Arrays.asList("JbDownAgvTask", "JbDownCloseUnsealingAgvTask", "JbDownManualTask"))
.and(ll -> ll.like(SchBaseTask::getPoint_code1, taskPointCode).or()
.like(SchBaseTask::getPoint_code2, taskPointCode).or()
.like(SchBaseTask::getPoint_code3, taskPointCode).or()

View File

@@ -7,7 +7,10 @@
mm.material_name
FROM `pdm_bd_workorder` o
LEFT JOIN md_me_materialbase mm ON mm.material_id = o.material_id
WHERE o.workorder_status = #{workorder_status}
WHERE o.workorder_status IN
<foreach collection="workorder_status.split(',')" item="status" separator="," open="(" close=")">
#{status}
</foreach>
AND o.point_code = #{pointCode}
ORDER BY o.update_time
</select>

View File

@@ -66,6 +66,12 @@ public class PdmBdWorkorderController {
pdmBdWorkorderService.submits(entity);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/audit")
@Log("审核")
public ResponseEntity<Object> audit(@RequestBody PdmBdWorkorder entity) {
pdmBdWorkorderService.audit(entity);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/loadComplete")
@Log("上料完成")
public ResponseEntity<Object> loadComplete(@RequestBody PdmBdWorkorder entity) {

View File

@@ -16,9 +16,9 @@ public enum WorkOrderStatusEnum {
*/
UNPRODUCED("1", "未生产"),
/**
* 已下发 x
* 审核
*/
ISSUED("2", "已下发"),
ISSUED("2", "审核"),
/**
* 生产中
*/

View File

@@ -86,6 +86,8 @@ public interface IPdmBdWorkorderService extends IService<PdmBdWorkorder> {
*/
void submits(PdmBdWorkorder entity);
void audit(PdmBdWorkorder entity);
void loadComplete(PdmBdWorkorder entity);
void batchAddOrders(JSONObject entity);

View File

@@ -81,6 +81,12 @@ public class PdmBdWorkorder implements Serializable {
private String workshop_code;
private String audit_id;
private String audit_name;
private String audit_time;
private String ext_id;
private String ext_data;

View File

@@ -119,6 +119,21 @@ public class PdmBdWorkorderDto implements Serializable {
*/
private String workshop_code;
/**
* 审核人
*/
private String audit_id;
/**
* 审核人姓名
*/
private String audit_name;
/**
* 审核时间
*/
private String audit_time;
/**
* 外部标识
*/

View File

@@ -201,6 +201,25 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
pdaJBService.callMaterial(param);
}
@Override
public void audit(PdmBdWorkorder entity) {
PdmBdWorkorder order = getById(entity.getWorkorder_id());
if (ObjectUtil.isEmpty(order)) {
throw new BadRequestException("工单不存在!");
}
if (!WorkOrderStatusEnum.UNPRODUCED.getCode().equals(order.getWorkorder_status())) {
throw new BadRequestException("仅状态为1的工单允许审核");
}
order.setWorkorder_status(WorkOrderStatusEnum.ISSUED.getCode());
order.setAudit_id(SecurityUtils.getCurrentUserId());
order.setAudit_name(SecurityUtils.getCurrentNickName());
order.setAudit_time(DateUtil.now());
order.setUpdate_id(SecurityUtils.getCurrentUserId());
order.setUpdate_name(SecurityUtils.getCurrentNickName());
order.setUpdate_time(DateUtil.now());
updateById(order);
}
@Override
public void loadComplete(PdmBdWorkorder entity) {
PdmBdWorkorder order = getById(entity.getWorkorder_id());

View File

@@ -0,0 +1,244 @@
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.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService;
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.dao.SchBaseTaskconfig;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.TaskUtils;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* 解包下料-屏蔽拆封盖机 AGV 任务
*/
@Slf4j
@Component("JbDownCloseUnsealingAgvTask")
public class JbDownCloseUnsealingAgvTask extends AbstractTask {
@Resource
private ISchBaseTaskService taskService;
@Resource
private IInBillService inBillService;
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
@Resource
private ISchBasePointService pointService;
@Resource
private ISchBaseTaskconfigService taskconfigService;
@Resource
private IMdPbStoragevehicleinfoService storagevehicleinfoService;
@Resource
private IStructattrService structattrService;
@Override
public String create(JSONObject param) {
JSONArray tasks = param.getJSONArray("tasks");
List<SchBaseTask> batchTask = new ArrayList<>();
for (int i = 0; i < tasks.size(); i++) {
JSONObject json = tasks.getJSONObject(i);
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(json.getString("TaskCode"));
task.setTask_status(TaskStatus.CREATED.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.setVehicle_type(json.getString("vehicle_type"));
task.setGroup_id(json.getString("group_id"));
task.setTask_group_id(json.getString("task_group_id"));
task.setTask_group_seq(json.getBigDecimal("task_group_seq"));
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());
batchTask.add(task);
}
taskService.saveBatch(batchTask);
return batchTask.get(batchTask.size() - 1).getTask_id();
}
@Override
public AcsTaskDto sendAcsParam(String taskId) {
SchBaseTask taskDao = taskService.getById(taskId);
SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code());
JSONObject object = JSONObject.parseObject(taskDao.getRequest_param());
AcsTaskDto acsTaskDto = new AcsTaskDto();
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setStart_device_code2(taskDao.getPoint_code3());
acsTaskDto.setNext_device_code2(taskDao.getPoint_code4());
acsTaskDto.setAgv_system_type("3");
acsTaskDto.setPriority(taskDao.getPriority());
acsTaskDto.setTask_type(taskconfig.getTask_type());
acsTaskDto.setTruss_type(object.getString("truss_type"));
acsTaskDto.setInteraction_json(new JSONObject().fluentPut("have_lid", object.getString("have_lid")));
fillCommonAcsTaskFields(taskDao, acsTaskDto);
return acsTaskDto;
}
@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("执行中");
TaskUtils.setUpdateByAcs(taskObj);
taskService.updateById(taskObj);
}
if (status.equals(TaskStatus.FINISHED)) {
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
if (status.equals(TaskStatus.CANCELED)) {
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark("已取消");
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getTask_id, null)
.set(IOStorInvDis::getPoint_code, null)
.set(IOStorInvDis::getIs_issued, 0)
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
.eq(IOStorInvDis::getTask_id, taskObj.getTask_id()));
clearPointTaskCode(taskObj.getPoint_code1());
clearPointTaskCode(taskObj.getPoint_code4());
clearStructTaskCode(taskObj.getPoint_code2());
clearStructTaskCode(taskObj.getPoint_code3());
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
MdPbStoragevehicleinfo emptyVehicleInfo = storagevehicleinfoService.getByCode(taskObj.getVehicle_code2());
if (ObjectUtil.isEmpty(emptyVehicleInfo)) {
throw new BadRequestException(taskObj.getVehicle_code2() + "的托盘信息不存在!");
}
// point4 等于 point1最终状态应为对接位补入空桶
clearStruct(taskObj.getPoint_code3());
occupyStruct(taskObj.getPoint_code2(), taskObj.getVehicle_code(), taskObj.getVehicle_type());
occupyPoint(taskObj.getPoint_code4(), taskObj.getVehicle_code2(), emptyVehicleInfo.getStoragevehicle_type(), "2");
taskObj.setRemark("任务执行完毕");
inBillService.taskFinish(taskObj);
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
private void occupyPoint(String code, String vehicleCode, String vehicleType, String pointStatus) {
SchBasePoint point = pointService.getById(code);
if (ObjectUtil.isEmpty(point)) {
throw new BadRequestException("点位不存在:" + code);
}
point.setPoint_status(pointStatus);
point.setVehicle_code(vehicleCode);
point.setVehicle_type(vehicleType);
point.setUpdate_time(DateUtil.now());
pointService.updateById(point);
}
private void clearStruct(String code) {
Structattr struct = structattrService.getByCode(code);
if (ObjectUtil.isEmpty(struct)) {
throw new BadRequestException("仓位不存在:" + code);
}
structattrService.update(new LambdaUpdateWrapper<Structattr>()
.set(Structattr::getStoragevehicle_code, null)
.set(Structattr::getStoragevehicle_type, null)
.set(Structattr::getOccupancy_state, "1")
.eq(Structattr::getStruct_code, code));
}
private void occupyStruct(String code, String vehicleCode, String vehicleType) {
Structattr struct = structattrService.getByCode(code);
if (ObjectUtil.isEmpty(struct)) {
throw new BadRequestException("仓位不存在:" + code);
}
structattrService.update(new LambdaUpdateWrapper<Structattr>()
.set(Structattr::getStoragevehicle_code, vehicleCode)
.set(Structattr::getStoragevehicle_type, vehicleType)
.set(Structattr::getOccupancy_state, "2")
.eq(Structattr::getStruct_code, code));
}
private void clearPointTaskCode(String code) {
if (ObjectUtil.isEmpty(code)) {
return;
}
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
.set(SchBasePoint::getIng_task_code, null)
.eq(SchBasePoint::getPoint_code, code));
}
private void clearStructTaskCode(String code) {
if (ObjectUtil.isEmpty(code)) {
return;
}
structattrService.update(new LambdaUpdateWrapper<Structattr>()
.set(Structattr::getTask_code, null)
.eq(Structattr::getStruct_code, code));
}
@Override
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
@Override
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);
}
@Override
public void backMes(String task_code) {
}
}

View File

@@ -147,7 +147,7 @@ public class JbUpAgvTask extends AbstractTask {
String orderId = requestParam.getString("order_id");
if (ObjectUtil.isNotEmpty(orderId)) {
workorderService.update(new LambdaUpdateWrapper<PdmBdWorkorder>()
.set(PdmBdWorkorder::getWorkorder_status, "1")
.set(PdmBdWorkorder::getWorkorder_status, "2")
.set(PdmBdWorkorder::getRealproduceend_date, null)
.eq(PdmBdWorkorder::getWorkorder_id, orderId));
}

View File

@@ -107,7 +107,7 @@ public class JbUpManualTask extends AbstractTask {
String orderId = requestParam.getString("order_id");
if (ObjectUtil.isNotEmpty(orderId)) {
workorderService.update(new LambdaUpdateWrapper<PdmBdWorkorder>()
.set(PdmBdWorkorder::getWorkorder_status, "1")
.set(PdmBdWorkorder::getWorkorder_status, "2")
.set(PdmBdWorkorder::getRealproduceend_date, null)
.eq(PdmBdWorkorder::getWorkorder_id, orderId));
}

View File

@@ -61,6 +61,7 @@ public class AuthorizationController {
CurrentUser currentUser = SecurityUtils.getCurrentUser();
JSONObject jsonObject = new JSONObject();
jsonObject.put("roles", SecurityUtils.getCurrentUserPermissions());
jsonObject.put("roleNames", currentUser.getRoleNames());
jsonObject.put("user", currentUser.getUser());
return ResponseEntity.ok(jsonObject);
}

View File

@@ -59,6 +59,13 @@ public interface ISysRoleService extends IService<SysRole> {
*/
List<String> getPermissionList(JSONObject userDto);
/**
* 通过用户id获取角色名称
* @param userId 用户id
* @return 角色名称列表
*/
List<String> getRoleNameList(String userId);
/**
* 保存用户角色关系

View File

@@ -49,4 +49,11 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
* @param menuIds
*/
void insertRoleMenu(String roleId, Collection<String> menuIds);
/**
* 获取用户角色名称列表
* @param userId 用户id
* @return 角色名称列表
*/
List<String> selectRoleNamesByUserId(String userId);
}

View File

@@ -26,4 +26,10 @@
<select id="selectMenuIdsByRoles" resultType="java.lang.String">
SELECT DISTINCT menu_id FROM sys_roles_menus WHERE role_id = #{roleId}
</select>
<select id="selectRoleNamesByUserId" resultType="java.lang.String">
SELECT DISTINCT r.name
FROM sys_role r
INNER JOIN sys_users_roles ur ON ur.role_id = r.role_id
WHERE ur.user_id = #{userId}
</select>
</mapper>

View File

@@ -138,6 +138,14 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
return permission;
}
@Override
public List<String> getRoleNameList(String userId) {
if (StringUtils.isEmpty(userId)) {
return new ArrayList<>();
}
return roleMapper.selectRoleNamesByUserId(userId);
}
@Override
public void saveUserRoleRelation(String user, List<String> roles) {
if (StringUtils.isEmpty(user) || CollectionUtils.isEmpty(roles)){

View File

@@ -46,6 +46,7 @@ public class HandLoginServiceImpl implements HandLoginService {
throw new BadRequestException("账号未激活");
}
List<String> permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo));
List<String> roleNameList = roleService.getRoleNameList(userInfo.getUser_id());
// 登录输入,登出删除
CurrentUser user = new CurrentUser();
user.setId(userInfo.getUser_id());
@@ -53,6 +54,7 @@ public class HandLoginServiceImpl implements HandLoginService {
user.setPresonName((userInfo.getPerson_name()));
user.setUser(userInfo);
user.setPermissions(permissionList);
user.setRoleNames(roleNameList);
// SaLoginModel 配置登录相关参数
StpUtil.login(userInfo.getUser_id(), new SaLoginModel()
.setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
@@ -61,6 +63,7 @@ public class HandLoginServiceImpl implements HandLoginService {
JSONObject result = new JSONObject();
result.put("token", StpUtil.getTokenValue());
result.put("roles", permissionList);
result.put("roleNames", roleNameList);
result.put("user", user);
return result;

View File

@@ -187,6 +187,7 @@ public class ISysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> imp
throw new BadRequestException("账号未激活");
}
List<String> permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo));
List<String> roleNameList = roleService.getRoleNameList(userInfo.getUser_id());
// 登录输入,登出删除
CurrentUser user = new CurrentUser();
user.setId(userInfo.getUser_id());
@@ -194,6 +195,7 @@ public class ISysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> imp
user.setPresonName((userInfo.getPerson_name()));
user.setUser(userInfo);
user.setPermissions(permissionList);
user.setRoleNames(roleNameList);
// SaLoginModel 配置登录相关参数
StpUtil.login(userInfo.getUser_id(), new SaLoginModel()
.setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
@@ -202,6 +204,7 @@ public class ISysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> imp
JSONObject result = new JSONObject();
result.put("token", StpUtil.getTokenValue());
result.put("roles", permissionList);
result.put("roleNames", roleNameList);
result.put("user", user);
return result;
}

View File

@@ -41,7 +41,10 @@ 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.JbBackManualTask;
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask;
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownCloseUnsealingAgvTask;
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownManualTask;
import org.nl.wms.system_manage.service.param.ISysParamService;
import org.nl.wms.system_manage.service.param.dao.Param;
import org.nl.wms.sch_manage.service.util.tasks.zw.InBillTask;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
@@ -104,6 +107,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
@Resource
private JbDownAgvTask jbDownAgvTask;
@Resource
private JbDownCloseUnsealingAgvTask jbDownCloseUnsealingAgvTask;
@Resource
private JbBackAgvTask jbBackAgvTask;
@Resource
private JbBackManualTask jbBackManualTask;
@@ -116,6 +121,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
private JbDownManualTask jbDownManualTask;
@Resource
private IPdmBdWorkorderService workorderService;
@Resource
private ISysParamService paramService;
@Override
public IPage<IOStorInv> pageQuery(Map whereJson, PageQuery page) {
@@ -797,88 +804,105 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|| !"2".equals(intoPoint.getPoint_type())) {
throw new BadRequestException("请选择超细/中粗吨袋解包区对接位!");
}
String cfgPointType = "CXDDJBQ".equals(intoPoint.getRegion_code()) ? "1" : "2";
String parentPointCode = intoPoint.getParent_point_code();
if (ObjectUtil.isEmpty(parentPointCode)) {
throw new BadRequestException("解包对接点未配置父类编码!");
}
SchBasePoint emptyPoint = pointService.getNotTaskByDeviceAndType(parentPointCode, "4");
if (ObjectUtil.isEmpty(emptyPoint)) {
throw new BadRequestException("找不到可用的空桶缓存位!");
}
// 获取无盖子的对应的点位
List<SchBasePoint> canUseCFGJs = pointService.getCanUseCFGJs(intoPoint, "1", cfgPointType);
if (canUseCFGJs.size() == 0) {
throw new BadRequestException("找不到可用的拆封盖机");
}
SchBasePoint cfgjPoint = canUseCFGJs.get(0);
// 创建任务1
String taskGroupId = IdUtil.getStringId();
JSONObject task1 = new JSONObject();
task1.put("task_type", "JbDownAgvTask");
task1.put("group_id", groupPlate.getGroup_id());
task1.put("workorder_id", whereJson.get("workorder_id"));
task1.put("task_group_id", taskGroupId);
task1.put("task_group_seq", 1);
task1.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task1.put("point_code1", structCode);
task1.put("point_code2", cfgjPoint.getPoint_code());
task1.put("point_code3", cfgjPoint.getPoint_code());
task1.put("point_code4", emptyPoint.getPoint_code());
task1.put("truss_type", "3");
task1.put("have_lid", "1");
task1.put("vehicle_type", inStruct.getStoragevehicle_type());
task1.put("seq", 1);
// 空托盘
task1.put("vehicle_code", inStruct.getStoragevehicle_code());
// 解包下料第1条两段都搬空桶
task1.put("vehicle_code2", inStruct.getStoragevehicle_code());
if (isOpenUnsealingEnabled()) {
String cfgPointType = "CXDDJBQ".equals(intoPoint.getRegion_code()) ? "1" : "2";
String parentPointCode = intoPoint.getParent_point_code();
if (ObjectUtil.isEmpty(parentPointCode)) {
throw new BadRequestException("解包对接点未配置父类编码!");
}
SchBasePoint emptyPoint = pointService.getNotTaskByDeviceAndType(parentPointCode, "4");
if (ObjectUtil.isEmpty(emptyPoint)) {
throw new BadRequestException("找不到可用的空桶缓存位!");
}
// 获取无盖子的对应的点位
List<SchBasePoint> canUseCFGJs = pointService.getCanUseCFGJs(intoPoint, "1", cfgPointType);
if (canUseCFGJs.size() == 0) {
throw new BadRequestException("找不到可用的拆封盖机");
}
SchBasePoint cfgjPoint = canUseCFGJs.get(0);
// 创建任务1
String taskGroupId = IdUtil.getStringId();
JSONObject task1 = new JSONObject();
task1.put("task_type", "JbDownAgvTask");
task1.put("group_id", groupPlate.getGroup_id());
task1.put("workorder_id", whereJson.get("workorder_id"));
task1.put("task_group_id", taskGroupId);
task1.put("task_group_seq", 1);
task1.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task1.put("point_code1", structCode);
task1.put("point_code2", cfgjPoint.getPoint_code());
task1.put("point_code3", cfgjPoint.getPoint_code());
task1.put("point_code4", emptyPoint.getPoint_code());
task1.put("truss_type", "3");
task1.put("have_lid", "0");
task1.put("vehicle_type", inStruct.getStoragevehicle_type());
task1.put("seq", 1);
task1.put("vehicle_code", inStruct.getStoragevehicle_code());
task1.put("vehicle_code2", inStruct.getStoragevehicle_code());
// 创建任务2
JSONObject task2 = new JSONObject();
task2.put("task_type", "JbDownAgvTask");
task2.put("group_id", groupPlate.getGroup_id());
task2.put("task_group_id", taskGroupId);
task2.put("task_group_seq", 2);
task2.put("workorder_id", whereJson.get("workorder_id"));
task2.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task2.put("point_code1", intoPoint.getPoint_code());
task2.put("point_code2", cfgjPoint.getPoint_code());
task2.put("point_code3", emptyPoint.getPoint_code());
task2.put("point_code4", intoPoint.getPoint_code());
task2.put("truss_type", "3");
task2.put("have_lid", "0");
task2.put("seq", 2);
// 解包下料第2条段1搬满桶对接位->拆封盖机)
task2.put("vehicle_code", map.get("storagevehicle_code"));
task2.put("vehicle_type", inStruct.getStoragevehicle_type());
// 解包下料第2条段2搬空桶空桶缓存位->对接位)
task2.put("vehicle_code2", inStruct.getStoragevehicle_code());
JSONObject task2 = new JSONObject();
task2.put("task_type", "JbDownAgvTask");
task2.put("group_id", groupPlate.getGroup_id());
task2.put("task_group_id", taskGroupId);
task2.put("task_group_seq", 2);
task2.put("workorder_id", whereJson.get("workorder_id"));
task2.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task2.put("point_code1", intoPoint.getPoint_code());
task2.put("point_code2", cfgjPoint.getPoint_code());
task2.put("point_code3", emptyPoint.getPoint_code());
task2.put("point_code4", intoPoint.getPoint_code());
task2.put("truss_type", "3");
task2.put("have_lid", "0");
task2.put("seq", 2);
task2.put("vehicle_code", map.get("storagevehicle_code"));
task2.put("vehicle_type", inStruct.getStoragevehicle_type());
task2.put("vehicle_code2", inStruct.getStoragevehicle_code());
// 创建任务3
JSONObject task3 = new JSONObject();
task3.put("task_type", "JbDownAgvTask");
task3.put("group_id", groupPlate.getGroup_id());
task3.put("task_group_id", taskGroupId);
task3.put("task_group_seq", 3);
task3.put("workorder_id", whereJson.get("workorder_id"));
task3.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task3.put("point_code1", cfgjPoint.getPoint_code());
task3.put("point_code2", structCode);
task3.put("point_code3", null);
task3.put("point_code4", null);
task3.put("truss_type", "3");
task3.put("have_lid", "2");
task3.put("seq", 3);
// 解包下料第3条搬满桶拆封盖机->料桶缓存库)
task3.put("vehicle_code", map.get("storagevehicle_code"));
task3.put("vehicle_type", inStruct.getStoragevehicle_type());
// 两点任务不传第二载具号
task3.put("vehicle_code2", null);
List<JSONObject> jsonObjects = Arrays.asList(task1, task2, task3);
JSONObject requestTaskParam = new JSONObject();
requestTaskParam.put("tasks", jsonObjects);
task_id = jbDownAgvTask.create(requestTaskParam);
JSONObject task3 = new JSONObject();
task3.put("task_type", "JbDownAgvTask");
task3.put("group_id", groupPlate.getGroup_id());
task3.put("task_group_id", taskGroupId);
task3.put("task_group_seq", 3);
task3.put("workorder_id", whereJson.get("workorder_id"));
task3.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task3.put("point_code1", cfgjPoint.getPoint_code());
task3.put("point_code2", structCode);
task3.put("point_code3", null);
task3.put("point_code4", null);
task3.put("truss_type", "3");
task3.put("have_lid", "0");
task3.put("seq", 3);
task3.put("vehicle_code", map.get("storagevehicle_code"));
task3.put("vehicle_type", inStruct.getStoragevehicle_type());
task3.put("vehicle_code2", null);
List<JSONObject> jsonObjects = Arrays.asList(task1, task2, task3);
JSONObject requestTaskParam = new JSONObject();
requestTaskParam.put("tasks", jsonObjects);
task_id = jbDownAgvTask.create(requestTaskParam);
} else {
String taskGroupId = IdUtil.getStringId();
JSONObject task = new JSONObject();
task.put("task_type", "JbDownCloseUnsealingAgvTask");
task.put("group_id", groupPlate.getGroup_id());
task.put("workorder_id", whereJson.get("workorder_id"));
task.put("task_group_id", taskGroupId);
task.put("task_group_seq", 1);
task.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task.put("point_code1", intoPoint.getPoint_code());
task.put("point_code2", structCode);
task.put("point_code3", structCode);
task.put("point_code4", intoPoint.getPoint_code());
task.put("truss_type", "3");
task.put("have_lid", "1");
task.put("vehicle_type", inStruct.getStoragevehicle_type());
task.put("seq", 1);
task.put("vehicle_code", map.get("storagevehicle_code"));
task.put("vehicle_code2", inStruct.getStoragevehicle_code());
List<JSONObject> jsonObjects = Arrays.asList(task);
JSONObject requestTaskParam = new JSONObject();
requestTaskParam.put("tasks", jsonObjects);
task_id = jbDownCloseUnsealingAgvTask.create(requestTaskParam);
}
} else if (StatusEnum.IOBILL_TYPE_IN.code("解包直接入库").equals(invObj.getBill_type())) {
// 创建人工四点任务
String structCode = map.get("struct_code");
@@ -1098,6 +1122,14 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
ioStorInvDisMapper.updateById(dis);
}
private boolean isOpenUnsealingEnabled() {
Param param = paramService.findByCode("is_open_unsealing");
if (ObjectUtil.isEmpty(param) || StrUtil.isBlank(param.getValue())) {
return true;
}
return "1".equals(StrUtil.trim(param.getValue()));
}
@Override
public String divPointNoTask(Map whereJson) {
ArrayList<HashMap> rows = (ArrayList<HashMap>) whereJson.get("tableMater");

View File

@@ -8,6 +8,7 @@ const getters = {
visitedViews: state => state.tagsView.visitedViews,
cachedViews: state => state.tagsView.cachedViews,
roles: state => state.user.roles,
roleNames: state => state.user.roleNames,
user: state => state.user.user,
loadMenus: state => state.user.loadMenus,
permission_routers: state => state.permission.routers,

View File

@@ -6,6 +6,7 @@ const user = {
token: getToken(),
user: {},
roles: [],
roleNames: [],
// 第一次加载菜单时用到
loadMenus: false
},
@@ -20,6 +21,9 @@ const user = {
SET_ROLES: (state, roles) => {
state.roles = roles
},
SET_ROLE_NAMES: (state, roleNames) => {
state.roleNames = roleNames
},
SET_LOAD_MENUS: (state, loadMenus) => {
state.loadMenus = loadMenus
}
@@ -78,6 +82,7 @@ const user = {
export const logOut = (commit) => {
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
commit('SET_ROLE_NAMES', [])
removeToken()
}
@@ -90,6 +95,7 @@ export const setUserInfo = (res, commit) => {
} else {
commit('SET_ROLES', res.permissions)
}
commit('SET_ROLE_NAMES', res.roleNames || [])
commit('SET_USER', res.user)
}

View File

@@ -71,6 +71,18 @@
>
批量建单
</el-button>
<el-button
v-if="canViewAuditButton()"
slot="right"
class="filter-item"
type="warning"
icon="el-icon-check"
size="mini"
:disabled="!canAudit(crud.selections)"
@click="audit(crud.selections[0])"
>
审核
</el-button>
<el-button
slot="right"
class="filter-item"
@@ -407,16 +419,6 @@
label="计划结束时间"
:min-width="flexWidth('planproduceend_date',crud.data,'计划结束时间')"
/>
<el-table-column
prop="realproducestart_date"
label="实际开始时间"
:min-width="flexWidth('realproducestart_date',crud.data,'实际开始时间')"
/>
<el-table-column
prop="realproduceend_date"
label="实际结束时间"
:min-width="flexWidth('realproduceend_date',crud.data,'实际结束时间')"
/>
<!-- <el-table-column-->
<!-- prop="standing_time"-->
<!-- label="静置时间(分钟)"-->
@@ -436,7 +438,23 @@
<!-- {{ scope.row.is_urgent ? '是' : '否' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="audit_name" label="审核人" :min-width="flexWidth('audit_name',crud.data,'审核人')" />
<el-table-column
prop="audit_time"
label="审核时间"
:min-width="flexWidth('audit_time',crud.data,'审核时间')"
/>
<el-table-column prop="operator" label="开工人" :min-width="flexWidth('operator',crud.data,'创建人')" />
<el-table-column
prop="realproducestart_date"
label="实际开始时间"
:min-width="flexWidth('realproducestart_date',crud.data,'实际开始时间')"
/>
<el-table-column
prop="realproduceend_date"
label="实际结束时间"
:min-width="flexWidth('realproduceend_date',crud.data,'实际结束时间')"
/>
<el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')" />
<el-table-column
prop="create_time"
@@ -601,13 +619,24 @@ export default {
},
methods: {
canEditOrDelete(row) {
return String(row.workorder_status) === '1'
return ['1', '2'].includes(String(row.workorder_status))
},
canStart(selections) {
return Array.isArray(selections) &&
selections.length === 1 &&
String(selections[0].workorder_status) === '2'
},
canAudit(selections) {
return Array.isArray(selections) &&
selections.length === 1 &&
String(selections[0].workorder_status) === '1'
},
canViewAuditButton() {
const roleNames = this.$store.getters.roleNames || []
return roleNames.includes('管理员') ||
roleNames.includes('仓库管理员') ||
roleNames.includes('超级管理员')
},
canLoadComplete(selections) {
return Array.isArray(selections) &&
selections.length === 1 &&
@@ -622,7 +651,7 @@ export default {
},
beforeCrudToEdit(crud, form) {
if (!this.canEditOrDelete(form)) {
this.$message.warning('仅工单状态为1时允许修改')
this.$message.warning('仅工单状态为1或2时允许修改')
return false
}
return true
@@ -631,7 +660,7 @@ export default {
const rows = Array.isArray(data) ? data : [data]
const canDelete = rows.every(row => this.canEditOrDelete(row))
if (!canDelete) {
this.$message.warning('仅工单状态为1时允许删除')
this.$message.warning('仅工单状态为1或2时允许删除')
return false
}
return true
@@ -733,10 +762,25 @@ export default {
}
this.crud.toQuery()
},
audit(row) {
if (String(row.workorder_status) !== '1') {
this.$message.warning('仅工单状态为1时允许审核')
return
}
this.fullscreenLoading = true
crudPdmBdWorkorder.audit(row).then(res => {
this.crud.notify('审核成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
}).catch(() => {
this.fullscreenLoading = false
}).finally(() => {
this.fullscreenLoading = false
})
},
// 下发
submits(row) {
if (String(row.workorder_status) !== '1') {
this.$message.warning('仅工单状态为1时允许开工')
if (String(row.workorder_status) !== '2') {
this.$message.warning('仅工单状态为2时允许开工')
return
}
this.fullscreenLoading = true

View File

@@ -32,6 +32,14 @@ export function submits(param) {
})
}
export function audit(param) {
return request({
url: 'api/pdmBdWorkorder/audit',
method: 'post',
data: param
})
}
export function loadComplete(param) {
return request({
url: 'api/pdmBdWorkorder/loadComplete',
@@ -76,4 +84,4 @@ export function batchAddOrders(data) {
})
}
export default { add, edit, del, submits, loadComplete, forceFinish, orderSynchronize, queryMaterials, getCuster, batchAddOrders }
export default { add, edit, del, submits, audit, loadComplete, forceFinish, orderSynchronize, queryMaterials, getCuster, batchAddOrders }