Przeglądaj źródła

agv工时统计beta版

yejian016332 4 lat temu
rodzic
commit
ea260b0837
21 zmienionych plików z 1743 dodań i 34 usunięć
  1. 31 0
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/dao/AgvHikOrderDetailInfoMapper.java
  2. 28 0
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/dao/AgvHikOrderInfoMapper.java
  3. 39 0
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/AgvHikOrderDetailInfoService.java
  4. 36 0
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/AgvHikOrderInfoService.java
  5. 63 0
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderDetailInfoServiceImpl.java
  6. 61 0
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderInfoServiceImpl.java
  7. 67 0
      imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/externalApi/AgvHikOrderDetailInfoMapper.xml
  8. 5 0
      imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/externalApi/AgvHikOrderInfoMapper.xml
  9. 91 0
      imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/AgvHikOrderDetailInfoController.java
  10. 221 0
      imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/HikAgvControl.java
  11. 125 0
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderDetailInfoPageDTO.java
  12. 120 0
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderDetailInfoSaveDTO.java
  13. 126 0
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderDetailInfoUpdateDTO.java
  14. 111 0
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderInfoPageDTO.java
  15. 110 0
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderInfoSaveDTO.java
  16. 116 0
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderInfoUpdateDTO.java
  17. 158 0
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/entity/AgvHikOrderDetailInfo.java
  18. 134 0
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/entity/AgvHikOrderInfo.java
  19. 1 1
      imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/entity/WmsOrderInfo.java
  20. 44 0
      imcs-admin-boot/imcs-common/src/main/java/com/github/zuihou/common/constant/HikR.java
  21. 56 33
      imcs-admin-boot/imcs-common/src/main/java/com/github/zuihou/common/util/DateUtil.java

+ 31 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/dao/AgvHikOrderDetailInfoMapper.java

@@ -0,0 +1,31 @@
+package com.github.zuihou.business.externalApi.dao;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.github.zuihou.base.mapper.SuperMapper;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderDetailInfo;
+import com.github.zuihou.business.externalApi.entity.AgvOrderDetailInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * Mapper 接口
+ * 出入库管理
+ * </p>
+ *
+ * @author imcs
+ * @date 2021-07-12
+ */
+@Repository
+public interface AgvHikOrderDetailInfoMapper extends SuperMapper<AgvHikOrderDetailInfo> {
+    /**
+     * 分页
+     */
+    IPage<AgvHikOrderDetailInfo> pageList(IPage page, @Param(Constants.WRAPPER) Wrapper<AgvHikOrderDetailInfo> queryWrapper);
+
+}

+ 28 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/dao/AgvHikOrderInfoMapper.java

@@ -0,0 +1,28 @@
+package com.github.zuihou.business.externalApi.dao;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.github.zuihou.base.mapper.SuperMapper;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderInfo;
+import com.github.zuihou.business.externalApi.entity.AgvOrderInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * Mapper 接口
+ * 出入库管理
+ * </p>
+ *
+ * @author imcs
+ * @date 2021-07-12
+ */
+@Repository
+public interface AgvHikOrderInfoMapper extends SuperMapper<AgvHikOrderInfo> {
+
+    /**
+     * 分页
+     */
+    IPage<AgvHikOrderInfo> pageList(IPage page, @Param(Constants.WRAPPER) Wrapper<AgvHikOrderInfo> queryWrapper);
+}

+ 39 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/AgvHikOrderDetailInfoService.java

@@ -0,0 +1,39 @@
+package com.github.zuihou.business.externalApi.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.zuihou.base.service.SuperCacheService;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderDetailInfo;
+import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 业务接口
+ * agv任务管理
+ * </p>
+ *
+ * @author imcs
+ * @date 2021-12-28
+ */
+public interface AgvHikOrderDetailInfoService extends SuperCacheService<AgvHikOrderDetailInfo> {
+
+    IPage<AgvHikOrderDetailInfo> pageList(IPage page, LbqWrapper<AgvHikOrderDetailInfo> wrapper);
+
+    /**
+     * 保存
+     *
+     * @param agvHikOrderDetailInfo
+     * @return
+     */
+    AgvHikOrderDetailInfo saveAgvOrderDetailInfo(AgvHikOrderDetailInfo agvHikOrderDetailInfo);
+
+    /**
+     * 修改
+     * @param agvHikOrderDetailInfo
+     */
+    AgvHikOrderDetailInfo updateAgvOrderDetailInfo(AgvHikOrderDetailInfo agvHikOrderDetailInfo);
+
+
+}

+ 36 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/AgvHikOrderInfoService.java

@@ -0,0 +1,36 @@
+package com.github.zuihou.business.externalApi.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.zuihou.base.service.SuperCacheService;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderInfo;
+import com.github.zuihou.business.externalApi.entity.AgvOrderInfo;
+import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
+
+/**
+ * <p>
+ * 业务接口
+ * agv任务管理
+ * </p>
+ *
+ * @author imcs
+ * @date 2021-12-28
+ */
+public interface AgvHikOrderInfoService extends SuperCacheService<AgvHikOrderInfo> {
+
+    IPage<AgvHikOrderInfo> pageList(IPage page, LbqWrapper<AgvHikOrderInfo> wrapper);
+
+    /**
+     * 保存
+     *
+     * @param agvHikOrderInfo
+     * @return
+     */
+    AgvHikOrderInfo saveAgvOrderInfo(AgvHikOrderInfo agvHikOrderInfo);
+
+    /**
+     * 修改
+     * @param agvHikOrderInfo
+     */
+    AgvHikOrderInfo updateAgvOrderInfo(AgvHikOrderInfo agvHikOrderInfo);
+
+}

+ 63 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderDetailInfoServiceImpl.java

