| package com.zy.asrs.controller; | 
|   | 
| import com.alibaba.fastjson.JSON; | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
| import com.baomidou.mybatisplus.mapper.Wrapper; | 
| import com.baomidou.mybatisplus.plugins.Page; | 
| import com.core.common.DateUtils; | 
| import com.zy.asrs.domain.enums.TaskStatusType; | 
| import com.zy.asrs.entity.LocMast; | 
| import com.zy.asrs.entity.StaDesc; | 
| import com.zy.asrs.entity.TaskWrk; | 
| import com.zy.asrs.entity.param.CarryParam; | 
| import com.zy.asrs.entity.param.TaskCreateParam; | 
| import com.zy.asrs.service.*; | 
| import com.core.annotations.ManagerAuth; | 
| import com.core.common.BaseRes; | 
| import com.core.common.Cools; | 
| import com.core.common.R; | 
| import com.zy.common.utils.HttpHandler; | 
| import com.zy.common.web.BaseController; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.web.bind.annotation.*; | 
|   | 
| import java.time.LocalDateTime; | 
| import java.util.*; | 
|   | 
| @RestController | 
| @Slf4j | 
| public class TaskWrkController extends BaseController { | 
|   | 
|     @Value("${wms.url}") | 
|     private String wmsUrl; | 
|   | 
|     @Autowired | 
|     private TaskWrkService taskWrkService; | 
|   | 
|     @Autowired | 
|     private LocMastService locMastService; | 
|   | 
|     @Autowired | 
|     private OpenService openService; | 
|   | 
|     @Autowired | 
|     private StaDescService staDescService; | 
|   | 
|     @Value("${wms.taskStatusFeedbackPath}") | 
|     private String taskStatusFeedbackPath; | 
|   | 
|     @Autowired | 
|     private ApiLogService apiLogService; | 
|   | 
|     @RequestMapping(value = "/taskWrk/{wrkNo}/auth") | 
|     @ManagerAuth | 
|     public R get(@PathVariable("wrkNo") Integer wrkNo) { | 
|         return R.ok(taskWrkService.selectByWrkNo(wrkNo)); | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrk/list/auth") | 
|     @ManagerAuth | 
|     public R list(@RequestParam(defaultValue = "1")Integer curr, | 
|                   @RequestParam(defaultValue = "10")Integer limit, | 
|                   @RequestParam(required = false)String orderByField, | 
|                   @RequestParam(required = false)String orderByType, | 
|                   @RequestParam Map<String, Object> param){ | 
|   | 
|         try{ | 
|             Integer wrkNo = null; | 
|             String taskNo = null; | 
|             Integer status = null; | 
|             Date modiTimeStart = null, modiTimeEnd = null; | 
|             for (Map.Entry<String, Object> entry : param.entrySet()) { | 
|                 String val = String.valueOf(entry.getValue()); | 
|                 if (Cools.isEmpty(val)) { | 
|                     continue; | 
|                 } | 
|                 if (val.contains(RANGE_TIME_LINK)) { | 
|                     String[] dates = val.split(RANGE_TIME_LINK); | 
|                     modiTimeStart = DateUtils.convert(dates[0]); | 
|                     modiTimeEnd = DateUtils.convert(dates[1]); | 
|                 } else if (entry.getKey().equals("wrk_no")) { | 
|                     wrkNo = Integer.parseInt(val); | 
|                 } else if (entry.getKey().equals("task_no")) { | 
|                     taskNo = val; | 
|                 } else if (entry.getKey().equals("status")) { | 
|                     status = Integer.parseInt(val); | 
|                 } | 
|             } | 
| // | 
| //            EntityWrapper<TaskWrk> wrapper = new EntityWrapper<>(); | 
| //            excludeTrash(param); | 
| //            convert(param, wrapper); | 
| //            if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} | 
|   | 
|             List<TaskWrk> taskWrkList = taskWrkService.selectTaskWrkList(wrkNo,taskNo,status,modiTimeStart,modiTimeEnd, curr, limit); | 
|             Page<TaskWrk> page = new Page<TaskWrk>(curr, limit).setRecords(taskWrkList); | 
|             page.setTotal(taskWrkService.selectTaskWrkListTotal(wrkNo,taskNo,status,modiTimeStart,modiTimeEnd)); | 
|             return R.ok(page); | 
| //        return R.ok(taskWrkService.selectPage(new Page<>(curr, limit), wrapper)); | 
|   | 
|         } catch (Exception e) { | 
|             return R.error("查询失败,请检查参数:"+e.getMessage()); | 
|         } | 
|   | 
|     } | 
|   | 
|     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ | 
|         for (Map.Entry<String, Object> entry : map.entrySet()){ | 
|             String val = String.valueOf(entry.getValue()); | 
|             if (val.contains(RANGE_TIME_LINK)){ | 
|                 String[] dates = val.split(RANGE_TIME_LINK); | 
|                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); | 
|                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); | 
|             } else { | 
|                 wrapper.like(entry.getKey(), val); | 
|             } | 
|         } | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrk/add/auth") | 
|     @ManagerAuth | 
|     public R add(TaskWrk taskWrk) { | 
|         taskWrkService.insert(taskWrk); | 
|         return R.ok(); | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrk/update/auth") | 
|     @ManagerAuth | 
|     public R update(TaskWrk taskWrk){ | 
|         if (Cools.isEmpty(taskWrk) || null == taskWrk.getTaskNo()) { | 
|             return R.error(); | 
|         } | 
|         taskWrkService.updateById(taskWrk); | 
|         return R.ok(); | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrk/updatePoint/auth") | 
|     @ManagerAuth | 
|     public R updatePoint(TaskWrk taskWrk){ | 
|         if (Cools.isEmpty(taskWrk) || null == taskWrk.getTaskNo()) { | 
|             return R.error(); | 
|         } | 
|         TaskWrk taskWrk1 = taskWrkService.selectByTaskNo(taskWrk.getTaskNo()); | 
|         if (taskWrk1 == null) { | 
|             return R.error(); | 
|         } | 
|         taskWrk1.setStartPoint(taskWrk.getStartPoint()); | 
|         taskWrk1.setTargetPoint(taskWrk.getTargetPoint()); | 
|         taskWrk1.setModiTime(new Date()); | 
|         taskWrk1.setModiUser(getUserId()); | 
|         taskWrkService.updateById(taskWrk1); | 
|         return R.ok(); | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrk/addTask/auth") | 
|     @ManagerAuth | 
|     public R addTaskPoint(CarryParam param){ | 
|         try{ | 
|             param.updateIoTyoe(param.getIoType());//中航下发  1:出库,2:移库 3:入库   ====转换为====>  1:入库,2:出库,3:移库 | 
|             param.updateLocNo(); | 
|             if (Cools.isEmpty(param)){ | 
|                 return R.error("参数为空!"); | 
|             } else if (Cools.isEmpty(param.getTaskNo())){ | 
|                 return R.error("任务号为空!"); | 
|             } else if (Cools.isEmpty(param.getIoType())){ | 
|                 return R.error("任务类型为空!"); | 
|             } | 
|             if (Cools.isEmpty(param.getStartPoint()) || Cools.isEmpty(param.getTargetPoint())){ | 
|                 return R.error("初始目标或者目标位为空"); | 
|             } | 
|   | 
|   | 
|             String locNo=null; | 
|             if(param.getIoType()==1){ | 
|                 locNo=param.getTargetPoint(); | 
|             }else{ | 
|                 locNo=param.getStartPoint(); | 
|             } | 
|             LocMast locMast = locMastService.selectByLocNo(locNo); | 
|             if(Cools.isEmpty(locMast)){ | 
|                 return R.error("初始库位无法找到"); | 
|             } | 
|   | 
|             R r = null; | 
|   | 
|             if(param.getIoType() == 1){ | 
|                 //入库任务创建 | 
|                 StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() | 
|                         .eq("type_no",1) | 
|                         .eq("crn_no",locMast.getCrnNo()) | 
|                         .eq("stn_no",param.getStartPoint())); | 
|                 if(Cools.isEmpty(staDesc)){ | 
|                     return R.error("入库路劲不存在"); | 
|                 } | 
|                 r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo(),staDesc.getCrnStn())); | 
|   | 
|             }else if(param.getIoType() == 2){ | 
|                 //出库任务创建 | 
|                 StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() | 
|                         .eq("type_no",2) | 
|                         .eq("crn_no",locMast.getCrnNo()) | 
|                         .eq("stn_no",param.getTargetPoint())); | 
|                 if(Cools.isEmpty(staDesc)){ | 
|                     return R.error("出库路劲不存在"); | 
|                 } | 
|                 r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo(),staDesc.getStnNo())); | 
|             }else if (param.getIoType() == 3){ | 
|                 LocMast locMast2 = locMastService.selectByLocNo(param.getTargetPoint()); | 
|                 if(Cools.isEmpty(locMast2)){ | 
|                     return R.error("目标库位无法找到"); | 
|                 } | 
|                 if (!locMast2.getCrnNo().equals(locMast.getCrnNo())){ | 
|                     return R.error("起始库位与目标库位不再同一巷道"); | 
|                 } | 
|                 //移库任务创建 | 
|                 r = openService.taskCreate(new TaskCreateParam(param,locMast.getCrnNo())); | 
|             } | 
|   | 
|             apiLogService.save("wcs手动生成Wms任务" | 
|                     ,request.getRemoteAddr()+request.getRequestURI() | 
|                     ,null | 
|                     ,request.getRemoteAddr() | 
|                     ,JSON.toJSONString(param) | 
|                     ,r.toString() | 
|                     ,true | 
|             ); | 
|         } catch (Exception e){ | 
|   | 
|         } | 
|         return R.ok(); | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrk/delete/auth") | 
|     @ManagerAuth | 
|     public R delete(@RequestParam String taskNo){ | 
| //         for (Long id : ids){ | 
| //            taskWrkService.deleteById(id); | 
| //        } | 
|         TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); | 
|         if (taskWrk == null) { | 
|             return R.error(); | 
|         } | 
|         Date now = new Date(); | 
|         taskWrk.setMemo("手动强制删除!!!"); | 
|         taskWrk.setModiTime(now); | 
|         taskWrk.setModiUser(getUserId()); | 
|         taskWrk.setCompleteTime(now); | 
|         taskWrk.setCancelTime(now); | 
|         if (!taskWrkService.updateById(taskWrk)){ | 
|             log.error("删除失败" + taskWrk); | 
|             return R.error("删除失败" + taskWrk); | 
|   | 
|         } | 
|         if (taskWrkService.saveToHistoryD(taskWrk.getTaskNo()) == 0) { | 
|             log.error("任务档转任务历史档失败" + taskWrk); | 
|             return R.error("任务档转任务历史档失败" + taskWrk); | 
|   | 
|         } | 
|         //删除任务 | 
|         taskWrkService.delete(new EntityWrapper<TaskWrk>().eq("task_no", taskWrk.getTaskNo())); | 
|         return R.ok(); | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrk/export/auth") | 
|     @ManagerAuth | 
|     public R export(@RequestBody JSONObject param){ | 
|         EntityWrapper<TaskWrk> wrapper = new EntityWrapper<>(); | 
|         List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); | 
|         Map<String, Object> map = excludeTrash(param.getJSONObject("taskWrk")); | 
|         convert(map, wrapper); | 
|         List<TaskWrk> list = taskWrkService.selectList(wrapper); | 
|         return R.ok(exportSupport(list, fields)); | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrkQuery/auth") | 
|     @ManagerAuth | 
|     public R query(String condition) { | 
|         EntityWrapper<TaskWrk> wrapper = new EntityWrapper<>(); | 
|         wrapper.like("id", condition); | 
|         Page<TaskWrk> page = taskWrkService.selectPage(new Page<>(0, 10), wrapper); | 
|         List<Map<String, Object>> result = new ArrayList<>(); | 
|         for (TaskWrk taskWrk : page.getRecords()){ | 
|             Map<String, Object> map = new HashMap<>(); | 
|             map.put("id", taskWrk.getTaskNo()); | 
|             map.put("value", taskWrk.getTaskNo()); | 
|             result.add(map); | 
|         } | 
|         return R.ok(result); | 
|     } | 
|   | 
|     @RequestMapping(value = "/taskWrk/check/column/auth") | 
|     @ManagerAuth | 
|     public R query(@RequestBody JSONObject param) { | 
|         Wrapper<TaskWrk> wrapper = new EntityWrapper<TaskWrk>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); | 
|         if (null != taskWrkService.selectOne(wrapper)){ | 
|             return R.parse(BaseRes.REPEAT).add(getComment(TaskWrk.class, String.valueOf(param.get("key")))); | 
|         } | 
|         return R.ok(); | 
|     } | 
|   | 
|     @PostMapping(value = "/taskWrk/distribute/auth") | 
|     @ManagerAuth(memo = "手动派发任务") | 
|     public R distribute(@RequestParam String taskNo) { | 
|         taskWrkService.distribute(taskNo, getUserId()); | 
|         return R.ok(); | 
|     } | 
|   | 
|     @PostMapping(value = "/taskWrk/complete/auth") | 
|     @ManagerAuth(memo = "手动完成任务") | 
|     public R complete(@RequestParam String taskNo) { | 
|         TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); | 
|         if ((Cools.isEmpty(taskWrk) || taskWrk.getStatus()>=3) && !taskWrk.getStatus().equals(TaskStatusType.OVER3.id)){ | 
|             return R.error("已完结或已取消") ; | 
|         } | 
|         LocMast locMast=new LocMast(); | 
|         if(taskWrk.getIoType()==1){//入库任务完成库位为F | 
|             locMast=locMastService.selectByLocNo(taskWrk.getTargetPoint()); | 
|             if(Cools.isEmpty(locMast)){ | 
|               R.error("没有找到该库位") ; | 
|             } | 
|             locMast.setLocSts("F"); | 
|             locMast.setModiTime(new Date()); | 
|             locMast.setBarcode(taskWrk.getBarcode()); | 
|         }else if(taskWrk.getIoType()==2){//出库任务完成库位为O | 
|             locMast=locMastService.selectByLocNo(taskWrk.getStartPoint()); | 
|             if(Cools.isEmpty(locMast)){ | 
|                 R.error("没有找到该库位") ; | 
|             } | 
|             locMast.setLocSts("O"); | 
|             locMast.setModiTime(new Date()); | 
|         }else if(taskWrk.getIoType()==3){ | 
|             locMast=locMastService.selectByLocNo(taskWrk.getStartPoint()); | 
|             if(Cools.isEmpty(locMast)){ | 
|                 R.error("没有找到该库位") ; | 
|             } | 
|             locMast.setLocSts("O"); | 
|             locMast.setModiTime(new Date()); | 
|             locMastService.updateById(locMast); | 
|             locMast=locMastService.selectByLocNo(taskWrk.getTargetPoint()); | 
|             if(Cools.isEmpty(locMast)){ | 
|                 R.error("没有找到该库位") ; | 
|             } | 
|             locMast.setLocSts("F"); | 
|             locMast.setModiTime(new Date()); | 
|             locMast.setBarcode(taskWrk.getBarcode()); | 
|   | 
|         } | 
|         String response=""; | 
|   | 
|         Date now = new Date(); | 
|         locMast.setModiTime(now); | 
|         taskWrk.setStatus(TaskStatusType.OVER2.id);//手动完成任务 | 
|         taskWrk.setModiTime(now); | 
|         taskWrk.setCompleteTime(now); | 
| //        try{ | 
| //            HashMap<String, Object> headParam = new HashMap<>(); | 
| //            headParam.put("taskNo",taskWrk.getTaskNo()); | 
| //            headParam.put("taskStatus",taskWrk.getStatusWms()); | 
| //            headParam.put("ioType",taskWrk.getIoTypeWms()); | 
| //            headParam.put("barCode",taskWrk.getBarcode()); | 
| //            headParam.put("reportTime", LocalDateTime.now()); | 
| //            headParam.put("weight",taskWrk.getScWeight().doubleValue()); | 
| // | 
| //            log.info("wcs手动完成任务上报wms={}", taskWrk); | 
| //            response = new HttpHandler.Builder() | 
| //                    // .setHeaders(headParam) | 
| //                    .setUri(wmsUrl) | 
| //                    .setPath(taskStatusFeedbackPath) | 
| //                    .setJson(JSON.toJSONString(headParam)) | 
| //                    .build() | 
| //                    .doPost(); | 
| // | 
| //            JSONObject jsonObject = JSON.parseObject(response); | 
| //            apiLogService.save("wcs手动完成任务上报wms" | 
| //                    ,wmsUrl+taskStatusFeedbackPath | 
| //                    ,null | 
| //                    ,"127.0.0.1" | 
| //                    ,JSON.toJSONString(headParam) | 
| //                    ,response | 
| //                    ,true | 
| //            ); | 
| //        }catch (Exception e){ | 
| //            log.error("wcs手动完成任务上报wms失{},返回值={}", taskWrk,response); | 
| ////            throw new CoolException(e); | 
| //        } | 
|         locMastService.updateById(locMast); | 
|         taskWrkService.updateById(taskWrk); | 
|         return R.ok(); | 
|     } | 
|   | 
|     @PostMapping(value = "/taskWrk/cancel/auth") | 
|     @ManagerAuth(memo = "手动取消任务") | 
|     public R cancel(@RequestParam String taskNo) { | 
|         TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); | 
|         if (taskWrk == null) { | 
|             return R.error(); | 
|         } | 
|         if (taskWrk.getStatus().equals(TaskStatusType.CANCEL.id)) { | 
|             return R.error(taskWrk.getTaskNo() + "已被取消"); | 
|         } | 
|         Date now = new Date(); | 
|         taskWrk.setStatus(TaskStatusType.CANCEL.id); | 
|         taskWrk.setModiTime(now);//操作时间 | 
|         taskWrk.setCancelTime(now); | 
|         try{ | 
|             taskWrk.setModiUser(getUserId());//操作员 | 
|         }catch (Exception e){ | 
|             taskWrk.setModiUser(1111L);//操作员 | 
|         } | 
|         String response=""; | 
| //        try{ | 
| //            HashMap<String, Object> headParam = new HashMap<>(); | 
| //            headParam.put("taskNo",taskWrk.getTaskNo()); | 
| //            headParam.put("taskStatus",taskWrk.getStatusWms()); | 
| //            headParam.put("ioType",taskWrk.getIoTypeWms()); | 
| //            headParam.put("barCode",taskWrk.getBarcode()); | 
| //            headParam.put("reportTime", LocalDateTime.now()); | 
| //            headParam.put("weight",taskWrk.getScWeight().doubleValue()); | 
| // | 
| // | 
| //            log.info("wcs手动取消任务上报wm={}", taskWrk); | 
| //            response = new HttpHandler.Builder() | 
| //                    // .setHeaders(headParam) | 
| //                    .setUri(wmsUrl) | 
| //                    .setPath(taskStatusFeedbackPath) | 
| //                    .setJson(JSON.toJSONString(headParam)) | 
| //                    .build() | 
| //                    .doPost(); | 
| //            JSONObject jsonObject = JSON.parseObject(response); | 
| //            apiLogService.save("wcs手动取消任务上报wms" | 
| //                    ,wmsUrl+taskStatusFeedbackPath | 
| //                    ,null | 
| //                    ,"127.0.0.1" | 
| //                    ,JSON.toJSONString(headParam) | 
| //                    ,response | 
| //                    ,true | 
| //            ); | 
| //        }catch (Exception e){ | 
| //            log.error("wcs手动取消任务上报wms失败={},返回值={}", taskWrk,response); | 
| ////            throw new CoolException(e); | 
| //        } | 
|         taskWrk.setCompleteTime(now);//完结时间 | 
|         taskWrkService.updateById(taskWrk); | 
|         return R.ok(); | 
|     } | 
|   | 
|     public static String getTaskType(Integer paramIoType){ | 
|         switch (paramIoType){ | 
|             case 1: | 
|                 return "RK"; | 
|             case 2: | 
|                 return "CK"; | 
|             case 3: | 
|                 return "YK"; | 
|             default: | 
|                 return "未知"; | 
|         } | 
|     } | 
|     @PostMapping(value = "/taskWrk/returnWorkingCondition/auth") | 
|     @ManagerAuth(memo = "重新给堆垛机下发任务") | 
|     public R returnWorkingCondition(@RequestParam String taskNo) { | 
|         TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); | 
|         if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts()==12){ | 
|             taskWrk.setWrkSts(11); | 
|             if(!taskWrkService.updateById(taskWrk)){ | 
|                 return R.error("更新任务状态失败"); | 
|             } | 
|             return R.ok(); | 
|         } else if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts()==3) { | 
|             taskWrk.setWrkSts(2); | 
|             taskWrk.setStatus(TaskStatusType.RECEIVE.id);//派发状态 | 
|             taskWrkService.updateById(taskWrk); | 
|             if(!taskWrkService.updateById(taskWrk)){ | 
|                 return R.error("更新任务状态失败"); | 
|             } | 
|             return R.ok(); | 
|         }else{ | 
|             return R.error("任务状态不对无法重新给堆垛机下发任务"); | 
|         } | 
|   | 
|     } | 
|     @PostMapping(value = "/taskWrk/assign/auth") | 
|     @ManagerAuth(memo = "输送线下发完成") | 
|     public R returnAssign(@RequestParam String taskNo) { | 
|         TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); | 
|         if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts()==1){ | 
|             taskWrk.setStatus(TaskStatusType.RECEIVE.id);//派发状态 | 
|             taskWrk.setWrkSts(2); | 
|             if(!taskWrkService.updateById(taskWrk)){ | 
|                 return R.error("更新任务状态失败"); | 
|             } | 
|             return R.ok(); | 
|         }else{ | 
|             return R.error("任务状态不对无法跳转"); | 
|         } | 
|   | 
|     } | 
|   | 
|   | 
| } |