diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/WorkOrderStatusEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/WorkOrderStatusEnum.java index 2f2c5b2..20cf57e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/WorkOrderStatusEnum.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/WorkOrderStatusEnum.java @@ -22,7 +22,10 @@ public enum WorkOrderStatusEnum { //生箔工序工单状态 PRODUCT_STATUS(MapOf.of("开始", "01", "空轴搬出", "02", "确认下卷", "03", "下卷完成", - "04", "结束", "09")); + "04", "结束", "09")), + + //完成方式 + FINISH_TYPE(MapOf.of("自动", "01", "手动", "02")); private Map code; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/FeedBackTaskStatusRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/FeedBackTaskStatusRequest.java index 3d77437..552606b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/FeedBackTaskStatusRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/FeedBackTaskStatusRequest.java @@ -1,5 +1,6 @@ package org.nl.wms.ext.acs.service.dto.to.wms; +import com.alibaba.fastjson.JSONObject; import lombok.Data; import org.nl.wms.ext.acs.service.dto.to.BaseRequest; @@ -22,7 +23,7 @@ public class FeedBackTaskStatusRequest extends BaseRequest { /** * 任务code */ - private String task_code; + private JSONObject task_info; /** * 任务状态 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index bb48fd3..4e9ec71 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -115,13 +115,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // todo: action暂未维护 String requestNo = param.getString("requestNo"); FeedBackTaskStatusRequest taskStatusRequest = param.toJavaObject(FeedBackTaskStatusRequest.class); - String taskCode = taskStatusRequest.getTask_code(); - if (ObjectUtil.isEmpty(taskCode)) { - throw new BadRequestException("任务编码不能为空!"); + JSONObject taskInfo = taskStatusRequest.getTask_info(); + if (ObjectUtil.isEmpty(taskInfo)) { + throw new BadRequestException("任务信息不能为空!"); } - SchBaseTask taskObj = taskService.getByCode(taskCode); + SchBaseTask taskObj = taskService.getByCode(taskInfo.getString("task_code")); if (ObjectUtil.isEmpty(taskObj)) { - throw new BadRequestException("未找到任务编码为 [" + taskCode + "] 的任务"); + throw new BadRequestException("未找到任务编码为 [" + taskInfo.getString("task_code") + "] 的任务"); } // 任务处理类 String processingClass = taskObj.getConfig_code(); @@ -146,10 +146,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { AbstractTask abstractTask = taskFactory.getTask(processingClass); // 更新任务 try { - abstractTask.updateTaskStatus(taskCode, status); + abstractTask.updateTaskStatus(taskInfo, status); } catch (Exception e) { log.error("任务状态更新失败: {}", message); - return BaseResponse.responseError(requestNo, "任务:[" + taskCode + "]状态更新失败," + message); + return BaseResponse.responseError(requestNo, "任务:[" + taskInfo.getString("task_code") + "]状态更新失败," + message); } return BaseResponse.responseOk(requestNo, "任务状态反馈成功!"); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/controller/MdPbInterfacebackController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/controller/MdPbInterfacebackController.java new file mode 100644 index 0000000..9039c12 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/controller/MdPbInterfacebackController.java @@ -0,0 +1,111 @@ +package org.nl.wms.md.controller; + +import java.util.Set; +import java.util.Map; + +import org.nl.common.base.TableDataInfo; +import org.springframework.web.bind.annotation.*; +import lombok.RequiredArgsConstructor; + +import javax.annotation.Resource; + +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.md.dto.MdPbInterfacebackParam; +import org.nl.wms.md.service.ImdPbInterfacebackService; + + +/** + * {@code @Description:} 接口回传设置表(MdPbInterfaceback)控制层 + * {@code @Author:} gbx + * + * @since 2024-04-16 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/mdPbInterfaceback") +@Slf4j +public class MdPbInterfacebackController { + + + @Resource + private ImdPbInterfacebackService mdPbInterfacebackService; + + + /** + * 分页查询 + * + * @param whereJson 查询条件 + * @param page 分页参数 + */ + @GetMapping + @Log("查询接口回传设置表") + //@SaCheckPermission("@el.check(MdPbInterfaceback:list") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(mdPbInterfacebackService.query(whereJson, page)), HttpStatus.OK); + } + + + /** + * 条件查询 + * + * @param params 查询条件 + */ + @PostMapping("/selectList") + @Log("条件查询接口回传设置表") + //@SaCheckPermission("@el.check(MdPbInterfaceback:list") + public ResponseEntity selectList(@RequestBody MdPbInterfacebackParam params) { + return new ResponseEntity<>(mdPbInterfacebackService.selectList(params), HttpStatus.OK); + } + + + /** + * 新增数据 + * + * @param params 实体对象 + * @return 新增结果 + */ + @PostMapping + @Log("新增接口回传设置表") + //@SaCheckPermission("@el.check(MdPbInterfaceback:add") + public ResponseEntity create(@RequestBody MdPbInterfacebackParam params) { + mdPbInterfacebackService.create(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + + /** + * 修改数据 + * + * @param params 实体对象 + * @return 修改结果 + */ + @PutMapping + @Log("修改接口回传设置表") + //@SaCheckPermission("@el.check(MdPbInterfaceback:edit')") + public ResponseEntity update(@RequestBody MdPbInterfacebackParam params) { + mdPbInterfacebackService.update(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + + /** + * 删除数据 + * + * @param ids 多个主键Id + * @return 删除结果 + */ + @Log("删除接口回传设置表") + //@SaCheckPermission("@el.check(MdPbInterfaceback:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + mdPbInterfacebackService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/MdPbInterfaceback.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/MdPbInterfaceback.java new file mode 100644 index 0000000..8165374 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/MdPbInterfaceback.java @@ -0,0 +1,82 @@ +package org.nl.wms.md.dao; + +import java.io.Serializable; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; + + +/** + * {@code @Description:} 接口回传设置表(MdPbInterfaceback)实体类 + * {@code @Author:} gbx + * + * @since 2024-04-16 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("md_pb_interfaceback") +public class MdPbInterfaceback extends Model { + + private static final long serialVersionUID = -7739291296662381393L; + //@TableId(type = IdType.ASSIGN_ID) + + + /** + * 标识 + */ + private Long interface_id; + + + /** + * 类型 + */ + private String interface_type; + + + /** + * 接口名称 + */ + private String interface_name; + + + /** + * 接口描述 + */ + private String remark; + + + /** + * 是否回传 + */ + private String is_back; + + + /** + * 业务说明 + */ + private String business_comment; + + + /** + * 回传区域 + */ + private String product_area; + + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.interface_id; + } + +} + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/mapper/MdPbInterfacebackMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/mapper/MdPbInterfacebackMapper.java new file mode 100644 index 0000000..88e8d5f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/mapper/MdPbInterfacebackMapper.java @@ -0,0 +1,15 @@ +package org.nl.wms.md.dao.mapper; + +import org.nl.wms.md.dao.MdPbInterfaceback; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * {@code @Description:} 接口回传设置表(MdPbInterfaceback)数据持久层 + * {@code @Author:} gbx + * + * @since 2024-04-16 + */ +public interface MdPbInterfacebackMapper extends BaseMapper { + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/xml/MdPbInterfacebackMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/xml/MdPbInterfacebackMapper.xml new file mode 100644 index 0000000..54523b6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dao/xml/MdPbInterfacebackMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dto/MdPbInterfacebackDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dto/MdPbInterfacebackDto.java new file mode 100644 index 0000000..cc02c9a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dto/MdPbInterfacebackDto.java @@ -0,0 +1,57 @@ +package org.nl.wms.md.dto; + +import java.io.Serializable; + +import lombok.*; +import lombok.Data; +import lombok.Builder; + + +/** + * {@code @Description:} 接口回传设置表(MdPbInterfaceback)数据传输类 + * {@code @Author:} gbx + * + * @since 2024-04-16 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MdPbInterfacebackDto implements Serializable { + + private static final long serialVersionUID = -7739291296662381396L; + + + /** + * 标识 + */ + private Long interface_id; + /** + * 类型 + */ + private String interface_type; + /** + * 接口名称 + */ + private String interface_name; + /** + * 接口描述 + */ + private String remark; + /** + * 是否回传 + */ + private String is_back; + /** + * 业务说明 + */ + private String business_comment; + /** + * 回传区域 + */ + private String product_area; + +} + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dto/MdPbInterfacebackParam.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dto/MdPbInterfacebackParam.java new file mode 100644 index 0000000..76ebccd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/dto/MdPbInterfacebackParam.java @@ -0,0 +1,51 @@ +package org.nl.wms.md.dto; + + +import lombok.Data; +import lombok.*; +import lombok.EqualsAndHashCode; +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.md.dao.MdPbInterfaceback; + +/** + * {@code @Description:} 接口回传设置表(MdPbInterfaceback)查询参数类 + * {@code @Author:} gbx + * + * @since 2024-04-16 + */ +@Data +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class MdPbInterfacebackParam extends BaseQuery { + /** + * 标识 + */ + private Long interface_id; + /** + * 类型 + */ + private String interface_type; + /** + * 接口名称 + */ + private String interface_name; + /** + * 接口描述 + */ + private String remark; + /** + * 是否回传 + */ + private String is_back; + /** + * 业务说明 + */ + private String business_comment; + /** + * 回传区域 + */ + private String product_area; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/service/ImdPbInterfacebackService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/service/ImdPbInterfacebackService.java new file mode 100644 index 0000000..ee4ac45 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/service/ImdPbInterfacebackService.java @@ -0,0 +1,65 @@ +package org.nl.wms.md.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.md.dao.MdPbInterfaceback; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.md.dto.MdPbInterfacebackParam; + +import java.util.List; +import java.util.Map; +import java.util.Set; + + +/** + * {@code @Description:} 接口回传设置表(MdPbInterfaceback)服务接口层 + * {@code @Author:} gbx + * + * @since 2024-04-16 + */ +public interface ImdPbInterfacebackService extends IService { + + + /** + * 分页查询 + * + * @param whereJson 查询条件 + * @return IPage + */ + IPage query(Map whereJson, PageQuery page); + + /** + * 条件查询 + * + * @param params 查询条件 + * @return List + */ + List selectList(MdPbInterfacebackParam params); + + + /** + * 创建 + * + * @param params 对象实体 + */ + void create(MdPbInterfacebackParam params); + + + /** + * 编辑 + * + * @param params 对象实体 + */ + void update(MdPbInterfacebackParam params); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Set ids); + + +} + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/service/impl/MdPbInterfacebackServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/service/impl/MdPbInterfacebackServiceImpl.java new file mode 100644 index 0000000..2ebafd5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/md/service/impl/MdPbInterfacebackServiceImpl.java @@ -0,0 +1,144 @@ +package org.nl.wms.md.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.wms.md.dao.MdPbInterfaceback; +import org.nl.wms.md.dto.MdPbInterfacebackParam; +import org.nl.wms.md.dao.mapper.MdPbInterfacebackMapper; +import cn.hutool.core.util.ObjectUtil; +import org.nl.wms.md.service.ImdPbInterfacebackService; +import cn.hutool.core.date.DateUtil; +import org.nl.wms.storage_manage.ios.enums.IOSEnum; +import org.springframework.beans.BeanUtils; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.IdUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; + +import javax.annotation.Resource; +import java.util.Map; +import java.util.Set; +import java.util.List; + + +/** + * {@code @Description:} 接口回传设置表(MdPbInterfaceback)服务实现层 + * {@code @Author:} gbx + * + * @since 2024-04-16 + */ +@Service("mdPbInterfacebackService") +public class MdPbInterfacebackServiceImpl extends ServiceImpl implements ImdPbInterfacebackService { + + + @Resource + private MdPbInterfacebackMapper mdPbInterfacebackMapper; + + + /** + * 查询数据分页 + * + * @param whereJson 查询条件 + * @param page 分页参数 + */ + @Override + public IPage query(Map whereJson, PageQuery page) { + IPage resultPage = new Page<>(page.getPage(), page.getSize()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + // if (whereJson.containsKey("name")) { + // queryWrapper.like(MdPbInterfaceback::getName, whereJson.get("name")); + // } + //queryWrapper.eq(MdPbInterfaceback::getIs_delete,IOSEnum.IS_NOTANDYES.code("否")); + //queryWrapper.orderByDesc(MdPbInterfaceback::getName); + return mdPbInterfacebackMapper.selectPage(resultPage, queryWrapper); + } + + /** + * 根据条件查询 + * + * @param params 查询条件 + */ + @Override + public List selectList(MdPbInterfacebackParam params) { + return mdPbInterfacebackMapper.selectList(new QueryWrapper() + .lambda() + //.eq(ObjectUtil.isNotEmpty(params), MdPbInterfaceback::getId, params.getFuzzy()) + //.or() + //.eq(ObjectUtil.isNotEmpty(params), MdPbInterfaceback::getDjid, params.getFuzzy()) + ); + } + + + /** + * 创建 + * + * @param params 对象实体 + */ + @Override + public void create(MdPbInterfacebackParam params) { + mdPbInterfacebackMapper.insert(getBasicInfo(params, true)); + } + + + /** + * 编辑 + * + * @param params 对象实体 + */ + @Override + public void update(MdPbInterfacebackParam params) { + // MdPbInterfaceback dto = mdPbInterfacebackMapper.selectById(params.getId()); + // if (dto == null) { + // throw new BadRequestException("不存在该数据!"); + // } + mdPbInterfacebackMapper.updateById(getBasicInfo(params, false)); + } + + + /** + * 多选删除 + * + * @param ids 多个Id主键 + */ + @Override + public void deleteAll(Set ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("is_delete", IOSEnum.IS_NOTANDYES.code("是")) + //.set("update_optid", SecurityUtils.getCurrentUserId()) + //.set("update_optname", SecurityUtils.getCurrentNickName()) + //.set("update_time", DateUtil.now()) + .in("id", ids); + mdPbInterfacebackMapper.update(null, updateWrapper); + //mdPbInterfacebackMapper.deleteBatchIds(ids); + } + + + /** + * 获取实体基础信息 + * + * @param params 对象实体 + * @param isCreate 是否创建 + */ + private MdPbInterfaceback getBasicInfo(MdPbInterfacebackParam params, boolean isCreate) { + // if (isCreate) { + // params.setId(IdUtil.getStringId()); + // params.setCreate_id(Long.valueOf(SecurityUtils.getCurrentUserId())); + // params.setCreate_name(SecurityUtils.getCurrentNickName()); + // params.setCreate_time(DateUtil.now()); + // params.setIs_delete(IOSEnum.IS_NOTANDYES.code("否")); + // } + // params.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + // params.setUpdate_optname(SecurityUtils.getCurrentNickName()); + // params.setUpdate_time(DateUtil.now()); + MdPbInterfaceback mdPbInterfaceback = new MdPbInterfaceback(); + BeanUtils.copyProperties(params, mdPbInterfaceback); + return mdPbInterfaceback; + } + + +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/controller/PdmBiSlittingproductionplanController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/controller/PdmBiSlittingproductionplanController.java index 90e47ad..e0bf906 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/controller/PdmBiSlittingproductionplanController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/controller/PdmBiSlittingproductionplanController.java @@ -3,6 +3,7 @@ package org.nl.wms.pdm.bi.controller; import java.util.Set; import java.util.Map; +import com.alibaba.fastjson.JSONObject; import org.nl.common.base.TableDataInfo; import org.springframework.web.bind.annotation.*; import lombok.RequiredArgsConstructor; @@ -104,5 +105,45 @@ public class PdmBiSlittingproductionplanController { } + @Log("上料完成") + + @PostMapping("/upMaterFinish") + public ResponseEntity upMaterFinish(@RequestBody JSONObject whereJson) { + pdmBiSlittingproductionplanService.upMaterFinish(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("套管完成") + + @PostMapping("/caseFinish") + public ResponseEntity caseFinish(@RequestBody JSONObject whereJson) { + pdmBiSlittingproductionplanService.caseFinish(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("配送完成") + + @PostMapping("/sendFinish") + public ResponseEntity sendFinish(@RequestBody JSONObject whereJson) { + pdmBiSlittingproductionplanService.sendFinish(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("入站完成") + + @PostMapping("/inFinish") + public ResponseEntity inFinish(@RequestBody JSONObject whereJson) { + pdmBiSlittingproductionplanService.inFinish(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("强制完成") + + @PostMapping("/compelFinish") + public ResponseEntity compelFinish(@RequestBody JSONObject whereJson) { + pdmBiSlittingproductionplanService.compelFinish(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/dao/PdmBiSlittingproductionplan.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/dao/PdmBiSlittingproductionplan.java index 3cc9f48..d9fe80b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/dao/PdmBiSlittingproductionplan.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/dao/PdmBiSlittingproductionplan.java @@ -29,7 +29,7 @@ public class PdmBiSlittingproductionplan extends Model ids); + /** + * 上料完成 + * + * @param whereJson / + */ + void upMaterFinish(JSONObject whereJson); + + /** + * 套管完成 + * + * @param whereJson / + */ + void caseFinish(JSONObject whereJson); + + /** + * 配送完成 + * + * @param whereJson / + */ + void sendFinish(JSONObject whereJson); + + /** + * 入站完成 + * + * @param whereJson / + */ + void inFinish(JSONObject whereJson); + + /** + * 强制完成 + * + * @param whereJson / + */ + void compelFinish(JSONObject whereJson); + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiRawfoilworkorderServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiRawfoilworkorderServiceImpl.java index 9a494c2..56f7a5a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiRawfoilworkorderServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiRawfoilworkorderServiceImpl.java @@ -1,10 +1,12 @@ package org.nl.wms.pdm.bi.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.apache.commons.lang3.StringUtils; import org.nl.common.enums.WorkOrderStatusEnum; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.IdUtil; @@ -17,6 +19,10 @@ import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; import cn.hutool.core.date.DateUtil; import org.nl.wms.pdm.ivt.dao.StIvtSbpointivt; import org.nl.wms.pdm.ivt.dao.mapper.StIvtSbpointivtMapper; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper; +import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; import org.nl.wms.storage_manage.ios.enums.IOSEnum; import org.springframework.beans.BeanUtils; import org.nl.common.utils.SecurityUtils; @@ -28,10 +34,13 @@ import org.nl.common.domain.query.PageQuery; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Set; +import static org.nl.common.enums.WorkOrderStatusEnum.PRODUCT_STATUS; + /** * {@code @Description:} 生箔工序工单(PdmBiRawfoilworkorder)服务实现层 @@ -50,7 +59,8 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl().eq(PdmBiRawfoilworkorder::getContainer_name, params.getCreate_name()).ne(PdmBiRawfoilworkorder::getStatus, WorkOrderStatusEnum.PRODUCT_STATUS.code("结束"))); + PdmBiRawfoilworkorder pdmBiRawfoilworkorder = pdmBiRawfoilworkorderMapper.selectOne(new LambdaQueryWrapper().eq(PdmBiRawfoilworkorder::getContainer_name, params.getCreate_name()).ne(PdmBiRawfoilworkorder::getStatus, PRODUCT_STATUS.code("结束"))); if (pdmBiRawfoilworkorder != null) { throw new BadRequestException("母卷号已存在"); } @@ -182,7 +192,7 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl taskList = schBaseTaskMapper.selectList(new LambdaQueryWrapper().eq(SchBaseTask::getMaterial_code, whereJson.getString("container_name")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")).ne(SchBaseTask::getTask_status, TaskStatus.FINISHED)); + if (CollectionUtil.isNotEmpty(taskList)) { + throw new BadRequestException("该生箔工单存在未完成的任务,请先完成任务!"); + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("status", WorkOrderStatusEnum.PRODUCT_STATUS.code("结束")); + updateWrapper.set("finish_type", WorkOrderStatusEnum.FINISH_TYPE.code("手动")); + updateWrapper.set("update_optid", SecurityUtils.getCurrentUserId()); + updateWrapper.set("update_optname", SecurityUtils.getCurrentUsername()); + updateWrapper.set("realend_time", DateUtil.now()); + updateWrapper.set("update_time", DateUtil.now()); + updateWrapper.eq("workorder_id", whereJson.getString("workorder_id")); + pdmBiRawfoilworkorderMapper.update(null, updateWrapper); + } + @Override @Transactional(rollbackFor = Exception.class) public void confirm(JSONObject whereJson) { -// WQLObject tab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); -// String productin_qty = whereJson.getString("productin_qty"); -// -// JSONObject jsonRaw = tab.query("workorder_id = '" + whereJson.getString("workorder_id") + "'").uniqueResult(0); -// if (ObjectUtil.isEmpty(productin_qty)) { -// jsonRaw.put("productin_qty", 0); -// } else { -// jsonRaw.put("productin_qty", whereJson.getDoubleValue("productin_qty")); -// } -// tab.update(jsonRaw); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + BigDecimal productinQty = whereJson.containsKey("productin_qty") && StringUtils.isNotEmpty(whereJson.getString("productin_qty")) ? + new BigDecimal(whereJson.getString("productin_qty")) : BigDecimal.ZERO; + updateWrapper.set("productin_qty", productinQty); + updateWrapper.set("update_optid", SecurityUtils.getCurrentUserId()); + updateWrapper.set("update_optname", SecurityUtils.getCurrentUsername()); + updateWrapper.set("update_time", DateUtil.now()); + updateWrapper.eq("workorder_id", whereJson.getString("workorder_id")); + pdmBiRawfoilworkorderMapper.update(null, updateWrapper); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiSlittingproductionplanServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiSlittingproductionplanServiceImpl.java index 2f3354b..7ec768a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiSlittingproductionplanServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiSlittingproductionplanServiceImpl.java @@ -1,12 +1,18 @@ package org.nl.wms.pdm.bi.service.impl; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.apache.commons.lang3.StringUtils; import org.nl.common.enums.WorkOrderStatusEnum; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.IdUtil; import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan; import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan; +import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan; import org.nl.wms.pdm.bi.dto.PdmBiSlittingproductionplanParam; import org.nl.wms.pdm.bi.dao.mapper.PdmBiSlittingproductionplanMapper; import cn.hutool.core.util.ObjectUtil; @@ -20,11 +26,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.nl.common.domain.query.PageQuery; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.math.BigDecimal; +import java.util.*; /** @@ -127,10 +133,10 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl workorderIds = new HashSet<>(); + for (int i = 0; i < data.size(); i++) { + JSONObject json = data.getJSONObject(i); + String id = json.getString("workorder_id"); + workorderIds.add(id); + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("status", WorkOrderStatusEnum.PRODUCT_STATUS.code("结束")); + updateWrapper.set("end_time", DateUtil.now()); + updateWrapper.set("update_optid", SecurityUtils.getCurrentUserId()); + updateWrapper.set("update_optname", SecurityUtils.getCurrentUsername()); + updateWrapper.set("update_time", DateUtil.now()); + updateWrapper.in("workorder_id", workorderIds); + pdmBiSlittingproductionplanMapper.update(null, updateWrapper); + + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/controller/StIvtCoolpointivtController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/controller/StIvtCoolpointivtController.java index d3d588b..656f21d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/controller/StIvtCoolpointivtController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/controller/StIvtCoolpointivtController.java @@ -3,6 +3,7 @@ package org.nl.wms.pdm.ivt.controller; import java.util.Set; import java.util.Map; +import com.alibaba.fastjson.JSONObject; import org.nl.common.base.TableDataInfo; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; @@ -61,7 +62,7 @@ public class StIvtCoolpointivtController { } @GetMapping("/coolRegionIOQueryAll") - @Log("冷却区出入表") + @Log("冷却区 出入表") //@SaCheckPermission("@el.check('stIvtCoolpointivt:list')") public ResponseEntity coolRegionIOQueryAll(@RequestParam Map whereJson, Pageable page) { // return new ResponseEntity<>(stIvtCoolpointivtService.coolRegionIOQueryAll(whereJson, page), HttpStatus.OK); @@ -112,6 +113,11 @@ public class StIvtCoolpointivtController { return new ResponseEntity<>(HttpStatus.OK); } - + @PostMapping("/uploadMes") + @Log("手动回传MES") + public ResponseEntity uploadMes(@RequestBody JSONObject form) { + //stIvtCoolpointivtService.uploadMes(form); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtCoolpointivt.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtCoolpointivt.java index e2ed341..b412d96 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtCoolpointivt.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtCoolpointivt.java @@ -155,7 +155,7 @@ public class StIvtCoolpointivt extends Model { /** * 修改人 */ - private Long update_optid; + private String update_optid; /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtCoolregionio.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtCoolregionio.java index d41af21..4d2dcaa 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtCoolregionio.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtCoolregionio.java @@ -46,7 +46,7 @@ public class StIvtCoolregionio extends Model { /** * 物料标识 */ - private Long material_id; + private String material_id; /** @@ -94,7 +94,7 @@ public class StIvtCoolregionio extends Model { /** * 客户标识 */ - private Long cust_id; + private String cust_id; /** @@ -106,7 +106,7 @@ public class StIvtCoolregionio extends Model { /** * 任务标识 */ - private Long task_id; + private String task_id; /** @@ -118,7 +118,7 @@ public class StIvtCoolregionio extends Model { /** * 创建人 */ - private Long create_id; + private String create_id; /** @@ -137,7 +137,7 @@ public class StIvtCoolregionio extends Model { /** * 修改人 */ - private Long update_optid; + private String update_optid; /** @@ -156,7 +156,7 @@ public class StIvtCoolregionio extends Model { /** * 确认人 */ - private Long confirm_optid; + private String confirm_optid; /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtHotpointivt.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtHotpointivt.java index 6dc7d58..90a5992 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtHotpointivt.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dao/StIvtHotpointivt.java @@ -149,7 +149,7 @@ public class StIvtHotpointivt extends Model { /** * 修改人 */ - private Long update_optid; + private String update_optid; /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dto/StIvtCoolregionioParam.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dto/StIvtCoolregionioParam.java index 832d8a7..e93e811 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dto/StIvtCoolregionioParam.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/dto/StIvtCoolregionioParam.java @@ -25,7 +25,7 @@ public class StIvtCoolregionioParam extends BaseQuery { /** * 出入单标识 */ - private Long iostorinv_id; + private String iostorinv_id; /** * 单据编号 */ diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/IstIvtCoolregionioService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/IstIvtCoolregionioService.java index 28e28d7..a0b76d1 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/IstIvtCoolregionioService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/IstIvtCoolregionioService.java @@ -60,6 +60,14 @@ public interface IstIvtCoolregionioService extends IService { void deleteAll(Set ids); + /** + * 物理删除 + * + * @param id 主键 + */ + void delete(String id); + + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/IstIvtHotregioniomstService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/IstIvtHotregioniomstService.java index 43df0ad..877068f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/IstIvtHotregioniomstService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/IstIvtHotregioniomstService.java @@ -59,6 +59,12 @@ public interface IstIvtHotregioniomstService extends IService ids); + /** + * 物理删除 + * + * @param id 主键 + */ + void delete(String id); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtCoolpointivtServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtCoolpointivtServiceImpl.java index da55b17..18a3522 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtCoolpointivtServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtCoolpointivtServiceImpl.java @@ -3,6 +3,7 @@ package org.nl.wms.pdm.ivt.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; import org.nl.wms.pdm.ivt.dao.StIvtCoolpointivt; import org.nl.wms.pdm.ivt.dto.StIvtCoolpointivtParam; import org.nl.wms.pdm.ivt.dao.mapper.StIvtCoolpointivtMapper; @@ -49,11 +50,37 @@ public class StIvtCoolpointivtServiceImpl extends ServiceImpl query(Map whereJson, PageQuery page) { IPage resultPage = new Page<>(page.getPage(), page.getSize()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - // if (whereJson.containsKey("name")) { - // queryWrapper.like(StIvtCoolpointivt::getName, whereJson.get("name")); - // } - //queryWrapper.eq(StIvtCoolpointivt::getIs_delete,IOSEnum.IS_NOTANDYES.code("否")); - //queryWrapper.orderByDesc(StIvtCoolpointivt::getName); + if (whereJson.containsKey("product_area")) { + queryWrapper.eq(StIvtCoolpointivt::getProduct_area, whereJson.get("product_area")); + } + if (whereJson.containsKey("point_code")) { + queryWrapper.like(StIvtCoolpointivt::getPoint_code, whereJson.get("point_code")); + } + if (whereJson.containsKey("container_name")) { + queryWrapper.like(StIvtCoolpointivt::getContainer_name, whereJson.get("container_name")); + } + if (whereJson.containsKey("full_point_status")) { + queryWrapper.eq(StIvtCoolpointivt::getFull_point_status, whereJson.get("full_point_status")); + } + if (whereJson.containsKey("empty_point_status")) { + queryWrapper.eq(StIvtCoolpointivt::getEmpty_point_status, whereJson.get("empty_point_status")); + } + if (whereJson.containsKey("cool_ivt_status")) { + queryWrapper.eq(StIvtCoolpointivt::getCool_ivt_status, whereJson.get("cool_ivt_status")); + } + if (whereJson.containsKey("is_used")) { + queryWrapper.eq(StIvtCoolpointivt::getIs_used, whereJson.get("is_used")); + } + if (whereJson.containsKey("begin_time")) { + queryWrapper.le(StIvtCoolpointivt::getInstorage_time, whereJson.get("begin_time")); + } + if (whereJson.containsKey("end_time")) { + queryWrapper.ge(StIvtCoolpointivt::getInstorage_time, whereJson.get("end_time")); + } + if (whereJson.containsKey("point_location")) { + queryWrapper.eq(StIvtCoolpointivt::getPoint_location, whereJson.get("point_location")); + } + queryWrapper.orderByDesc(StIvtCoolpointivt::getPoint_code); return stIvtCoolpointivtMapper.selectPage(resultPage, queryWrapper); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtCoolregionioServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtCoolregionioServiceImpl.java index 0418c8f..8078cca 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtCoolregionioServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtCoolregionioServiceImpl.java @@ -3,6 +3,7 @@ package org.nl.wms.pdm.ivt.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.exception.BadRequestException; import org.nl.wms.pdm.ivt.dao.StIvtCoolregionio; import org.nl.wms.pdm.ivt.dto.StIvtCoolregionioParam; import org.nl.wms.pdm.ivt.dao.mapper.StIvtCoolregionioMapper; @@ -91,10 +92,10 @@ public class StIvtCoolregionioServiceImpl extends ServiceImpl().eq(StIvtCoolregionio::getTask_id,id)); + } + + /** @@ -123,16 +135,16 @@ public class StIvtCoolregionioServiceImpl extends ServiceImpl().eq(StIvtHotregioniomst::getTask_id,id)); + } + /** * 获取实体基础信息 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtSbpointivtServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtSbpointivtServiceImpl.java index c007c74..9727054 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtSbpointivtServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/service/impl/StIvtSbpointivtServiceImpl.java @@ -3,6 +3,7 @@ package org.nl.wms.pdm.ivt.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; import org.nl.wms.pdm.ivt.dao.StIvtSbpointivt; import org.nl.wms.pdm.ivt.dto.StIvtSbpointivtParam; import org.nl.wms.pdm.ivt.dao.mapper.StIvtSbpointivtMapper; @@ -49,11 +50,19 @@ public class StIvtSbpointivtServiceImpl extends ServiceImpl query(Map whereJson, PageQuery page) { IPage resultPage = new Page<>(page.getPage(), page.getSize()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - // if (whereJson.containsKey("name")) { - // queryWrapper.like(StIvtSbpointivt::getName, whereJson.get("name")); - // } - //queryWrapper.eq(StIvtSbpointivt::getIs_delete,IOSEnum.IS_NOTANDYES.code("否")); - //queryWrapper.orderByDesc(StIvtSbpointivt::getName); + if (whereJson.containsKey("point_code")) { + queryWrapper.like(StIvtSbpointivt::getPoint_code, whereJson.get("point_code")); + } + if (whereJson.containsKey("product_area")) { + queryWrapper.eq(StIvtSbpointivt::getProduct_area, whereJson.get("product_area")); + } + if (whereJson.containsKey("is_used")) { + queryWrapper.eq(StIvtSbpointivt::getIs_used, whereJson.get("is_used")); + } + if (whereJson.containsKey("mes_used")) { + queryWrapper.eq(StIvtSbpointivt::getMes_used, whereJson.get("mes_used")); + } + queryWrapper.orderByDesc(StIvtSbpointivt::getPoint_code); return stIvtSbpointivtMapper.selectPage(resultPage, queryWrapper); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java index 660e2b5..a340fc9 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java @@ -144,4 +144,7 @@ public class SchBaseTask implements Serializable { @TableField(exist = false) private String dtl_type; + private String material_code; + + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index fa69cfc..45472a6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -175,11 +175,11 @@ public abstract class AbstractTask { /** * 更新任务状态,暴露给外围使用 - * @param task_code 任务编码 + * @param taskObj 任务信息 * @param status 状态 */ - public void updateTaskStatus(String task_code, TaskStatus status) { - this.updateStatus(task_code, status); + public void updateTaskStatus(JSONObject taskObj, TaskStatus status) { + this.updateStatus(taskObj, status); } @@ -194,10 +194,10 @@ public abstract class AbstractTask { * 修改状态 * 以下改为public会出现自动注入类出现问题 * - * @param task_code / - * @param status / + * @param taskObj 任务信息 + * @param status 状态 */ - protected abstract void updateStatus(String task_code, TaskStatus status); + public abstract void updateStatus(JSONObject taskObj, TaskStatus status); /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/CallEmpReelTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/CallEmpReelTask.java index 98fc27e..9b1a3a3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/CallEmpReelTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/CallEmpReelTask.java @@ -1,15 +1,35 @@ package org.nl.wms.sch.task_manage.task.second_floor_area; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.*; +import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.exception.BadRequestException; import org.nl.config.language.LangProcess; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.wms.basedata.material.dao.MdMeMaterialbase; +import org.nl.wms.basedata.material.service.ImdMeMaterialbaseService; +import org.nl.wms.md.service.ImdPbInterfacebackService; +import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; +import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; +import org.nl.wms.pdm.bi.service.IpdmBiSlittingproductionplanService; +import org.nl.wms.pdm.ivt.dao.StIvtCoolpointivt; +import org.nl.wms.pdm.ivt.dao.StIvtCoolregionio; +import org.nl.wms.pdm.ivt.dao.StIvtSbpointivt; +import org.nl.wms.pdm.ivt.service.*; +import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task_manage.AbstractTask; @@ -22,6 +42,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.Map; @@ -36,12 +57,42 @@ import java.util.Map; public class CallEmpReelTask extends AbstractTask { private final String THIS_CLASS = CallEmpReelTask.class.getName(); + + @Resource private ISchBaseTaskService taskService; + + + @Resource + private ISysDictService sysDictService; + + + + @Resource + private IstIvtCoolpointivtService stIvtCoolpointivtService; + + + @Resource + private IstIvtCoolregionioService stIvtCoolRegionIoService; + + + @Resource + private IpdmBiRawfoilworkorderService pdmBiRawfoilworkorderService; + + + @Resource + private IstIvtSbpointivtService stIvtSbpointivtService; + + + @Resource + private ImdMeMaterialbaseService mdMeMaterialbaseService; + + /** * 特殊操作 - * @param task LMS任务 + * + * @param task LMS任务 * @param acsTaskDto ACS任务 */ @Override @@ -57,37 +108,6 @@ public class CallEmpReelTask extends AbstractTask { } - @Override - @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_code, task_code), false); - if (schBaseTask == null) { - throw new BadRequestException("CallEmpReelTask任务更新接口任务号为空"); - } - // 执行中 - if (TaskStatus.EXECUTING.getCode().equals(status.getCode())) { - // 更新任务状态为执行中 - schBaseTask.setTask_status(TaskStatus.EXECUTING.getCode()); - } - // 完成 - if (StrUtil.equals(status.getCode(), TaskStatus.FINISHED.getCode())) { - // 更新任务状态为执行中 - schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); - } - // 取消 - if (status.getCode().equals(IOSEnum.IS_NOTANDYES.code("否"))) { - if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatus.ISSUE.getCode())) { - throw new BadRequestException("CallEmpReelTask任务已执行不能取消"); - } - // 更新任务表删除字段 - schBaseTask.setIs_delete(true); - } - TaskUtils.setUpdateByDefault(schBaseTask); - taskService.updateById(schBaseTask); - } - - @Override public void createCompletion(SchBaseTask task) { Assert.notNull(task, "请求参数不能为空"); @@ -107,23 +127,248 @@ public class CallEmpReelTask extends AbstractTask { if (StrUtil.isBlank(pointCode2)) { throw new BadRequestException("下一点不能为空"); } - //是否立即下发 - boolean isSend = !StrUtil.isNotBlank(task.getIs_send()) || BooleanUtil.toBoolean(task.getIs_send()); - task.setTask_id(IdUtil.getSnowflake(1,1).nextIdStr()); - task.setTask_code(IdUtil.getSnowflake(1,1).nextIdStr()); + if (isSingleTask(pointCode1)) { + throw new BadRequestException("点位:" + pointCode1 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode2)) { + throw new BadRequestException("点位:" + pointCode2 + "存在未完成的任务!"); + } + if (isSingleTask(task.getPoint_code3())) { + throw new BadRequestException("点位:" + task.getPoint_code3() + "存在未完成的任务!"); + } + if (isSingleTask(task.getPoint_code4())) { + throw new BadRequestException("点位:" + task.getPoint_code4() + "存在未完成的任务!"); + } + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); task.setHandle_class(THIS_CLASS); + task.setTask_status(StrUtil.isBlank(task.getTask_status()) ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status()); + task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code())? "A1" : task.getWorkshop_code()); + Dict dict = sysDictService.getOne(new LambdaQueryWrapper() + .eq(Dict::getCode, "task_priority") + .eq(Dict::getLabel, task.getTask_type())); + task.setPriority(dict == null ? "1" : dict.getValue()); + boolean isSend = StrUtil.isBlank(task.getIs_send()) || BooleanUtil.toBoolean(task.getIs_send()); task.setIs_send(isSend ? "1" : "0"); - task.setTask_status(StrUtil.isEmpty(task.getTask_status()) - ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status()); - task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code()) ? "A1" : task.getWorkshop_code()); TaskUtils.setCreateByDefault(task); + if (StrUtil.equals(task.getTask_type(), "1")) { + if (isSingleTask(task.getPoint_code1()) || isSingleTask(task.getPoint_code3())) { + throw new BadRequestException("点位:" + (isSingleTask(task.getPoint_code1()) ? task.getPoint_code1() : task.getPoint_code3()) + "存在未完成的任务!"); + } + task.setTask_type("010201"); + task.setAcs_task_type(PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + // 更新对应点位库存为已裹膜 + StIvtCoolpointivt coolIvtToUpdate = stIvtCoolpointivtService.getOne(new LambdaQueryWrapper() + .eq(StIvtCoolpointivt::getFull_point_code, task.getPoint_code1()), false); + if (ObjectUtil.isEmpty(coolIvtToUpdate)) { + throw new BadRequestException("未查询到对应的冷却区点位!"); + } + coolIvtToUpdate.setCool_ivt_status("02"); + stIvtCoolpointivtService.updateById(coolIvtToUpdate); + } else if (StrUtil.equals(task.getTask_type(), "2")) { + if (isSingleTask(task.getPoint_code1()) || isSingleTask(task.getPoint_code2())) { + throw new BadRequestException("点位:" + (isSingleTask(task.getPoint_code1()) ? task.getPoint_code1() : task.getPoint_code2()) + "存在未完成的任务!"); + } + task.setTask_type("010203"); + task.setAcs_task_type(PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + } taskService.save(task); - //如果目标点位没有空位先创建不下发 - if (isSend) { + // 如果需要立即下发 + if (BooleanUtil.toBoolean(task.getIs_send())) { this.renotifyAcs(task); } } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(JSONObject taskObj, TaskStatus status) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务更新接口任务号为空!"); + } + //更新车号和重量 + String carNo = taskObj.getString("car_no"); + if (ObjectUtil.isNotEmpty(carNo)) { + PdmBiRawfoilworkorder jsonRaw = pdmBiRawfoilworkorderService.getOne(new QueryWrapper() + .eq("container_name", schBaseTask.getMaterial_code()) + .ne("status", "09") + .eq("is_delete", "0") + ); + if (jsonRaw != null) { + jsonRaw.setAgvno(carNo); + pdmBiRawfoilworkorderService.updateById(jsonRaw); + } + } + // 更新生箔工单称重信息 + String weight = taskObj.getString("weight"); + if (ObjectUtil.isNotEmpty(weight)) { + PdmBiRawfoilworkorder jsonRaw = pdmBiRawfoilworkorderService.getOne(new QueryWrapper() + .eq("container_name", schBaseTask.getMaterial_code()) + .ne("status", "09") + .eq("is_delete", "0") + ); + if (jsonRaw != null) { + jsonRaw.setProductin_qty(new BigDecimal(weight)); + pdmBiRawfoilworkorderService.updateById(jsonRaw); + } + } + if (status.getCode().equals(IOSEnum.IS_NOTANDYES.code("否"))) { + // 更新删除字段 + schBaseTask.setIs_delete(true); + schBaseTask.setUpdate_time(DateUtil.now()); + taskService.updateById(schBaseTask); + // 更新生箔工单状态为开始、清除称重信息 + PdmBiRawfoilworkorder jsonRaw = pdmBiRawfoilworkorderService.getOne(new QueryWrapper() + .eq("container_name", schBaseTask.getMaterial_code()) + .ne("status", "09") + .eq("is_delete", "0") + ); + if (jsonRaw != null) { + jsonRaw.setStatus("01"); + jsonRaw.setProductin_qty(BigDecimal.ZERO); + pdmBiRawfoilworkorderService.updateById(jsonRaw); + } + } + // 执行中 + if (TaskStatus.EXECUTING.getCode().equals(status.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.EXECUTING.getCode()); + } + // 完成 + if (StrUtil.equals(status.getCode(), TaskStatus.FINISHED.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + String pointCode1 = schBaseTask.getPoint_code1(); + String pointCode2 = schBaseTask.getPoint_code2(); + String pointCode3 = schBaseTask.getPoint_code3(); + String pointCode4 = schBaseTask.getPoint_code4(); + PdmBiRawfoilworkorder jsonRaw = pdmBiRawfoilworkorderService.getOne(new QueryWrapper() + .eq("container_name", schBaseTask.getMaterial_code()) + .ne("status", "09") + .eq("is_delete", "0") + ); + + // 判断是两个点位的任务还是四个点位的任务 + if (ObjectUtil.isEmpty(pointCode3)) { + // 判断是取满 or 取空 :取满起点是生箔区域、取空起点是冷却区域 + StIvtSbpointivt jsonSbIvt = stIvtSbpointivtService.getOne(new QueryWrapper() + .eq("point_code", pointCode1.substring(0, pointCode1.length() - 2)) + ); + if (ObjectUtil.isNotEmpty(jsonSbIvt)) { + // 取满 + StIvtCoolpointivt jsonCoolIvt = stIvtCoolpointivtService.getOne(new QueryWrapper() + .eq("full_point_code", pointCode2) + ); + // 更新库存状态 + if (jsonCoolIvt != null) { + jsonCoolIvt.setFull_point_status("02"); + jsonCoolIvt.setInstorage_time(DateUtil.now()); + jsonCoolIvt.setContainer_name(jsonRaw.getContainer_name()); + jsonCoolIvt.setWorkorder_id(jsonRaw.getWorkorder_id()); + jsonCoolIvt.setIvt_qty(jsonRaw.getProductin_qty()); + stIvtCoolpointivtService.updateById(jsonCoolIvt); + } + // 更新母卷工单状态 + pdmBiRawfoilworkorderService.update(Wrappers.lambdaUpdate() + .set(PdmBiRawfoilworkorder::getStatus, "09") + .set(PdmBiRawfoilworkorder::getRealend_time, DateUtil.now()) + .set(PdmBiRawfoilworkorder::getUpdate_optid, SecurityUtils.getCurrentUserId()) + .set(PdmBiRawfoilworkorder::getUpdate_optname, SecurityUtils.getCurrentUsername()) + .set(PdmBiRawfoilworkorder::getFinish_type, "01") + .set(PdmBiRawfoilworkorder::getUpdate_time, DateUtil.now()) + .eq(PdmBiRawfoilworkorder::getContainer_name, schBaseTask.getMaterial_code()) + ); + } else { + // 取空 + StIvtCoolpointivt jsonCoolIvt = stIvtCoolpointivtService.getOne(new QueryWrapper() + .eq("empty_point_code", pointCode1) + ); + if (jsonCoolIvt != null) { + jsonCoolIvt.setEmpty_point_status("01"); + jsonCoolIvt.setEmpty_vehicle_code(""); + stIvtCoolpointivtService.updateById(jsonCoolIvt); + } + } + } else { + // 取满放空 + // 校验起点是否存在 + StIvtCoolpointivt jsonIvt = stIvtCoolpointivtService.getOne(new QueryWrapper() + .eq("empty_point_code", pointCode1) + ); + if (jsonIvt == null) { + throw new BadRequestException("未找到可用点位:" + pointCode1); + } + // 更新冷却库存状态 + jsonIvt.setEmpty_point_status("01"); + jsonIvt.setEmpty_vehicle_code(""); + stIvtCoolpointivtService.updateById(jsonIvt); + // 校验终点是否存在 + StIvtCoolpointivt jsonIvt2 = stIvtCoolpointivtService.getOne(new QueryWrapper() + .eq("full_point_code", pointCode4) + ); + if (jsonIvt2 == null) { + throw new BadRequestException("终点未找到可用点位:" + pointCode2); + } + // 更新工单状态为完成 + pdmBiRawfoilworkorderService.update(Wrappers.lambdaUpdate() + .set(PdmBiRawfoilworkorder::getStatus, "09") + .set(PdmBiRawfoilworkorder::getRealend_time, DateUtil.now()) + .set(PdmBiRawfoilworkorder::getUpdate_optid, SecurityUtils.getCurrentUserId()) + .set(PdmBiRawfoilworkorder::getUpdate_optname, SecurityUtils.getCurrentUsername()) + .set(PdmBiRawfoilworkorder::getFinish_type, "01") + .set(PdmBiRawfoilworkorder::getUpdate_time, DateUtil.now()) + .eq(PdmBiRawfoilworkorder::getContainer_name, schBaseTask.getMaterial_code()) + ); + // 更新冷却库存状态 + jsonIvt2.setFull_point_status("02"); + jsonIvt2.setInstorage_time(DateUtil.now()); + jsonIvt2.setContainer_name(jsonRaw.getContainer_name()); + jsonIvt2.setWorkorder_id(jsonRaw.getWorkorder_id()); + jsonIvt2.setIvt_qty(jsonRaw.getProductin_qty()); + jsonIvt2.setCool_ivt_status("01"); + stIvtCoolpointivtService.updateById(jsonIvt2); + // 插入入库单 + MdMeMaterialbase jsonMater = mdMeMaterialbaseService.getOne(new QueryWrapper() + .eq("material_code", jsonRaw.getProduct_name()) + ); + if (jsonMater == null) { + throw new BadRequestException("产品不存在"); + } + StIvtCoolregionio jsonRegion = new StIvtCoolregionio(); + jsonRegion.setIostorinv_id(IdUtil.getSnowflake(1, 1).nextId()); + jsonRegion.setBill_code(CodeUtil.getNewCode("COOLREGION_BILL_CODE")); + jsonRegion.setIo_type("0"); + jsonRegion.setMaterial_id(jsonMater.getMaterial_id()); + jsonRegion.setPcsn(jsonRaw.getContainer_name()); + jsonRegion.setVehicle_code(""); + jsonRegion.setQty(jsonRaw.getProductin_qty()); + //todo 物料单位是否需要 + //jsonRegion.setQty_unit_id(jsonMater.getQty_unit_id()); + jsonRegion.setBill_status("50"); + jsonRegion.setStart_point_code(pointCode2); + jsonRegion.setEnd_point_code(pointCode4); + jsonRegion.setCust_id(""); + jsonRegion.setCreate_mode("03"); + jsonRegion.setTask_id(taskObj.getString("task_code")); + jsonRegion.setCreate_id(SecurityUtils.getCurrentUserId()); + jsonRegion.setCreate_name(SecurityUtils.getCurrentUsername()); + jsonRegion.setCreate_time(DateUtil.now()); + jsonRegion.setUpdate_optid(SecurityUtils.getCurrentUserId()); + jsonRegion.setUpdate_optname(SecurityUtils.getCurrentUsername()); + jsonRegion.setUpdate_time(DateUtil.now()); + jsonRegion.setConfirm_optid(SecurityUtils.getCurrentUserId()); + jsonRegion.setConfirm_optname(SecurityUtils.getCurrentUsername()); + jsonRegion.setConfirm_time(DateUtil.now()); + stIvtCoolRegionIoService.save(jsonRegion); + } + } + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + @Override public void forceFinish(String taskId) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() @@ -148,5 +393,21 @@ public class CallEmpReelTask extends AbstractTask { taskService.updateById(schBaseTask); } + public boolean isSingleTask(String point_code) { + return taskService.getOne(new LambdaQueryWrapper() + .and(wrapper -> wrapper + .eq(SchBaseTask::getPoint_code1, point_code) + .or() + .eq(SchBaseTask::getPoint_code2, point_code) + .or() + .eq(SchBaseTask::getPoint_code3, point_code) + .or() + .eq(SchBaseTask::getPoint_code4, point_code) + ) + .lt(SchBaseTask::getTask_status, "07") + .eq(SchBaseTask::getIs_delete, "0") + ) != null; + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/CoolCutTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/CoolCutTask.java new file mode 100644 index 0000000..5fb9536 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/CoolCutTask.java @@ -0,0 +1,387 @@ +package org.nl.wms.sch.task_manage.task.second_floor_area; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.wms.md.service.ImdPbInterfacebackService; +import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan; +import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; +import org.nl.wms.pdm.bi.service.IpdmBiSlittingproductionplanService; +import org.nl.wms.pdm.ivt.dao.StIvtCoolpointivt; +import org.nl.wms.pdm.ivt.dao.StIvtCoolregionio; +import org.nl.wms.pdm.ivt.dao.StIvtCutpointivt; +import org.nl.wms.pdm.ivt.service.*; +import org.nl.wms.pdm.ivt.service.impl.StIvtCutpointivtServiceImpl; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.storage_manage.ios.enums.IOSEnum; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + + +/** + * @author gbx + * @since 2024-04-11 + */ +@Slf4j +@Component(value = "CoolCutTask") +public class CoolCutTask extends AbstractTask { + + private final String THIS_CLASS = CoolCutTask.class.getName(); + + + @Resource + private ISchBaseTaskService taskService; + + + @Resource + private ISysDictService sysDictService; + + + @Resource + private IstIvtCoolpointivtService stIvtCoolpointivtService; + + + @Resource + private IstIvtCoolregionioService stIvtCoolRegionIoService; + + + + @Resource + private IstIvtCutpointivtService stIvtCutpointivtService; + + //分切计划 + @Resource + private IpdmBiSlittingproductionplanService pdmBiSlittingproductionplanService; + + + /** + * 特殊操作 + * + * @param task LMS任务 + * @param acsTaskDto ACS任务 + */ + @Override + public void deliveryBeforeProcessing(SchBaseTask task, AcsTaskDto acsTaskDto) { + acsTaskDto.setDtl_type(task.getDtl_type()); + acsTaskDto.setTruss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")); + acsTaskDto.setAgv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("2楼1区域AGV系统")); + acsTaskDto.setParams(JSON.parseObject(task.getRequest_param(), new TypeReference>() { + })); + } + + @Override + public void createCompletion(SchBaseTask task) { + Assert.notNull(task, "请求参数不能为空"); + String taskType = task.getTask_type(); + if (StrUtil.isBlank(taskType)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicleCode = task.getVehicle_code(); + if (StrUtil.isBlank(vehicleCode)) { + throw new BadRequestException("载具号不能为空"); + } + String pointCode1 = task.getPoint_code1(); + if (StrUtil.isBlank(pointCode1)) { + throw new BadRequestException("起点不能为空"); + } + String pointCode2 = task.getPoint_code2(); + if (StrUtil.isBlank(pointCode2)) { + throw new BadRequestException("下一点不能为空"); + } + String pointCode3 = task.getPoint_code3(); + String pointCode4 = task.getPoint_code4(); + if (isSingleTask(pointCode1)) { + throw new BadRequestException("点位:" + pointCode1 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode2)) { + throw new BadRequestException("点位:" + pointCode2 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode3)) { + throw new BadRequestException("点位:" + pointCode3 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode4)) { + throw new BadRequestException("点位:" + pointCode4 + "存在未完成的任务!"); + } + //是否立即下发 + boolean isSend = !StrUtil.isNotBlank(task.getIs_send()) || BooleanUtil.toBoolean(task.getIs_send()); + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setHandle_class(THIS_CLASS); + task.setIs_send(isSend ? "1" : "0"); + task.setAcs_task_type(StrUtil.isEmpty(task.getAcs_task_type()) + ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : (task.getAcs_task_type())); + task.setTask_status(StrUtil.isEmpty(task.getTask_status()) + ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status()); + task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code())? "A1" : task.getWorkshop_code()); + if ("010301".equals(task.getTask_type())) { + task.setAcs_task_type("2"); + } else { + //todo 2和3是什么类型 + task.setAcs_task_type("3"); + } + //根据类型获取对应的任务优先级 + String priority = Optional.ofNullable(sysDictService.getOne(new LambdaQueryWrapper() + .eq(Dict::getCode, "task_priority") + .eq(Dict::getLabel, task.getTask_type()))) + .map(Dict::getValue) + .orElse("1"); + task.setPriority(priority); + TaskUtils.setCreateByDefault(task); + taskService.save(task); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.renotifyAcs(task); + } + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(JSONObject taskObj, TaskStatus status) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + if (schBaseTask == null) { + throw new BadRequestException("CoolCutTask任务更新接口任务号为空!"); + } + // 执行中 + if (TaskStatus.EXECUTING.getCode().equals(status.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.EXECUTING.getCode()); + } + // 完成 + if (StrUtil.equals(status.getCode(), TaskStatus.FINISHED.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + String point_code1 = schBaseTask.getPoint_code1(); + String point_code2 = schBaseTask.getPoint_code2(); + String point_code3 = schBaseTask.getPoint_code3(); + String point_code4 = schBaseTask.getPoint_code4(); + if ("010301".equals(schBaseTask.getTask_type())) { + //更新主表状态 + StIvtCoolregionio stIvtCoolregionio = stIvtCoolRegionIoService.getOne(new LambdaQueryWrapper() + .eq(StIvtCoolregionio::getTask_id, schBaseTask.getTask_id())); + stIvtCoolregionio.setBill_status("50"); + stIvtCoolRegionIoService.update(stIvtCoolregionio, new QueryWrapper<>()); + // 更新冷却区母卷库存 + StIvtCoolpointivt stIvtCoolpointivt = stIvtCoolpointivtService.getOne(new QueryWrapper().eq("full_point_code", point_code1)); + if (stIvtCoolpointivt != null) { + + if (StringUtils.isBlank(stIvtCoolpointivt.getContainer_name())) { + throw new BadRequestException("CoolCutTask任务更新接口-子卷号不能为空!"); + } + stIvtCoolpointivt.setFull_point_status("01"); + stIvtCoolpointivt.setContainer_name(""); + stIvtCoolpointivt.setWorkorder_id(""); + stIvtCoolpointivt.setIvt_qty(BigDecimal.ZERO);//包含qty的字段一般都是BigDecimal类型 + stIvtCoolpointivt.setCool_ivt_status("01"); + stIvtCoolpointivt.setInstorage_time(""); // 是String类型,赋值空字符表示清除时间 + stIvtCoolpointivt.setUpdate_optid(SecurityUtils.getCurrentUserId()); + stIvtCoolpointivt.setUpdate_optname(SecurityUtils.getCurrentNickName()); + stIvtCoolpointivt.setUpdate_time(DateUtil.now()); + stIvtCoolpointivtService.updateById(stIvtCoolpointivt); + // 更新分切区母卷库存 + StIvtCutpointivt cutPointIvt = stIvtCutpointivtService.getOne(new QueryWrapper().eq("full_point_code", point_code2)); + if (cutPointIvt != null) { + cutPointIvt.setFull_point_status("02"); + cutPointIvt.setContainer_name(stIvtCoolpointivt.getContainer_name()); + cutPointIvt.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); //注意这是Long类型,记得转换 + cutPointIvt.setUpdate_optname(SecurityUtils.getCurrentNickName()); + cutPointIvt.setUpdate_time(DateUtil.now()); + stIvtCutpointivtService.updateById(cutPointIvt); + } + } + // 更新分切区空轴库存 + StIvtCutpointivt cutPointIvt2 = stIvtCutpointivtService.getOne(new QueryWrapper().eq("empty_point_code", point_code3)); + if (cutPointIvt2 != null) { + cutPointIvt2.setEmpty_point_status("01"); + cutPointIvt2.setEmpty_vehicle_code(""); + cutPointIvt2.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + cutPointIvt2.setUpdate_optname(SecurityUtils.getCurrentNickName()); + cutPointIvt2.setUpdate_time(DateUtil.now()); + stIvtCutpointivtService.updateById(cutPointIvt2); + } + // 更新冷却区空轴库存 + StIvtCoolpointivt coolPointIvt2 = stIvtCoolpointivtService.getOne(new QueryWrapper().eq("empty_point_code", point_code4)); + if (coolPointIvt2 != null) { + coolPointIvt2.setEmpty_point_status("02"); + coolPointIvt2.setEmpty_vehicle_code(schBaseTask.getVehicle_code2()); + coolPointIvt2.setCool_ivt_status("01"); + coolPointIvt2.setInstorage_time(""); // 是String类型,赋值空字符表示清除时间 + coolPointIvt2.setUpdate_optid(SecurityUtils.getCurrentUserId()); + coolPointIvt2.setUpdate_optname(SecurityUtils.getCurrentNickName()); + coolPointIvt2.setUpdate_time(DateUtil.now()); + stIvtCoolpointivtService.updateById(coolPointIvt2); + } + // 更新该母卷对应分切计划的状态 + PdmBiSlittingproductionplan pdmBiSlittingproductionplan = new PdmBiSlittingproductionplan(); + pdmBiSlittingproductionplan.setIs_parent_ok("1"); + pdmBiSlittingproductionplanService.update(pdmBiSlittingproductionplan, new QueryWrapper().eq("parent_container_name", stIvtCoolpointivt.getContainer_name())); + // todo MES相关,判断该接口是否需要回传 + //JSONObject mom_jo = new JSONObject(); + //mom_jo.put("contain_name", container_name); + //mom_jo.put("warehouse", "1"); + //JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'cutPlanMomRollDeliveryComplete'").uniqueResult(0); + //if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { + // new LmsToMesServiceImpl().cutPlanMomRollDeliveryComplete(mom_jo); + //} + } + if ("010302".equals(schBaseTask.getTask_type())) { + // 更新主表状态 + StIvtCoolregionio stIvtCoolregionio = new StIvtCoolregionio(); + stIvtCoolregionio.setBill_status("50"); + stIvtCoolRegionIoService.update(stIvtCoolregionio, new QueryWrapper().eq("task_id", schBaseTask.getTask_id())); + // 更新冷却区母卷库存 + StIvtCoolpointivt coolPointIvt = stIvtCoolpointivtService.getOne(new QueryWrapper().eq("full_point_code", point_code1)); + if (coolPointIvt != null) { + coolPointIvt.setFull_point_status("01"); + coolPointIvt.setContainer_name(""); + coolPointIvt.setWorkorder_id(""); + coolPointIvt.setIvt_qty(BigDecimal.ZERO); + coolPointIvt.setCool_ivt_status("01"); + coolPointIvt.setInstorage_time(""); + coolPointIvt.setUpdate_optid(SecurityUtils.getCurrentUserId()); + coolPointIvt.setUpdate_optname(SecurityUtils.getCurrentNickName()); + coolPointIvt.setUpdate_time(DateUtil.now()); + stIvtCoolpointivtService.updateById(coolPointIvt); + } + // 更新分切区母卷库存 + StIvtCutpointivt cutPointIvt = stIvtCutpointivtService.getOne(new QueryWrapper().eq("full_point_code", point_code2)); + if (cutPointIvt != null) { + cutPointIvt.setFull_point_status("02"); + cutPointIvt.setContainer_name(coolPointIvt.getContainer_name()); + cutPointIvt.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + cutPointIvt.setUpdate_optname(SecurityUtils.getCurrentNickName()); + cutPointIvt.setUpdate_time(DateUtil.now()); + stIvtCutpointivtService.updateById(cutPointIvt); + } + // 更新该母卷对应分切计划的状态 + PdmBiSlittingproductionplan pdmBiSlittingproductionplan = new PdmBiSlittingproductionplan(); + pdmBiSlittingproductionplan.setIs_parent_ok("1"); + pdmBiSlittingproductionplanService.update(pdmBiSlittingproductionplan, new QueryWrapper().eq("parent_container_name", coolPointIvt.getContainer_name())); + // JSONObject mom_jo = new JSONObject(); + // mom_jo.put("contain_name", container_name); + // mom_jo.put("warehouse", "1"); + // //判断该接口是否需要回传 + // JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'cutPlanMomRollDeliveryComplete'").uniqueResult(0); + // if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { + // new LmsToMesServiceImpl().cutPlanMomRollDeliveryComplete(mom_jo); + // } + } + if ("010303".equals(schBaseTask.getTask_type())) { + // 更新分切区空轴库存 + StIvtCutpointivt cutPointIvt2 = stIvtCutpointivtService.getOne(new QueryWrapper().eq("empty_point_code", point_code1)); + if (cutPointIvt2 != null) { + cutPointIvt2.setEmpty_point_status("01"); + cutPointIvt2.setEmpty_vehicle_code(""); + cutPointIvt2.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + cutPointIvt2.setUpdate_optname(SecurityUtils.getCurrentNickName()); + cutPointIvt2.setUpdate_time(DateUtil.now()); + stIvtCutpointivtService.updateById(cutPointIvt2); + } + // 更新冷却区空轴库存 + StIvtCoolpointivt coolPointIvt2 = stIvtCoolpointivtService.getOne(new QueryWrapper().eq("empty_point_code", point_code2)); + if (coolPointIvt2 != null) { + coolPointIvt2.setEmpty_point_status("02"); + coolPointIvt2.setEmpty_vehicle_code(schBaseTask.getVehicle_code()); + coolPointIvt2.setCool_ivt_status("01"); + coolPointIvt2.setInstorage_time(""); + coolPointIvt2.setUpdate_optid(SecurityUtils.getCurrentUserId()); + coolPointIvt2.setUpdate_optname(SecurityUtils.getCurrentNickName()); + coolPointIvt2.setUpdate_time(DateUtil.now()); + stIvtCoolpointivtService.updateById(coolPointIvt2); + } + } + } + // 取消 + if (status.getCode().equals(IOSEnum.IS_NOTANDYES.code("否"))) { + // if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatus.ISSUE.getCode())) { + // throw new BadRequestException("CoolCutTask任务已执行不能取消"); + // } + // 更新任务表删除字段 + schBaseTask.setIs_delete(true); + //删除冷却区出入记录 + stIvtCoolRegionIoService.delete(schBaseTask.getTask_id()); + } + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + + @Override + public void forceFinish(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("CoolCutTask任务强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + @Override + public void cancel(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("CoolCutTask任务取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create() throws BadRequestException { + + } + + //判断该点位是否存在未完成的任务 + public boolean isSingleTask(String point_code) { + return taskService.getOne(new LambdaQueryWrapper() + .and(wrapper -> wrapper + .eq(SchBaseTask::getPoint_code1, point_code) + .or() + .eq(SchBaseTask::getPoint_code2, point_code) + .or() + .eq(SchBaseTask::getPoint_code3, point_code) + .or() + .eq(SchBaseTask::getPoint_code4, point_code) + ) + .lt(SchBaseTask::getTask_status, "07") + .eq(SchBaseTask::getIs_delete, "0") + ) != null; + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/InCoolIvtTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/InCoolIvtTask.java new file mode 100644 index 0000000..c90f524 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/InCoolIvtTask.java @@ -0,0 +1,296 @@ +package org.nl.wms.sch.task_manage.task.second_floor_area; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.basedata.material.service.ImdMeMaterialbaseService; +import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; +import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; +import org.nl.wms.pdm.bi.service.IpdmBiSlittingproductionplanService; +import org.nl.wms.pdm.ivt.dao.StIvtCoolpointivt; +import org.nl.wms.pdm.ivt.service.*; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.storage_manage.ios.enums.IOSEnum; +import org.nl.wms.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + + +/** + * @author gbx + * @since 2024-04-11 + */ +@Slf4j +@Component(value = "InCoolIvtTask") +public class InCoolIvtTask extends AbstractTask { + + private final String THIS_CLASS = InCoolIvtTask.class.getName(); + + @Resource + private ISchBaseTaskService taskService; + + @Resource + private ISchBasePointService schBasePointService; + + + @Resource + private ISysDictService sysDictService; + + + @Resource + private IstIvtCoolpointivtService stIvtCoolpointivtService; + + + @Resource + private IstIvtCoolregionioService stIvtCoolRegionIoService; + + + @Resource + private IpdmBiRawfoilworkorderService pdmBiRawfoilworkorderService; + + + /** + * 特殊操作 + * + * @param task LMS任务 + * @param acsTaskDto ACS任务 + */ + @Override + public void deliveryBeforeProcessing(SchBaseTask task, AcsTaskDto acsTaskDto) { + acsTaskDto.setDtl_type(task.getDtl_type()); + acsTaskDto.setTruss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")); + acsTaskDto.setAgv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")); + acsTaskDto.setParams(JSON.parseObject(task.getRequest_param(), new TypeReference>() { + })); + } + + @Override + public void createCompletion(SchBaseTask task) { + Assert.notNull(task, "请求参数不能为空"); + String taskType = task.getTask_type(); + if (StrUtil.isBlank(taskType)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicleCode = task.getVehicle_code(); + if (StrUtil.isBlank(vehicleCode)) { + throw new BadRequestException("载具号不能为空"); + } + String pointCode1 = task.getPoint_code1(); + if (StrUtil.isBlank(pointCode1)) { + throw new BadRequestException("起点不能为空"); + } + String pointCode2 = task.getPoint_code2(); + if (StrUtil.isBlank(pointCode2)) { + throw new BadRequestException("下一点不能为空"); + } + String pointCode3 = task.getPoint_code3(); + String pointCode4 = task.getPoint_code4(); + if (isSingleTask(pointCode1)) { + throw new BadRequestException("点位:" + pointCode1 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode2)) { + throw new BadRequestException("点位:" + pointCode2 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode3)) { + throw new BadRequestException("点位:" + pointCode3 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode4)) { + throw new BadRequestException("点位:" + pointCode4 + "存在未完成的任务!"); + } + //是否立即下发 + boolean isSend = !StrUtil.isNotBlank(task.getIs_send()) || BooleanUtil.toBoolean(task.getIs_send()); + task.setTask_type("010204"); + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setHandle_class(THIS_CLASS); + task.setIs_send(isSend ? "1" : "0"); + task.setAcs_task_type(StrUtil.isEmpty(task.getAcs_task_type()) + ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : (task.getAcs_task_type())); + //todo 3的任务类型加进枚举中 + task.setAcs_task_type("3"); + task.setTask_status(StrUtil.isEmpty(task.getTask_status()) + ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status()); + task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code()) ? "A1" : task.getWorkshop_code()); + //根据类型获取对应的任务优先级 + Dict dict = sysDictService.getOne(new LambdaQueryWrapper().eq(Dict::getCode, "task_priority").eq(Dict::getLabel, task.getTask_type())); + if (dict == null) { + task.setPriority("1"); + } else { + task.setPriority(dict.getValue()); + } + TaskUtils.setCreateByDefault(task); + taskService.save(task); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.renotifyAcs(task); + } + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(JSONObject taskObj, TaskStatus status) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务更新接口任务号为空!"); + } + // 执行中 + if (TaskStatus.EXECUTING.getCode().equals(status.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.EXECUTING.getCode()); + } + // 完成 + if (StrUtil.equals(status.getCode(), TaskStatus.FINISHED.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + String pointCode1 = schBaseTask.getPoint_code1(); + String pointCode2 = schBaseTask.getPoint_code2(); + // 校验起点是否存在 + SchBasePoint startPointDto = schBasePointService.getOne(new QueryWrapper() + .eq("point_code", pointCode1)); + + if (ObjectUtil.isEmpty(startPointDto)) { + throw new BadRequestException("起点未找到可用点位:" + pointCode1); + } + // 校验终点是否存在 + StIvtCoolpointivt jsonIvt = stIvtCoolpointivtService.getOne(new QueryWrapper() + .eq("full_point_code", pointCode2) + ); + if (ObjectUtil.isEmpty(jsonIvt)) { + throw new BadRequestException("终点未找到可用点位:" + pointCode2); + } + // 更新暂存位状态为空位 + SchBasePoint jsonPoint = schBasePointService.getOne(new QueryWrapper().eq("point_code", pointCode1)); + jsonPoint.setPoint_status("1"); + //todo 是否需要清理物料编号 + //jsonPoint.setMaterial_code(""); + schBasePointService.updateById(jsonPoint); + // 更新冷却库存状态 + PdmBiRawfoilworkorder rawJo = pdmBiRawfoilworkorderService.getOne(new QueryWrapper() + .eq("container_name", schBaseTask.getMaterial_code()) + ); + if (rawJo != null) { + jsonIvt.setFull_point_status("02"); + jsonIvt.setCool_ivt_status("04"); + jsonIvt.setInstorage_time(DateUtil.now()); + jsonIvt.setContainer_name(rawJo.getContainer_name()); + jsonIvt.setWorkorder_id(rawJo.getWorkorder_id()); + //todo pdm_bi_rawfoilworkorder 无qty字段 + //jsonIvt.setIvt_qty(rawJo.getQty()); + stIvtCoolpointivtService.updateById(jsonIvt); + } + // 将入冷却信息发送给mes + JSONObject param = new JSONObject(); + String userName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); + String passWord = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); + param.put("iContainerName", schBaseTask.getMaterial_code()); + param.put("iArrivalTime", DateUtil.now()); + param.put("iWarehouse", 2); + param.put("UserName", userName); + param.put("PassWord", passWord); + //todo MES回传 判断该接口是否需要回传 + //MdPbInterfaceBack backJo = mdPbInterfaceBackService.getOne(new QueryWrapper().eq("interface_name", "momRollSemiFGInboundComplete")); + // if (backJo != null && "1".equals(backJo.getIsBack())) { + // String productArea = backJo.getProductArea(); + // if (StrUtil.isNotEmpty(productArea) && productArea.contains(schBaseTask.getString("product_area"))) { + // new LmsToMesServiceImpl().momRollSemiFGInboundComplete(param); + // } + // } + // 将该母卷的入冷却标识改为0 + PdmBiRawfoilworkorder pdmBiRawfoilworkorder = new PdmBiRawfoilworkorder(); + pdmBiRawfoilworkorder.setIs_instor("0"); + pdmBiRawfoilworkorderService.update(pdmBiRawfoilworkorder, new UpdateWrapper().eq("container_name", schBaseTask.getMaterial_code())); + log.info("母卷:" + schBaseTask.getMaterial_code() + "对应的入冷却任务完成,请求入半成品库标识改为0"); + } + // 取消 + if (status.getCode().equals(IOSEnum.IS_NOTANDYES.code("否"))) { + if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatus.ISSUE.getCode())) { + throw new BadRequestException("CallEmpReelTask任务已执行不能取消"); + } + // 更新任务表删除字段 + schBaseTask.setIs_delete(true); + //删除冷却区出入记录 + stIvtCoolRegionIoService.delete(schBaseTask.getTask_id()); + } + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + + @Override + public void forceFinish(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + @Override + public void cancel(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + public boolean isSingleTask(String point_code) { + return taskService.getOne(new LambdaQueryWrapper() + .and(wrapper -> wrapper + .eq(SchBaseTask::getPoint_code1, point_code) + .or() + .eq(SchBaseTask::getPoint_code2, point_code) + .or() + .eq(SchBaseTask::getPoint_code3, point_code) + .or() + .eq(SchBaseTask::getPoint_code4, point_code) + ) + .lt(SchBaseTask::getTask_status, "07") + .eq(SchBaseTask::getIs_delete, "0") + ) != null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create() throws BadRequestException { + + } + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/InHotTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/InHotTask.java new file mode 100644 index 0000000..6d8c45f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/InHotTask.java @@ -0,0 +1,386 @@ +package org.nl.wms.sch.task_manage.task.second_floor_area; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.basedata.material.service.ImdMeMaterialbaseService; +import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; +import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; +import org.nl.wms.pdm.bi.service.IpdmBiSlittingproductionplanService; +import org.nl.wms.pdm.ivt.dao.StIvtCoolpointivt; +import org.nl.wms.pdm.ivt.dao.StIvtCoolregionio; +import org.nl.wms.pdm.ivt.dao.StIvtHotpointivt; +import org.nl.wms.pdm.ivt.dao.StIvtHotregioniomst; +import org.nl.wms.pdm.ivt.service.*; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.storage_manage.ios.enums.IOSEnum; +import org.nl.wms.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; + + +/** + * @author gbx + * @since 2024-04-11 + */ +@Slf4j +@Component(value = "InHotTask") +public class InHotTask extends AbstractTask { + + private final String THIS_CLASS = InHotTask.class.getName(); + + @Resource + private ISchBaseTaskService taskService; + + + @Resource + private ISchBasePointService schBasePointService; + + + @Resource + private ISysDictService sysDictService; + + + @Resource + private IstIvtHotpointivtService stIvtHotpointivtService; + + @Resource + private IstIvtHotregioniomstService stIvtHotregioniomstService; + + + @Resource + private IstIvtCoolpointivtService stIvtCoolpointivtService; + + + @Resource + private IstIvtCoolregionioService stIvtCoolRegionIoService; + + + @Resource + private IpdmBiRawfoilworkorderService pdmBiRawfoilworkorderService; + + + /** + * 特殊操作 + * + * @param task LMS任务 + * @param acsTaskDto ACS任务 + */ + @Override + public void deliveryBeforeProcessing(SchBaseTask task, AcsTaskDto acsTaskDto) { + acsTaskDto.setDtl_type(task.getDtl_type()); + acsTaskDto.setTruss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")); + acsTaskDto.setAgv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")); + acsTaskDto.setParams(JSON.parseObject(task.getRequest_param(), new TypeReference>() { + })); + } + + @Override + public void createCompletion(SchBaseTask task) { + Assert.notNull(task, "请求参数不能为空"); + String taskType = task.getTask_type(); + if (StrUtil.isBlank(taskType)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicleCode = task.getVehicle_code(); + if (StrUtil.isBlank(vehicleCode)) { + throw new BadRequestException("载具号不能为空"); + } + String pointCode1 = task.getPoint_code1(); + if (StrUtil.isBlank(pointCode1)) { + throw new BadRequestException("起点不能为空"); + } + String pointCode2 = task.getPoint_code2(); + if (StrUtil.isBlank(pointCode2)) { + throw new BadRequestException("下一点不能为空"); + } + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setHandle_class(THIS_CLASS); + task.setTask_status(StrUtil.isEmpty(task.getTask_status()) + ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status()); + task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code()) ? "A1" : task.getWorkshop_code()); + + //根据类型获取对应的任务优先级 + Dict dict = sysDictService.getOne(new LambdaQueryWrapper().eq(Dict::getCode, "task_priority").eq(Dict::getLabel, task.getTask_type())); + if (dict == null) { + task.setPriority("1"); + } else { + task.setPriority(dict.getValue()); + } + //是否立即下发 + boolean isSend = !StrUtil.isNotBlank(task.getIs_send()) || BooleanUtil.toBoolean(task.getIs_send()); + task.setIs_send(isSend ? "1" : "0"); + TaskUtils.setCreateByDefault(task); + if (StrUtil.equals(task.getTask_type(), "1")) { + if (isSingleTask(pointCode1)) { + throw new BadRequestException("点位:" + pointCode1 + "存在未完成的任务!"); + } + if (isSingleTask(task.getPoint_code3())) { + throw new BadRequestException("点位:" + task.getPoint_code3() + "存在未完成的任务!"); + } + task.setTask_type("010201"); + if (StrUtil.isNotEmpty(task.getPoint_code3())) { + //todo json.put("acs_task_type", "8"); 6和8是什么任务 + task.setAcs_task_type(PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务")); + } else { + task.setAcs_task_type(PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + } + // 更新对应点位库存为已裹膜 + StIvtCoolpointivt coolIvtToUpdate = stIvtCoolpointivtService.getOne(new LambdaQueryWrapper() + .eq(StIvtCoolpointivt::getFull_point_code, task.getPoint_code1()), false); + if (ObjectUtil.isEmpty(coolIvtToUpdate)) { + throw new BadRequestException("未查询到对应的冷却区点位!"); + } + coolIvtToUpdate.setCool_ivt_status("02"); + stIvtCoolpointivtService.updateById(coolIvtToUpdate); + } + if (StrUtil.equals(task.getTask_type(), "2")) { + if (isSingleTask(pointCode1)) { + throw new BadRequestException("点位:" + pointCode1 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode2)) { + throw new BadRequestException("点位:" + pointCode2 + "存在未完成的任务!"); + } + task.setTask_type("010203"); + task.setAcs_task_type(PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + + } + taskService.save(task); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.renotifyAcs(task); + } + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(JSONObject taskObj, TaskStatus status) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务更新接口任务号为空!"); + } + String task_id = schBaseTask.getTask_id(); + // 执行中 + if (TaskStatus.EXECUTING.getCode().equals(status.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.EXECUTING.getCode()); + } + // 完成 + if (StrUtil.equals(status.getCode(), TaskStatus.FINISHED.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + + + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + +// 更新主表 + StIvtHotregioniomst jsonHotMst = stIvtHotregioniomstService.getOne(new QueryWrapper() + .eq("task_id", task_id)); + + String hotPointCode = ""; +// 判断此任务是否有三个点位 + if (ObjectUtil.isEmpty(schBaseTask.getPoint_code3())) { + // 暂存区入烘箱任务 + // 更新烘箱区库存状态 + StIvtHotpointivt jsonHotIvt = stIvtHotpointivtService.getOne(new QueryWrapper() + .eq("point_code", schBaseTask.getPoint_code2())); + if (jsonHotIvt != null) { + jsonHotIvt.setPoint_status("02"); + jsonHotIvt.setContainer_name(jsonHotMst.getContainer_name()); + jsonHotIvt.setWorkorder_id(jsonHotMst.getWorkorder_id()); + jsonHotIvt.setIvt_qty(jsonHotMst.getQty()); + jsonHotIvt.setInstorage_time(DateUtil.now()); + jsonHotIvt.setUpdate_optid(currentUserId); + jsonHotIvt.setUpdate_optname(currentUsername); + jsonHotIvt.setUpdate_time(DateUtil.now()); + stIvtHotpointivtService.updateById(jsonHotIvt); + } + + + // 更新暂存区点位状态为空位 + SchBasePoint jsonPoint = schBasePointService.getOne(new QueryWrapper().eq("point_code", schBaseTask.getPoint_code1())); + if (jsonPoint != null) { + jsonPoint.setPoint_status("1"); + //todo setMaterialCode是否需要MaterialCode + //jsonPoint.setMaterialCode(""); + schBasePointService.updateById(jsonPoint); + } + + hotPointCode = jsonHotIvt != null ? jsonHotIvt.getExt_code() : ""; + } else { + //冷却区入烘箱任务 + //更新冷却出入主表状态 + StIvtCoolregionio jsonCool = stIvtCoolRegionIoService.getOne(new QueryWrapper() + .eq("task_id", task_id) + ); + if (jsonCool != null) { + jsonCool.setBill_status("50"); + stIvtCoolRegionIoService.updateById(jsonCool); + } + + // 更新冷却区库存状态 + StIvtCoolpointivt jsonCoolIvt = stIvtCoolpointivtService.getOne(new QueryWrapper() + .eq("full_point_code", schBaseTask.getPoint_code1()) + ); + if (jsonCoolIvt != null) { + jsonCoolIvt.setFull_point_status("01"); + jsonCoolIvt.setCool_ivt_status("01"); + jsonCoolIvt.setContainer_name(""); + jsonCoolIvt.setWorkorder_id(""); + jsonCoolIvt.setIvt_qty(BigDecimal.ZERO); + jsonCoolIvt.setInstorage_time(""); + jsonCoolIvt.setUpdate_optid(currentUserId); + jsonCoolIvt.setUpdate_optname(currentUsername); + jsonCoolIvt.setUpdate_time(DateUtil.now()); + stIvtCoolpointivtService.updateById(jsonCoolIvt); + } + + // 更新烘箱区库存状态 + StIvtHotpointivt jsonHotIvt = stIvtHotpointivtService.getOne(new QueryWrapper() + .eq("point_code", schBaseTask.getPoint_code3()) + ); + if (jsonHotIvt != null) { + jsonHotIvt.setPoint_status("02"); + jsonHotIvt.setContainer_name(jsonCoolIvt != null ? jsonCoolIvt.getContainer_name() : ""); + jsonHotIvt.setWorkorder_id(jsonCoolIvt != null ? jsonCoolIvt.getWorkorder_id() : ""); + jsonHotIvt.setIvt_qty(jsonCoolIvt != null ? jsonCoolIvt.getIvt_qty() : BigDecimal.ZERO); + jsonHotIvt.setInstorage_time(DateUtil.now()); + jsonHotIvt.setUpdate_optid(currentUserId); + jsonHotIvt.setUpdate_optname(currentUsername); + jsonHotIvt.setUpdate_time(DateUtil.now()); + + stIvtHotpointivtService.updateById(jsonHotIvt); + + log.info("入烘箱wql执行update语句!"); + log.info("入烘箱mybatis执行update语句!"); + } + + hotPointCode = jsonHotIvt != null ? jsonHotIvt.getExt_code() : ""; + } + +// 将入烘箱信息发送给mes + JSONObject param = new JSONObject(); + String userName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); + String passWord = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); + param.put("iContainerName", jsonHotMst.getContainer_name()); + param.put("iResourceName", hotPointCode); + param.put("iMoveInDate", DateUtil.now()); + param.put("iPlanBakingTemperature", jsonHotMst.getTemperature()); + param.put("iPlanBakingTimer", jsonHotMst.getOven_time()); + param.put("UserName", userName); + param.put("PassWord", passWord); + +// todo 判断该接口是否需要回传 +// MdPbInterfaceBack backJo = mdPbInterfaceBackService.getOne(new QueryWrapper().eq("interface_name", "momRollBakeInBound")); +// if (backJo != null && "1".equals(backJo.getIsBack())) { +// String productArea = backJo.getProductArea(); +// if (StrUtil.isNotEmpty(productArea) && productArea.contains(schBaseTask.getString("product_area"))) { +// new LmsToMesServiceImpl().momRollBakeInBound(param); +// } +// } + +// 将该母卷的入烘箱标识改为0 + PdmBiRawfoilworkorder pdmBiRawfoilworkorder = new PdmBiRawfoilworkorder(); + pdmBiRawfoilworkorder.setIs_baking("0"); + pdmBiRawfoilworkorderService.update(pdmBiRawfoilworkorder, new UpdateWrapper().eq("container_name", jsonHotMst.getContainer_name())); + log.info("母卷:" + jsonHotMst.getContainer_name() + "对应的入烘箱任务完成,请求烘烤标识改为0"); + + + } + // 取消 + if (status.getCode().equals(IOSEnum.IS_NOTANDYES.code("否"))) { + if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatus.ISSUE.getCode())) { + throw new BadRequestException("CallEmpReelTask任务已执行不能取消"); + } + // 更新任务表删除字段 + schBaseTask.setIs_delete(true); + stIvtCoolRegionIoService.delete(task_id); + stIvtHotregioniomstService.delete(task_id); + } + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + + @Override + public void forceFinish(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + @Override + public void cancel(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + public boolean isSingleTask(String point_code) { + return taskService.getOne(new LambdaQueryWrapper() + .and(wrapper -> wrapper + .eq(SchBaseTask::getPoint_code1, point_code) + .or() + .eq(SchBaseTask::getPoint_code2, point_code) + .or() + .eq(SchBaseTask::getPoint_code3, point_code) + .or() + .eq(SchBaseTask::getPoint_code4, point_code) + ) + .lt(SchBaseTask::getTask_status, "07") + .eq(SchBaseTask::getIs_delete, "0") + ) != null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create() throws BadRequestException { + + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/OutHotTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/OutHotTask.java new file mode 100644 index 0000000..fcf3aa1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/second_floor_area/OutHotTask.java @@ -0,0 +1,277 @@ +package org.nl.wms.sch.task_manage.task.second_floor_area; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.wms.basedata.material.service.ImdMeMaterialbaseService; +import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; +import org.nl.wms.pdm.bi.service.IpdmBiSlittingproductionplanService; +import org.nl.wms.pdm.ivt.dao.StIvtCoolpointivt; +import org.nl.wms.pdm.ivt.dao.StIvtHotpointivt; +import org.nl.wms.pdm.ivt.dao.StIvtHotregioniomst; +import org.nl.wms.pdm.ivt.service.*; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.storage_manage.ios.enums.IOSEnum; +import org.nl.wms.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.Map; + + +/** + * @author gbx + * @since 2024-04-11 + */ +@Slf4j +@Component(value = "OutHotTask") +public class OutHotTask extends AbstractTask { + + private final String THIS_CLASS = OutHotTask.class.getName(); + + @Resource + private ISchBaseTaskService taskService; + + + @Resource + private ISchBasePointService schBasePointService; + + + @Resource + private ISysDictService sysDictService; + + + @Resource + private IstIvtHotpointivtService stIvtHotpointivtService; + + + @Resource + private IstIvtHotregioniomstService stIvtHotregioniomstService; + + + /** + * 特殊操作 + * + * @param task LMS任务 + * @param acsTaskDto ACS任务 + */ + @Override + public void deliveryBeforeProcessing(SchBaseTask task, AcsTaskDto acsTaskDto) { + acsTaskDto.setDtl_type(task.getDtl_type()); + acsTaskDto.setTruss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")); + acsTaskDto.setAgv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")); + acsTaskDto.setParams(JSON.parseObject(task.getRequest_param(), new TypeReference>() { + })); + } + + @Override + public void createCompletion(SchBaseTask task) { + Assert.notNull(task, "请求参数不能为空"); + String taskType = task.getTask_type(); + if (StrUtil.isBlank(taskType)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicleCode = task.getVehicle_code(); + if (StrUtil.isBlank(vehicleCode)) { + throw new BadRequestException("载具号不能为空"); + } + String pointCode1 = task.getPoint_code1(); + if (StrUtil.isBlank(pointCode1)) { + throw new BadRequestException("起点不能为空"); + } + String pointCode2 = task.getPoint_code2(); + if (StrUtil.isBlank(pointCode2)) { + throw new BadRequestException("下一点不能为空"); + } + String pointCode3 = task.getPoint_code3(); + String pointCode4 = task.getPoint_code4(); + if (isSingleTask(pointCode1)) { + throw new BadRequestException("点位:" + pointCode1 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode2)) { + throw new BadRequestException("点位:" + pointCode2 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode3)) { + throw new BadRequestException("点位:" + pointCode3 + "存在未完成的任务!"); + } + if (isSingleTask(pointCode4)) { + throw new BadRequestException("点位:" + pointCode4 + "存在未完成的任务!"); + } + //是否立即下发 + boolean isSend = !StrUtil.isNotBlank(task.getIs_send()) || BooleanUtil.toBoolean(task.getIs_send()); + task.setTask_type("010202"); + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setHandle_class(THIS_CLASS); + task.setIs_send(isSend ? "1" : "0"); + task.setAcs_task_type(StrUtil.isEmpty(task.getAcs_task_type()) + ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : (task.getAcs_task_type())); + //todo 改为任务枚举 + task.setAcs_task_type("6"); + task.setTask_status(StrUtil.isEmpty(task.getTask_status()) + ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status()); + task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code())? "A1" : task.getWorkshop_code()); + //根据类型获取对应的任务优先级 + Dict dict = sysDictService.getOne(new LambdaQueryWrapper().eq(Dict::getCode, "task_priority").eq(Dict::getLabel, task.getTask_type())); + if (dict == null) { + task.setPriority("1"); + } else { + task.setPriority(dict.getValue()); + } + TaskUtils.setCreateByDefault(task); + taskService.save(task); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.renotifyAcs(task); + } + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(JSONObject taskObj, TaskStatus status) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务更新接口任务号为空!"); + } + String task_id = schBaseTask.getTask_id(); + // 执行中 + if (TaskStatus.EXECUTING.getCode().equals(status.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.EXECUTING.getCode()); + } + // 完成 + if (StrUtil.equals(status.getCode(), TaskStatus.FINISHED.getCode())) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + // 查询烘箱区点位库存信息 + StIvtHotpointivt jsonHotIvt = stIvtHotpointivtService.getOne(new LambdaQueryWrapper() + .eq(StIvtHotpointivt::getPoint_code, schBaseTask.getPoint_code1()), false); + // 查询烘箱区出入主表信息 + StIvtHotregioniomst jsonHotMst = stIvtHotregioniomstService.getOne(new QueryWrapper() + .eq("task_id", task_id)); + // 更新暂存区点位状态 + SchBasePoint jsonPoint2 = schBasePointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code2()), false); + jsonPoint2.setPoint_status("2"); + //todo setMaterialCode是否需要MaterialCode + //jsonPoint2.setMaterial_code(jsonHotIvt.getContainer_name()); + schBasePointService.updateById(jsonPoint2); + // 更新烘箱区库存状态 + jsonHotIvt.setPoint_status("01"); + jsonHotIvt.setContainer_name(""); + jsonHotIvt.setWorkorder_id(""); + jsonHotIvt.setIvt_qty(BigDecimal.ZERO); + jsonHotIvt.setInstorage_time(""); + jsonHotIvt.setUpdate_optid(SecurityUtils.getCurrentUserId()); + jsonHotIvt.setUpdate_optname(SecurityUtils.getCurrentUsername()); + jsonHotIvt.setUpdate_time(DateUtil.now()); + log.info("出烘箱wql执行update语句!"); + stIvtHotpointivtService.updateById(jsonHotIvt); + // 查询更新后的烘箱区点位库存信息 + StIvtHotpointivt updateIvt = stIvtHotpointivtService.getOne(new LambdaQueryWrapper() + .eq(StIvtHotpointivt::getPoint_code, schBaseTask.getPoint_code1()), false); + log.info("更新完后烘箱库存为:-----------------" + updateIvt.toString()); + // 将出烘箱信息发送给mes + JSONObject param = new JSONObject(); + param.put("iContainerName", jsonHotMst.getContainer_name()); + param.put("iResourceName", jsonHotIvt.getExt_code()); + param.put("iMoveOutDate", DateUtil.now()); + param.put("iabxActualBakingTemperature", jsonHotMst.getTemperature()); + param.put("iabxActualBakingTimer", jsonHotMst.getOven_time()); + //todo MES回传 判断该接口是否需要回传 + //MdPbInterfaceBack backJo = mdPbInterfaceBackService.getOne(new QueryWrapper().eq("interface_name", "momRollBakeOutBound")); + // if (backJo != null && "1".equals(backJo.getIsBack())) { + // String productArea = backJo.getProductArea(); + // if (StrUtil.isNotEmpty(productArea) && productArea.contains(schBaseTask.getString("product_area"))) { + // new LmsToMesServiceImpl().momRollBakeOutBound(param); + // } + // } + } + // 取消 + if (status.getCode().equals(IOSEnum.IS_NOTANDYES.code("否"))) { + if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatus.ISSUE.getCode())) { + throw new BadRequestException("CallEmpReelTask任务已执行不能取消"); + } + // 更新任务表删除字段 + schBaseTask.setIs_delete(true); + stIvtHotregioniomstService.delete(task_id); + } + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + + @Override + public void forceFinish(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatus.FINISHED.getCode()); + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + @Override + public void cancel(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("CallEmpReelTask任务取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + TaskUtils.setUpdateByDefault(schBaseTask); + taskService.updateById(schBaseTask); + } + + public boolean isSingleTask(String point_code) { + return taskService.getOne(new LambdaQueryWrapper() + .and(wrapper -> wrapper + .eq(SchBaseTask::getPoint_code1, point_code) + .or() + .eq(SchBaseTask::getPoint_code2, point_code) + .or() + .eq(SchBaseTask::getPoint_code3, point_code) + .or() + .eq(SchBaseTask::getPoint_code4, point_code) + ) + .lt(SchBaseTask::getTask_status, "07") + .eq(SchBaseTask::getIs_delete, "0") + ) != null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create() throws BadRequestException { + + } + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java index 1b64bc5..d2be610 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java @@ -39,6 +39,7 @@ public class TaskUtils { taskObj.setCreate_name(SecurityUtils.getCurrentNickName()); taskObj.setCreate_time(DateUtil.now()); } + public static void setCreateByAcsOrPda(SchBaseTask taskObj, JSONObject param) { // 如果是人工创建,会带个用户过来 if (ObjectUtil.isNotEmpty(param.getString("user_id"))) {