@@ -0,0 +1,63 @@
+package com.github.zuihou.business.externalApi.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.zuihou.base.service.SuperCacheServiceImpl;
+import com.github.zuihou.business.externalApi.dao.AgvHikOrderDetailInfoMapper;
+import com.github.zuihou.business.externalApi.dao.AgvOrderDetailInfoMapper;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderDetailInfo;
+import com.github.zuihou.business.externalApi.service.AgvHikOrderDetailInfoService;
+import com.github.zuihou.business.externalApi.service.AgvOrderDetailInfoService;
+import com.github.zuihou.common.constant.CacheKey;
+import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
+import com.github.zuihou.injection.annonation.InjectionResult;
+import com.github.zuihou.utils.BeanPlusUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 业务实现类
+ * agv任务管理
+ * </p>
+ *
+ * @author imcs
+ * @date 2021-12-28
+ */
+@Slf4j
+@Service
+
+public class AgvHikOrderDetailInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrderDetailInfoMapper, AgvHikOrderDetailInfo> implements AgvHikOrderDetailInfoService {
+
+    @Override
+    protected String getRegion() {
+        return CacheKey.USER;
+    }
+
+    @Override
+    @InjectionResult
+    public IPage<AgvHikOrderDetailInfo> pageList(IPage page, LbqWrapper<AgvHikOrderDetailInfo> wrapper) {
+        return baseMapper.pageList(page, wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AgvHikOrderDetailInfo saveAgvOrderDetailInfo(AgvHikOrderDetailInfo data) {
+        AgvHikOrderDetailInfo agvHikOrderDetailInfo = BeanUtil.toBean(data, AgvHikOrderDetailInfo.class);
+        super.save(agvHikOrderDetailInfo);
+        return agvHikOrderDetailInfo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AgvHikOrderDetailInfo updateAgvOrderDetailInfo(AgvHikOrderDetailInfo data) {
+        AgvHikOrderDetailInfo agvHikOrderDetailInfo = BeanPlusUtil.toBean(data, AgvHikOrderDetailInfo.class);
+        updateById(agvHikOrderDetailInfo);
+        return agvHikOrderDetailInfo;
+    }
+
+}

+ 61 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderInfoServiceImpl.java

@@ -0,0 +1,61 @@
+package com.github.zuihou.business.externalApi.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.zuihou.base.service.SuperCacheServiceImpl;
+import com.github.zuihou.business.externalApi.dao.AgvHikOrderInfoMapper;
+import com.github.zuihou.business.externalApi.dao.AgvOrderInfoMapper;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderInfo;
+import com.github.zuihou.business.externalApi.entity.AgvOrderInfo;
+import com.github.zuihou.business.externalApi.service.AgvHikOrderInfoService;
+import com.github.zuihou.business.externalApi.service.AgvOrderInfoService;
+import com.github.zuihou.common.constant.CacheKey;
+import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
+import com.github.zuihou.injection.annonation.InjectionResult;
+import com.github.zuihou.utils.BeanPlusUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * <p>
+ * 业务实现类
+ * 出入库管理
+ * </p>
+ *
+ * @author imcs
+ * @date 2021-12-28
+ */
+@Slf4j
+@Service
+
+public class AgvHikOrderInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrderInfoMapper, AgvHikOrderInfo> implements AgvHikOrderInfoService {
+
+    @Override
+    protected String getRegion() {
+        return CacheKey.USER;
+    }
+
+    @Override
+    @InjectionResult
+    public IPage<AgvHikOrderInfo> pageList(IPage page, LbqWrapper<AgvHikOrderInfo> wrapper) {
+        return baseMapper.pageList(page, wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AgvHikOrderInfo saveAgvOrderInfo(AgvHikOrderInfo data) {
+        AgvHikOrderInfo agvHikOrderInfo = BeanUtil.toBean(data, AgvHikOrderInfo.class);
+        super.save(agvHikOrderInfo);
+        return agvHikOrderInfo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AgvHikOrderInfo updateAgvOrderInfo(AgvHikOrderInfo data) {
+        AgvHikOrderInfo agvHikOrderInfo  = BeanPlusUtil.toBean(data, AgvHikOrderInfo.class);
+        updateById(agvHikOrderInfo);
+
+        return agvHikOrderInfo;
+    }
+}

+ 67 - 0
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/externalApi/AgvHikOrderDetailInfoMapper.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.github.zuihou.business.externalApi.dao.AgvHikOrderDetailInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.github.zuihou.business.externalApi.entity.AgvHikOrderDetailInfo">
+        <result column="id" jdbcType="BIGINT" property="id"/>
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="create_user" jdbcType="BIGINT" property="createUser"/>
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="update_user" jdbcType="BIGINT" property="updateUser"/>
+        <result column="update_user" jdbcType="BIGINT" property="updateUser"/>
+        <result column="req_code" jdbcType="BIGINT" property="reqCode"/>
+        <result column="request_code" jdbcType="VARCHAR" property="requestCode"/>
+        <result column="request_message" jdbcType="VARCHAR" property="requestMessage"/>
+        <result column="task_code" jdbcType="VARCHAR" property="taskCode"/>
+        <result column="request_time" jdbcType="VARCHAR" property="requestTime"/>
+        <result column="callback_code" jdbcType="VARCHAR" property="callbackCode"/>
+        <result column="callback_message" jdbcType="VARCHAR" property="callbackMessage"/>
+        <result column="callback_time" jdbcType="VARCHAR" property="callbackTime"/>
+        <result column="coo_x" jdbcType="VARCHAR" property="cooX"/>
+        <result column="coo_y" jdbcType="VARCHAR" property="cooY"/>
+        <result column="current_position_code" jdbcType="VARCHAR" property="currentPositionCode"/>
+        <result column="map_code" jdbcType="VARCHAR" property="mapCode"/>
+        <result column="map_data_code" jdbcType="VARCHAR" property="mapDataCode"/>
+        <result column="method" jdbcType="VARCHAR" property="method"/>
+        <result column="robot_code" jdbcType="VARCHAR" property="robotCode"/>
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,create_time,create_user,update_time,update_user,reqCode,requestCode,requestMessage,taskCode,requestTime,
+        callbackCode,callbackMessage,callbackTime,cooX,cooY,currentPositionCode,mapCode,mapDataCode,method,robotCode
+    </sql>
+
+    <!-- 分页 -->
+    <select id="pageList" resultMap="BaseResultMap">
+        SELECT
+        1 as id,tmp5.statisticalDate,SUM(tmp5.statisticalHours) as statisticalHours
+        FROM (SELECT
+        tmp3.statisticalDate,
+        tmp3.task_code,
+        TIMESTAMPDIFF(MINUTE, tmp3.request_time, tmp4.request_time) / 60 AS statisticalHours
+        FROM (SELECT
+        tmp1.statisticalDate,
+        tmp1.task_code,
+        tmp1.request_time
+        FROM (SELECT
+        left( a.request_time,7) AS statisticalDate,
+        a.task_code,
+        a.request_time,
+        a.method
+        FROM imcs_hik_agv_detail_info a where a.method = 'start') tmp1 ${ew.customSqlSegment} ) tmp3
+        LEFT JOIN (SELECT
+        tmp2.task_code,
+        tmp2.request_time
+        FROM (SELECT
+        left( b.request_time,7) AS statisticalDate,
+        b.task_code,
+        b.request_time,
+        b.method
+        FROM imcs_hik_agv_detail_info b where b.method = 'end') tmp2 ${ew.customSqlSegment} ) tmp4
+        ON tmp3.task_code = tmp4.task_code) tmp5
+    </select>
+
+
+</mapper>

+ 5 - 0
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/externalApi/AgvHikOrderInfoMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.github.zuihou.business.externalApi.dao.AgvHikOrderInfoMapper">
+
+</mapper>

+ 91 - 0
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/AgvHikOrderDetailInfoController.java

@@ -0,0 +1,91 @@
+package com.github.zuihou.business.controller.externalApi;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.zuihou.base.R;
+import com.github.zuihou.base.controller.SuperController;
+import com.github.zuihou.base.request.PageParams;
+import com.github.zuihou.business.externalApi.dto.AgvHikOrderDetailInfoPageDTO;
+import com.github.zuihou.business.externalApi.dto.AgvHikOrderDetailInfoSaveDTO;
+import com.github.zuihou.business.externalApi.dto.AgvHikOrderDetailInfoUpdateDTO;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderDetailInfo;
+import com.github.zuihou.business.externalApi.service.AgvHikOrderDetailInfoService;
+import com.github.zuihou.business.operationManagementCenter.dto.OrderQualityPageDTO;
+import com.github.zuihou.business.operationManagementCenter.dto.OrderQualitySaveDTO;
+import com.github.zuihou.business.operationManagementCenter.dto.OrderQualityUpdateDTO;
+import com.github.zuihou.business.operationManagementCenter.entity.OrderQuality;
+import com.github.zuihou.business.operationManagementCenter.service.OrderQualityService;
+import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
+import com.github.zuihou.database.mybatis.conditions.query.QueryWrap;
+import com.github.zuihou.file.entity.File;
+import com.github.zuihou.log.annotation.SysLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import jcifs.smb.NtlmPasswordAuthentication;
+import jcifs.smb.SmbFile;
+import jcifs.smb.SmbFileInputStream;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 前端控制器
+ * agv工时管理
+ * </p>
+ *
+ * @author imcs
+ * @date 2021-12-28
+ */
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/agvHikOrderDetailInfo")
+@Api(value = "task", tags = "测量")
+@SysLog(enabled = true)
+public class AgvHikOrderDetailInfoController extends SuperController<AgvHikOrderDetailInfoService, Long, AgvHikOrderDetailInfo, AgvHikOrderDetailInfoPageDTO, AgvHikOrderDetailInfoSaveDTO, AgvHikOrderDetailInfoUpdateDTO> {
+
+    @Override
+    public void query(PageParams<AgvHikOrderDetailInfoPageDTO> params, IPage<AgvHikOrderDetailInfo> page, Long defSize) {
+        AgvHikOrderDetailInfoPageDTO data = params.getModel();
+        QueryWrap<AgvHikOrderDetailInfo> wrap = handlerWrapper(null, params);
+        LbqWrapper<AgvHikOrderDetailInfo> wrapper = wrap.lambda();
+        AgvHikOrderDetailInfo agvHikOrderDetailInfo = BeanUtil.toBean(data, AgvHikOrderDetailInfo.class);
+        String statisticalBeginDate;
+        String statisticalEndDate;
+        if(null == data.getStatisticalDate()){
+            statisticalBeginDate = com.github.zuihou.common.util.DateUtil.beginMonthTime(new Date());
+            statisticalEndDate = com.github.zuihou.common.util.DateUtil.endMonthTime(new Date());
+        }else{
+            Date searchDate = com.github.zuihou.common.util.DateUtil.stringToDate0(data.getStatisticalDate(),"yyyy-MM");
+            statisticalBeginDate = com.github.zuihou.common.util.DateUtil.beginMonthTime(searchDate);
+            statisticalEndDate =  com.github.zuihou.common.util.DateUtil.endMonthTime(searchDate);
+        }
+        wrapper.between(AgvHikOrderDetailInfo::getRequestTime,statisticalBeginDate,statisticalEndDate);
+        baseService.pageList(page, wrapper);
+    }
+
+    private static int getFirstDayOfMonth(Date date){
+        return DateUtil.beginOfMonth(date).dayOfMonth();
+    }
+
+    private static int getLastDayOfMonth(Date date){
+        return DateUtil.endOfMonth(date).dayOfMonth();
+    }
+}

+ 221 - 0
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/HikAgvControl.java

@@ -0,0 +1,221 @@
+package com.github.zuihou.business.controller.externalApi;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.github.zuihou.authority.service.common.ParameterService;
+import com.github.zuihou.base.R;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderDetailInfo;
+import com.github.zuihou.business.externalApi.entity.AgvHikOrderInfo;
+import com.github.zuihou.business.externalApi.entity.AgvOrderDetailInfo;
+import com.github.zuihou.business.externalApi.entity.AgvOrderInfo;
+import com.github.zuihou.business.externalApi.service.*;
+import com.github.zuihou.common.constant.HikR;
+import com.github.zuihou.common.constant.ParameterKey;
+import com.github.zuihou.common.enums.AgvActionEnum;
+import com.github.zuihou.common.enums.AgvLocationRelationEnum;
+import com.github.zuihou.common.util.StringUtil;
+import com.github.zuihou.context.BaseContextHandler;
+import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
+import com.github.zuihou.log.annotation.SysLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.util.Calendar;
+import java.util.Map;
+
+/**
+ * <p>
+ * 前端控制器
+ * agv交互
+ * </p>
+ *
+ * @author imcs
+ * @date 2021-07-09
+ */
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/agv/agvCallbackService")
+@Api(value = "AgvInfo", tags = "agv交互")
+@SysLog(enabled = true)
+public class HikAgvControl {
+    @Autowired
+    private RedisTemplate<String,Object> redisTemplate;
+    @Resource
+    private RestTemplate restTemplate;
+    @Autowired
+    private ParameterService parameterService;
+    @Autowired
+    private AgvHikOrderDetailInfoService agvHikOrderDetailInfoService;
+    @Autowired
+    private AgvHikOrderInfoService agvHikOrderInfoService;
+    @Autowired
+    private ExternalApiService externalApiService;
+
+    @ApiOperation(value = "agv任务完成回调", notes = "agv任务完成回调")
+    @PostMapping("/agvCallback")
+    public HikR agvCallback(@RequestBody Map<String, String> data) {
+        log.info("接收到agv任务回调,参数是{}", data.toString());
+        BaseContextHandler.setTenant("0000");
+        // 判断回调内容是否正确
+        // agv 任务id
+        String taskCode = null == data.get("taskCode") ? "":data.get("taskCode");
+        String code = null == data.get("code") ? "":data.get("code");
+        String msg =  null == data.get("msg") ? "":data.get("msg");
+        if(StringUtil.isEmpty(taskCode)){
+            return HikR.fail("任务单号为空");
+        }
+        if(StringUtil.isEmpty(code)){
+            return HikR.fail("任务状态码为空");
+        }
+
+        LbqWrapper<AgvHikOrderDetailInfo> wrapper = new LbqWrapper<>();
+        wrapper.eq(AgvHikOrderDetailInfo::getTaskCode, Integer.valueOf(taskCode));
+        AgvHikOrderDetailInfo agvHikOrderDetailInfo = agvHikOrderDetailInfoService.getOne(wrapper);
+        if(null != agvHikOrderDetailInfo){
+            AgvHikOrderDetailInfo callbackInfo = JSONObject.parseObject(JSONObject.toJSONString(data),AgvHikOrderDetailInfo.class);
+            BeanUtil.copyProperties(agvHikOrderDetailInfo,callbackInfo);
+            agvHikOrderDetailInfoService.updateAllById(agvHikOrderDetailInfo);
+//            return R.success();
+        }else{
+            return HikR.fail("agv任务不存在");
+        }
+
+        LbqWrapper<AgvHikOrderInfo> agvHikOrderInfoWrapper = new LbqWrapper<AgvHikOrderInfo>();
+        agvHikOrderInfoWrapper.eq(AgvHikOrderInfo::getAgvTaskId, Integer.valueOf(taskCode));
+        AgvHikOrderInfo agvHikOrderInfo = agvHikOrderInfoService.getOne(agvHikOrderInfoWrapper);
+
+        if("0".equals(code)){
+//            redisTemplate.opsForValue().set("agvOkFlag",true);
+            // 读取PLC托板是否放平信号
+            // TODO 待修改
+            Object agvOkObj = redisTemplate.opsForValue().get("agvOkFlag");
+            Boolean agvOkFlag =(agvOkObj==null?true:(Boolean)agvOkObj);
+
+//            Object nodeId = redisTemplate.opsForValue().get(taskId);
+//            String taskNodeId =(nodeId==null?"":nodeId.toString()) ;
+//            String[] taskNodes = taskNodeId.split("-");
+//            if(StringUtil.isEmpty(taskNodeId)){
+//                return R.fail("任务不存在");
+//            }
+            // 托板已经到位
+            Object autoNodeTaskInfo = redisTemplate.opsForValue().get(taskCode);
+            JSONObject autoNodeTaskInfoObj =(autoNodeTaskInfo==null?null:JSONObject.parseObject(autoNodeTaskInfo.toString()));
+
+            if(agvOkFlag){
+                redisTemplate.delete(taskCode);
+                // TODO 记录AGV相关流程日志信息
+                // 指令下发出库完成后回调调度完成后续任务
+                // 从redis里面获取上次出库任务 任务号-任务结点号
+//                return R.success();
+
+                autoNodeTaskInfoObj.put("code","1");
+                HttpHeaders headers = new HttpHeaders();
+                headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
+
+                HttpEntity<String> formEntity = new HttpEntity<String>(autoNodeTaskInfoObj.toJSONString(),headers);
+                String taskNodeCallbackUrl = parameterService.getValue(ParameterKey.TASKNODECALLBACKURL, null);
+                int sendCount = 0;
+                // 解析回调结果
+                boolean flag = repeatSend(taskNodeCallbackUrl,formEntity,sendCount);
+                if(flag){
+                    return HikR.success().setReqCode(agvHikOrderDetailInfo.getReqCode());
+                }else{
+                    // TODO 记录告警日志方便电子看板或者其他地方展示系统通讯异常
+                    return HikR.success().setReqCode(agvHikOrderDetailInfo.getReqCode());
+                }
+            }else{
+                // 托板未到位需重新驱动agv托起托板再次放
+                // 异步唤醒
+                // 查询到上一次任务的重点,发agv重新托起在放
+                if(0 == agvHikOrderInfo.getRepeatActionType()){
+                    String goal = "";
+                    for (AgvLocationRelationEnum agvLocationRelationEnum : AgvLocationRelationEnum.values()) {
+                        if (agvLocationRelationEnum.getPreserveLocation().equals(agvHikOrderInfo.getGoal())){
+                            goal =  agvLocationRelationEnum.getSafeLocation();
+                        }
+                    }
+                    externalApiService.addAgvTask(agvHikOrderInfo.getGoal(), AgvActionEnum.SITUANDUP.getActionId(), goal,0, agvHikOrderInfo.getTaskId(), agvHikOrderInfo.getTaskNodeId(), Integer.valueOf(taskCode),1);
+                }else if(1 == agvHikOrderInfo.getRepeatActionType()){
+
+                    String goal = "";
+                    for (AgvLocationRelationEnum agvLocationRelationEnum : AgvLocationRelationEnum.values()) {
+                        if (agvLocationRelationEnum.getSafeLocation().equals(agvHikOrderInfo.getGoal())){
+                            goal =  agvLocationRelationEnum.getPreserveLocation();
+                        }
+                    }
+                    externalApiService.addAgvTask(agvHikOrderInfo.getGoal(), 0, goal, AgvActionEnum.SITUANDDOWN.getActionId(), agvHikOrderInfo.getTaskId(), agvHikOrderInfo.getTaskNodeId(), agvHikOrderInfo.getParentAgvTaskId(),2);
+                }
+                redisTemplate.delete(taskCode);
+                return HikR.success().setReqCode(agvHikOrderDetailInfo.getReqCode());
+            }
+        }else{
+            // TODO 记录AGV任务异常信息并告警
+            Object autoNodeTaskInfo = redisTemplate.opsForValue().get(taskCode);
+            JSONObject autoNodeTaskInfoObj =(autoNodeTaskInfo==null?null:JSONObject.parseObject(autoNodeTaskInfo.toString()));
+            redisTemplate.delete(taskCode);
+            // TODO 后续改成0失败
+            autoNodeTaskInfoObj.put("code","1");
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
+
+            HttpEntity<String> formEntity = new HttpEntity<String>(autoNodeTaskInfoObj.toJSONString(),headers);
+            String taskNodeCallbackUrl = parameterService.getValue(ParameterKey.TASKNODECALLBACKURL, null);
+            int sendCount = 0;
+            // 解析回调结果
+            boolean flag = repeatSend(taskNodeCallbackUrl,formEntity,sendCount);
+            if(flag){
+                return HikR.success().setReqCode(agvHikOrderDetailInfo.getReqCode());
+            }else{
+                // TODO 记录告警日志方便电子看板或者其他地方展示系统通讯异常
+                return HikR.success().setReqCode(agvHikOrderDetailInfo.getReqCode());
+            }
+        }
+
+    }
+
+    /**
+     * 回调任务是否完成
+     * @param taskNodeCallbackUrl
+     * @param formEntity
+     * @param sendCount
+     * @return
+     */
+    private boolean repeatSend(String taskNodeCallbackUrl, HttpEntity<String> formEntity, int sendCount){
+        sendCount ++;
+        Boolean flag = false;
+        log.info("agv taskNode callback request = {}",formEntity.getBody().toString());
+        String returnData = restTemplate.postForObject(taskNodeCallbackUrl,formEntity, String.class);
+        log.info("agv taskNode callback response = {}",returnData);
+        JSONObject jsonObject = JSONObject.parseObject(returnData);
+        String code = jsonObject.getString("code");
+        // 回调成功
+        if("0".equals(code)){
+            flag =  true;
+            return flag;
+        }else{
+            // 失败重发
+            if(!flag && sendCount < 3){
+                repeatSend(taskNodeCallbackUrl,formEntity,sendCount);
+            }else{
+                return flag;
+            }
+        }
+        return flag;
+    }
+}

+ 125 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderDetailInfoPageDTO.java

@@ -0,0 +1,125 @@
+package com.github.zuihou.business.externalApi.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 实体类
+ * AGV添加任务详情信息
+ * </p>
+ *
+ * @author imcs
+ * @since 2021-12-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@ApiModel(value = "AgvHikOrderDetailInfoSaveDto", description = "agv添加任务申请详情表")
+public class AgvHikOrderDetailInfoPageDTO {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 下单请求编号
+     */
+    @ApiModelProperty(value = "下单请求编号")
+    private Long reqCode;
+
+    /**
+     * 状态码
+     */
+    @ApiModelProperty(value = "下单返回状态码")
+    private String requestCode;
+
+    /**
+     * 状态信息
+     */
+    @ApiModelProperty(value = "下单返回状态信息")
+    private String requestMessage;
+
+    /**
+     *  任务单号
+     */
+    @ApiModelProperty(value = "任务单号")
+    private String taskCode;
+
+    /**
+     * 请求返回时间
+     */
+    @ApiModelProperty(value = "请求返回时间")
+    private String requestTime;
+
+    /**
+     * 回调返回时间
+     */
+    @ApiModelProperty(value = "回调返回时间")
+    @TableField("callback_time")
+    private String callbackTime;
+
+    /**
+     * 回调状态码
+     */
+    @ApiModelProperty(value = "回调状态码")
+    private String callbackCode;
+
+    /**
+     * 回调信息
+     */
+    @ApiModelProperty(value = "回调状态信息")
+    private String callbackMessage;
+
+    /**
+     * 地码 X 坐标
+     */
+    @ApiModelProperty(value = "'地码 X 坐标")
+    private String cooX;
+
+    /**
+     * 地码 Y 坐标
+     */
+    @ApiModelProperty(value = "地码 Y 坐标")
+    private String cooY;
+
+    /**
+     * 当前位置编号
+     */
+    @ApiModelProperty(value = "当前位置编号")
+    private String currentPositionCode;
+
+    /**
+     * 地图编号
+     */
+    @ApiModelProperty(value = "地图编号")
+    private String mapCode;
+
+    /**
+     * 地码编号
+     */
+    @ApiModelProperty(value = "地码编号")
+    private String mapDataCode;
+
+    /**
+     * 方法名
+     */
+    @ApiModelProperty(value = "方法名")
+    private String method;
+
+    /**
+     * AGV 编号
+     */
+    @ApiModelProperty(value = "AGV 编号")
+    private String robotCode;
+
+    /**
+     * 统计月
+     */
+    @ApiModelProperty(value = "统计月")
+    private String statisticalDate;
+}

+ 120 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderDetailInfoSaveDTO.java

@@ -0,0 +1,120 @@
+package com.github.zuihou.business.externalApi.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 实体类
+ * AGV添加任务详情信息
+ * </p>
+ *
+ * @author imcs
+ * @since 2021-07-12
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@ApiModel(value = "AgvOrderDetailInfoSaveDto", description = "agv添加任务申请详情表")
+public class AgvHikOrderDetailInfoSaveDTO {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 下单请求编号
+     */
+    @ApiModelProperty(value = "下单请求编号")
+    private Long reqCode;
+
+    /**
+     * 状态码
+     */
+    @ApiModelProperty(value = "下单返回状态码")
+    private String requestCode;
+
+    /**
+     * 状态信息
+     */
+    @ApiModelProperty(value = "下单返回状态信息")
+    private String requestMessage;
+
+    /**
+     *  任务单号
+     */
+    @ApiModelProperty(value = "任务单号")
+    private String taskCode;
+
+    /**
+     * 请求返回时间
+     */
+    @ApiModelProperty(value = "请求返回时间")
+    private String requestTime;
+
+    /**
+     * 回调返回时间
+     */
+    @ApiModelProperty(value = "回调返回时间")
+    @TableField("callback_time")
+    private String callbackTime;
+
+    /**
+     * 回调状态码
+     */
+    @ApiModelProperty(value = "回调状态码")
+    private String callbackCode;
+
+    /**
+     * 回调信息
+     */
+    @ApiModelProperty(value = "回调状态信息")
+    private String callbackMessage;
+
+    /**
+     * 地码 X 坐标
+     */
+    @ApiModelProperty(value = "'地码 X 坐标")
+    private String cooX;
+
+    /**
+     * 地码 Y 坐标
+     */
+    @ApiModelProperty(value = "地码 Y 坐标")
+    private String cooY;
+
+    /**
+     * 当前位置编号
+     */
+    @ApiModelProperty(value = "当前位置编号")
+    private String currentPositionCode;
+
+    /**
+     * 地图编号
+     */
+    @ApiModelProperty(value = "地图编号")
+    private String mapCode;
+
+    /**
+     * 地码编号
+     */
+    @ApiModelProperty(value = "地码编号")
+    private String mapDataCode;
+
+    /**
+     * 方法名
+     */
+    @ApiModelProperty(value = "方法名")
+    private String method;
+
+    /**
+     * AGV 编号
+     */
+    @ApiModelProperty(value = "AGV 编号")
+    private String robotCode;
+
+}

+ 126 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderDetailInfoUpdateDTO.java

@@ -0,0 +1,126 @@
+package com.github.zuihou.business.externalApi.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 实体类
+ * AGV添加任务详情信息
+ * </p>
+ *
+ * @author imcs
+ * @since 2021-07-12
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@ApiModel(value = "AgvOrderDetailInfoSaveDto", description = "agv添加任务申请详情表")
+public class AgvHikOrderDetailInfoUpdateDTO {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    /**
+     * 下单请求编号
+     */
+    @ApiModelProperty(value = "下单请求编号")
+    private Long reqCode;
+
+    /**
+     * 状态码
+     */
+    @ApiModelProperty(value = "下单返回状态码")
+    private String requestCode;
+
+    /**
+     * 状态信息
+     */
+    @ApiModelProperty(value = "下单返回状态信息")
+    private String requestMessage;
+
+    /**
+     *  任务单号
+     */
+    @ApiModelProperty(value = "任务单号")
+    private String taskCode;
+
+    /**
+     * 请求返回时间
+     */
+    @ApiModelProperty(value = "请求返回时间")
+    private String requestTime;
+
+    /**
+     * 回调返回时间
+     */
+    @ApiModelProperty(value = "回调返回时间")
+    @TableField("callback_time")
+    private String callbackTime;
+
+    /**
+     * 回调状态码
+     */
+    @ApiModelProperty(value = "回调状态码")
+    private String callbackCode;
+
+    /**
+     * 回调信息
+     */
+    @ApiModelProperty(value = "回调状态信息")
+    private String callbackMessage;
+
+    /**
+     * 地码 X 坐标
+     */
+    @ApiModelProperty(value = "'地码 X 坐标")
+    private String cooX;
+
+    /**
+     * 地码 Y 坐标
+     */
+    @ApiModelProperty(value = "地码 Y 坐标")
+    private String cooY;
+
+    /**
+     * 当前位置编号
+     */
+    @ApiModelProperty(value = "当前位置编号")
+    private String currentPositionCode;
+
+    /**
+     * 地图编号
+     */
+    @ApiModelProperty(value = "地图编号")
+    private String mapCode;
+
+    /**
+     * 地码编号
+     */
+    @ApiModelProperty(value = "地码编号")
+    private String mapDataCode;
+
+    /**
+     * 方法名
+     */
+    @ApiModelProperty(value = "方法名")
+    private String method;
+
+    /**
+     * AGV 编号
+     */
+    @ApiModelProperty(value = "AGV 编号")
+    private String robotCode;
+
+}

+ 111 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderInfoPageDTO.java

@@ -0,0 +1,111 @@
+package com.github.zuihou.business.externalApi.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 实体类
+ * AGV添加任务申请信息
+ * </p>
+ *
+ * @author imcs
+ * @since 2021-12-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@ApiModel(value = "AgvHikOrderInfoSaveDto", description = "agv添加任务申请表")
+public class AgvHikOrderInfoPageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 任务起点逻辑库位名称
+     */
+    @ApiModelProperty(value = "任务起点逻辑库位名称")
+    private String start;
+
+    /**
+     * 任务终点逻辑库位名称
+     */
+    @ApiModelProperty(value = "任务终点逻辑库位名称")
+    private String goal;
+
+    /**
+     *  起点动作
+     */
+    @ApiModelProperty(value = "起点动作")
+    private int startAction;
+
+    /**
+     *  终点动作
+     */
+    @ApiModelProperty(value = "终点动作")
+    private int goalAction;
+
+    /**
+     *  下单请求时间
+     */
+    @ApiModelProperty(value = "下单请求时间")
+    private String reqTime;
+
+    /**
+     *  客户端编号
+     */
+    @ApiModelProperty(value = "客户端编号")
+    private String clientCode;
+
+    /**
+     *  令牌号
+     */
+    @ApiModelProperty(value = "令牌号")
+    private String tokenCode;
+
+    /**
+     *  任务类型
+     */
+    @ApiModelProperty(value = "任务类型")
+    private String taskTyp;
+
+    /**
+     *  排产任务号
+     */
+    @ApiModelProperty(value = "排产任务号")
+    private String taskId;
+
+    /**
+     *  排产任务结点号
+     */
+    @ApiModelProperty(value = "排产任务结点号")
+    private String taskNodeId;
+
+
+    /**
+     * agv任务号
+     */
+    @ApiModelProperty(value = "agv任务号")
+    private int agvTaskId;
+
+
+
+    /**
+     * 父agv任务点
+     */
+    @ApiModelProperty(value = "父agv任务点")
+    private int parentAgvTaskId;
+
+    /**
+     *  agv重做动作号
+     */
+    @ApiModelProperty(value = "agv重做动作号 0:agv搬运 1: agv托起托盘到安全位 2:agv重新将托盘放到接驳位" )
+    private int repeatActionType;
+}

+ 110 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderInfoSaveDTO.java

@@ -0,0 +1,110 @@
+package com.github.zuihou.business.externalApi.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 实体类
+ * AGV添加任务申请信息
+ * </p>
+ *
+ * @author imcs
+ * @since 2021-12-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@ApiModel(value = "AgvHikOrderInfoSaveDto", description = "agv添加任务申请表")
+public class AgvHikOrderInfoSaveDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 任务起点逻辑库位名称
+     */
+    @ApiModelProperty(value = "任务起点逻辑库位名称")
+    private String start;
+
+    /**
+     * 任务终点逻辑库位名称
+     */
+    @ApiModelProperty(value = "任务终点逻辑库位名称")
+    private String goal;
+
+    /**
+     *  起点动作
+     */
+    @ApiModelProperty(value = "起点动作")
+    private int startAction;
+
+    /**
+     *  终点动作
+     */
+    @ApiModelProperty(value = "终点动作")
+    private int goalAction;
+
+    /**
+     *  下单请求时间
+     */
+    @ApiModelProperty(value = "下单请求时间")
+    private String reqTime;
+
+    /**
+     *  客户端编号
+     */
+    @ApiModelProperty(value = "客户端编号")
+    private String clientCode;
+
+    /**
+     *  令牌号
+     */
+    @ApiModelProperty(value = "令牌号")
+    private String tokenCode;
+
+    /**
+     *  任务类型
+     */
+    @ApiModelProperty(value = "任务类型")
+    private String taskTyp;
+
+    /**
+     *  排产任务号
+     */
+    @ApiModelProperty(value = "排产任务号")
+    private String taskId;
+
+    /**
+     *  排产任务结点号
+     */
+    @ApiModelProperty(value = "排产任务结点号")
+    private String taskNodeId;
+
+
+    /**
+     * agv任务号
+     */
+    @ApiModelProperty(value = "agv任务号")
+    private int agvTaskId;
+
+
+
+    /**
+     * 父agv任务点
+     */
+    @ApiModelProperty(value = "父agv任务点")
+    private int parentAgvTaskId;
+
+    /**
+     *  agv重做动作号
+     */
+    @ApiModelProperty(value = "agv重做动作号 0:agv搬运 1: agv托起托盘到安全位 2:agv重新将托盘放到接驳位" )
+    private int repeatActionType;
+}

+ 116 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/dto/AgvHikOrderInfoUpdateDTO.java

@@ -0,0 +1,116 @@
+package com.github.zuihou.business.externalApi.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 实体类
+ * AGV添加任务申请信息
+ * </p>
+ *
+ * @author imcs
+ * @since 2021-12-28
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@ApiModel(value = "AgvHikOrderInfoSaveDto", description = "agv添加任务申请表")
+public class AgvHikOrderInfoUpdateDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    /**
+     * 任务起点逻辑库位名称
+     */
+    @ApiModelProperty(value = "任务起点逻辑库位名称")
+    private String start;
+
+    /**
+     * 任务终点逻辑库位名称
+     */
+    @ApiModelProperty(value = "任务终点逻辑库位名称")
+    private String goal;
+
+    /**
+     *  起点动作
+     */
+    @ApiModelProperty(value = "起点动作")
+    private int startAction;
+
+    /**
+     *  终点动作
+     */
+    @ApiModelProperty(value = "终点动作")
+    private int goalAction;
+
+    /**
+     *  下单请求时间
+     */
+    @ApiModelProperty(value = "下单请求时间")
+    private String reqTime;
+
+    /**
+     *  客户端编号
+     */
+    @ApiModelProperty(value = "客户端编号")
+    private String clientCode;
+
+    /**
+     *  令牌号
+     */
+    @ApiModelProperty(value = "令牌号")
+    private String tokenCode;
+
+    /**
+     *  任务类型
+     */
+    @ApiModelProperty(value = "任务类型")
+    private String taskTyp;
+
+    /**
+     *  排产任务号
+     */
+    @ApiModelProperty(value = "排产任务号")
+    private String taskId;
+
+    /**
+     *  排产任务结点号
+     */
+    @ApiModelProperty(value = "排产任务结点号")
+    private String taskNodeId;
+
+
+    /**
+     * agv任务号
+     */
+    @ApiModelProperty(value = "agv任务号")
+    private int agvTaskId;
+
+
+
+    /**
+     * 父agv任务点
+     */
+    @ApiModelProperty(value = "父agv任务点")
+    private int parentAgvTaskId;
+
+    /**
+     *  agv重做动作号
+     */
+    @ApiModelProperty(value = "agv重做动作号 0:agv搬运 1: agv托起托盘到安全位 2:agv重新将托盘放到接驳位" )
+    private int repeatActionType;
+}

+ 158 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/entity/AgvHikOrderDetailInfo.java

@@ -0,0 +1,158 @@
+package com.github.zuihou.business.externalApi.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.github.zuihou.base.entity.Entity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 实体类
+ * AGV添加任务详情信息
+ * </p>
+ *
+ * @author imcs
+ * @since 2021-12-28
+ */
+@Data
+@NoArgsConstructor
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("imcs_hik_agv_detail_info")
+@ApiModel(value = "AgvHikOrderDetailInfo", description = "AGV添加任务详情表")
+@AllArgsConstructor
+public class AgvHikOrderDetailInfo extends Entity<Long> {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    @TableField("id")
+    private Long id;
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "下单请求编号")
+    @TableField("req_code")
+    private String reqCode;
+
+    /**
+     * 状态码
+     */
+    @ApiModelProperty(value = "下单返回状态码")
+    @TableField("request_code")
+    private String requestCode;
+
+    /**
+     * 状态信息
+     */
+    @ApiModelProperty(value = "下单返回状态信息")
+    @TableField("request_message")
+    private String requestMessage;
+
+    /**
+     *  任务单号
+     */
+    @ApiModelProperty(value = "任务单号")
+    @TableField("task_code")
+    private String taskCode;
+
+    /**
+     * 请求返回时间
+     */
+    @ApiModelProperty(value = "请求返回时间")
+    @TableField("request_time")
+    private String requestTime;
+
+    /**
+     * 回调返回时间
+     */
+    @ApiModelProperty(value = "回调返回时间")
+    @TableField("callback_time")
+    private String callbackTime;
+
+    /**
+     * 回调状态码
+     */
+    @ApiModelProperty(value = "回调状态码")
+    @TableField("callback_code")
+    private String callbackCode;
+
+    /**
+     * 回调信息
+     */
+    @ApiModelProperty(value = "回调状态信息")
+    @TableField("callback_message")
+    private String callbackMessage;
+
+    /**
+     * 地码 X 坐标
+     */
+    @ApiModelProperty(value = "'地码 X 坐标")
+    @TableField("coo_x")
+    private String cooX;
+
+    /**
+     * 地码 Y 坐标
+     */
+    @ApiModelProperty(value = "地码 Y 坐标")
+    @TableField("coo_y")
+    private String cooY;
+
+    /**
+     * 当前位置编号
+     */
+    @ApiModelProperty(value = "当前位置编号")
+    @TableField("current_position_code")
+    private String currentPositionCode;
+
+    /**
+     * 地图编号
+     */
+    @ApiModelProperty(value = "地图编号")
+    @TableField("map_code")
+    private String mapCode;
+
+    /**
+     * 地码编号
+     */
+    @ApiModelProperty(value = "地码编号")
+    @TableField("map_data_code")
+    private String mapDataCode;
+
+    /**
+     * 方法名
+     */
+    @ApiModelProperty(value = "方法名")
+    @TableField("method")
+    private String method;
+
+    /**
+     * AGV 编号
+     */
+    @ApiModelProperty(value = "AGV 编号")
+    @TableField("robot_code")
+    private String robotCode;
+
+    /**
+     * AGV 编号
+     */
+    @ApiModelProperty(value = "agv统计日期")
+    @TableField(exist = false)
+    private String statisticalDate;
+
+    /**
+     * AGV 编号
+     */
+    @ApiModelProperty(value = "AGV生产工工时")
+    @TableField(exist = false)
+    private String statisticalHours;
+
+
+}

+ 134 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/entity/AgvHikOrderInfo.java

@@ -0,0 +1,134 @@
+package com.github.zuihou.business.externalApi.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.github.zuihou.base.entity.Entity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 实体类
+ * AGV添加任务申请信息
+ * </p>
+ *
+ * @author imcs
+ * @since 2021-12-28
+ */
+@Data
+@NoArgsConstructor
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("imcs_hik_agv_info")
+@ApiModel(value = "AgvHikOrderInfo", description = "AGV添加任务申请表")
+@AllArgsConstructor
+@Builder
+public class AgvHikOrderInfo extends Entity<Long> {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    @TableField("id")
+    private Long id;
+
+    /**
+     * 任务起点逻辑库位名称
+     */
+    @ApiModelProperty(value = "任务起点逻辑库位名称")
+    @TableField("start")
+    private String start;
+
+    /**
+     * 任务终点逻辑库位名称
+     */
+    @ApiModelProperty(value = "任务终点逻辑库位名称")
+    @TableField("goal")
+    private String goal;
+
+    /**
+     *  起点动作
+     */
+    @ApiModelProperty(value = "起点动作")
+    @TableField("start_action")
+    private int startAction;
+
+    /**
+     *  终点动作
+     */
+    @ApiModelProperty(value = "终点动作")
+    @TableField("goal_action")
+    private int goalAction;
+
+    /**
+     *  下单请求时间
+     */
+    @ApiModelProperty(value = "下单请求时间")
+    @TableField("req_time")
+    private String reqTime;
+
+    /**
+     *  客户端编号
+     */
+    @ApiModelProperty(value = "客户端编号")
+    @TableField("client_code")
+    private String clientCode;
+
+    /**
+     *  令牌号
+     */
+    @ApiModelProperty(value = "令牌号")
+    @TableField("token_code")
+    private String tokenCode;
+
+    /**
+     *  任务类型
+     */
+    @ApiModelProperty(value = "任务类型")
+    @TableField("task_typ")
+    private String taskTyp;
+
+    /**
+     *  排产任务号
+     */
+    @ApiModelProperty(value = "排产任务号")
+    @TableField("task_id")
+    private String taskId;
+
+    /**
+     *  排产任务结点号
+     */
+    @ApiModelProperty(value = "排产任务结点号")
+    @TableField("task_node_id")
+    private String taskNodeId;
+
+
+    /**
+     * agv任务号
+     */
+    @ApiModelProperty(value = "agv任务号")
+    @TableField("agv_task_id")
+    private int agvTaskId;
+
+
+
+    /**
+     * 父agv任务点
+     */
+    @ApiModelProperty(value = "父agv任务点")
+    @TableField("parent_agv_task_id")
+    private int parentAgvTaskId;
+
+    /**
+     *  agv重做动作号
+     */
+    @ApiModelProperty(value = "agv重做动作号 0:agv搬运 1: agv托起托盘到安全位 2:agv重新将托盘放到接驳位" )
+    @TableField("repeat_action_type")
+    private int repeatActionType;
+
+
+}

+ 1 - 1
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/externalApi/entity/WmsOrderInfo.java

@@ -81,7 +81,7 @@ public class WmsOrderInfo  extends Entity<Long> {
      *  排产任务结点号
      */
     @ApiModelProperty(value = "排产任务结点号")
-    @TableField("task_node_id")
+    @TableField(exist = false)
     private String taskNodeId;
 
 }

+ 44 - 0
imcs-admin-boot/imcs-common/src/main/java/com/github/zuihou/common/constant/HikR.java

@@ -0,0 +1,44 @@
+package com.github.zuihou.common.constant;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.github.zuihou.base.R;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+@Data
+@NoArgsConstructor
+@ToString(callSuper = true)
+@Accessors(chain = true)
+@TableName("imcs_hik_agv_detail_info")
+@ApiModel(value = "AgvHikOrderDetailInfo", description = "AGV添加任务详情表")
+@AllArgsConstructor
+public class HikR {
+    public static final String DEF_ERROR_MESSAGE = "系统繁忙,请稍候再试";
+    public static final String HYSTRIX_ERROR_MESSAGE = "请求超时,请稍候再试";
+    public static final int SUCCESS_CODE = 0;
+    public static final int FAIL_CODE = -1;
+    public static final int TIMEOUT_CODE = -2;
+    public static final int VALID_EX_CODE = -9;
+    public static final int OPERATION_EX_CODE = -10;
+    @ApiModelProperty("响应编码:0/200-请求处理成功")
+    private int code;
+    @ApiModelProperty("响应数据")
+    private String data;
+    @ApiModelProperty("提示消息")
+    private String message = "ok";
+    @ApiModelProperty("请求编号")
+    private String reqCode;
+
+    public static HikR success() {
+        return new HikR(0, "", "ok","");
+    }
+    public static HikR fail(String msg) {
+        return fail(-10, msg);
+    }
+    public static HikR fail(int code, String msg) {
+        return new HikR(code,"", msg != null && !msg.isEmpty() ? msg : "系统繁忙,请稍候再试","");
+    }
+}
+

+ 56 - 33
imcs-admin-boot/imcs-common/src/main/java/com/github/zuihou/common/util/DateUtil.java

@@ -23,7 +23,7 @@ public class DateUtil {
 //	private static SimpleDateFormat sdfYearMonth1 = new SimpleDateFormat("yyMM");
 //	private static SimpleDateFormat mmdd = new SimpleDateFormat("MMdd");
 //	private static SimpleDateFormat longSDF = new SimpleDateFormat("yyyyMMddHHmmssS");
-	
+
 	/**
 	 * 获取完整的系统时间(yyyyMMddHHmmssS).
 	 *
@@ -33,8 +33,8 @@ public class DateUtil {
 		Date date = new Date();
 		return new SimpleDateFormat("yyyyMMddHHmmssS").format(date);
 	}
-	
-	
+
+
 	/**
 	 * 将字符型日期转为日期型 年月日 时分秒yyyy-MM-dd HH:mm:ss a
 	 *
@@ -51,7 +51,7 @@ public class DateUtil {
 		}
 		return dt;
 	}
-	
+
 	/**
 	 * 将字符型日期转为日期型 yyyyMMdd
 	 *
@@ -68,7 +68,7 @@ public class DateUtil {
 		}
 		return dt;
 	}
-	
+
     /**
 	 * 将字符型日期转为日期型 yyyy-MM-dd
 	 *
@@ -107,7 +107,7 @@ public class DateUtil {
 		}
 		return dt;
 	}
-	
+
 	/**
 	 * 日期格式 日/月/年 13/06/2016
 	 * @param date
@@ -147,7 +147,7 @@ public class DateUtil {
         }
         return dt;
     }
-	
+
 	/**
      * 日期格式 yyyy-MM-dd HH:mm:ss
      * 如 2017-07-01 08:29:00
@@ -239,7 +239,7 @@ public class DateUtil {
 		return dt;
 	}
 
-	
+
 	/**
 	 * 将日期型转为字符型 yyyy-MM-dd
 	 *
@@ -253,17 +253,16 @@ public class DateUtil {
 		return dt;
 	}
 
-
 	public static String dateToStringPattern(Date date,String pattern) {
 		String dt = null;
 		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
 		dt = sdf.format(date);
 		return dt;
 	}
-	
+
 	/**
 	 * 将日期型转为字符型 yyyyMMdd
-	 * 
+	 *
 	 * @param date
 	 * @return
 	 */
@@ -273,7 +272,7 @@ public class DateUtil {
 		dt = sdf2.format(date);
 		return dt;
 	}
-	
+
 	/**
 	 * 将日期型转为字符型 yyMMdd
 	 *
@@ -286,7 +285,7 @@ public class DateUtil {
 		dt = sdf3.format(date);
 		return dt;
 	}
-	
+
    /**
 	 * 将日期型转为字符型 yyyyMM
 	 *
@@ -300,7 +299,7 @@ public class DateUtil {
 		dt = sdfYearMonth.format(date);
 		return dt;
 	}
-    
+
     /**
    	 * 将日期型转为字符型 yyyyMM
    	 *
@@ -314,10 +313,10 @@ public class DateUtil {
    		dt = sdfYearMonth.format(date);
    		return dt;
    	}
-	
+
     /**
 	 * 将日期型转为字符型 yyMM
-	 * 
+	 *
 	 * @param date
 	 * @return yearmonth
 	 * @author liulonghua
@@ -328,10 +327,10 @@ public class DateUtil {
 		dt = sdfYearMonth1.format(date);
 		return dt;
 	}
-    
+
     /**
 	 * 将日期型转为字符型 mmdd
-	 * 
+	 *
 	 * @param date
 	 * @return yearmonth
 	 * @author liulonghua
@@ -342,10 +341,10 @@ public class DateUtil {
 		dt = mmdd.format(date);
 		return dt;
 	}
-    
+
     /**
 	 * 将日期型转为字符型 yyMMddHHmmss
-	 * 
+	 *
 	 * @param date
 	 * @return yearmonth
 	 * @author liulonghua
@@ -363,11 +362,11 @@ public class DateUtil {
 		dt = sdf4.format(date);
 		return dt;
 	}
-    
-	
+
+
 	/**
 	 * 将日期型转为字符型 yyyy年MM月dd日
-	 * 
+	 *
 	 * @param date
 	 * @return
 	 */
@@ -377,7 +376,7 @@ public class DateUtil {
 		dt = sdfCN.format(date);
 		return dt;
 	}
-	
+
 	/**
 	 * 将日期型转为字符型
 	 * yyyy-MM-dd HH:mm:ss
@@ -403,7 +402,7 @@ public class DateUtil {
     	String seventime = dateToString(calendar.getTime());
     	return seventime;
     }
-    
+
     /**
 	 * 返回长格式的一个日期(yyyyMMddHHmmssS).
 	 *
@@ -414,7 +413,7 @@ public class DateUtil {
     	SimpleDateFormat longSDF = new SimpleDateFormat("yyyyMMddHHmmssS");
     	return longSDF.format(new Date());
     }
-    
+
     /**
 	 * 根据指定的日期格式化日期.
 	 *
@@ -435,7 +434,7 @@ public class DateUtil {
         	return sdf.format(date.getTime());
     	}
     }
-    
+
     /**
 	 * 当前年度
 	 * @author xsy
@@ -452,7 +451,7 @@ public class DateUtil {
     public static String getMonth() {
     	return String.valueOf(new Date().getMonth()+1);
     }
-    
+
     //日期差值
     public static Boolean dateDiff(Date startTime, Date endTime) {
     	boolean flag = startTime.before(endTime);
@@ -462,7 +461,7 @@ public class DateUtil {
     		return false;
     	}
     }
-    
+
     //日期差值
     public static long dateDiff(String startTime, String endTime) throws ParseException {
 		// 按照传入的格式生成一个simpledateformate对象
@@ -477,7 +476,7 @@ public class DateUtil {
 		long day = diff / nd;// 计算差多少天
 		return day;
 	}
-    
+
     /**
      * 获取某月的天数
      * @param date
@@ -502,7 +501,7 @@ public class DateUtil {
 		c.set(Calendar.DATE,day-num);
 		return c.getTime();
 	}
-	
+
 	public static String getFirstDateOfMonth(){
 		Calendar cale = Calendar.getInstance();
 		int year = cale.get(Calendar.YEAR);
@@ -518,8 +517,32 @@ public class DateUtil {
 		newTime = calendar.getTime();
 		return newTime;
 	}
-	
-	
+
+	/**
+	 * 月首日
+	 * @param date
+	 * @return
+	 */
+	public static String beginMonthTime(Date date) {
+		String dt = null;
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+		dt = sdf.format(date);
+		dt = dt + "-01 00:00:00";
+		return dt;
+	}
+
+	/**
+	 * 月末日
+	 * @param date
+	 * @return
+	 */
+	public static String endMonthTime(Date date) {
+		String dt = null;
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+		dt = sdf.format(date);
+		dt = dt + "-"+ cn.hutool.core.date.DateUtil.endOfMonth(new Date()).dayOfMonth() + " 00:00:00";
+		return dt;
+	}
 
 	public static void main(String[] args) throws Exception {
 //    	System.out.println(DateUtil.formatTime(DateUtil.stringToDate5("13/06/2016")));