|  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
|---|
|  |  |  | import com.core.annotations.AppAuth; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.core.common.DateUtils; | 
|---|
|  |  |  | import com.zy.asrs.entity.AgvWarn; | 
|---|
|  |  |  | import com.zy.asrs.entity.AgvWrkMast; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.AgvWarnBody; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.zy.asrs.service.AgvWarnService; | 
|---|
|  |  |  | import com.zy.asrs.service.AgvWrkMastService; | 
|---|
|  |  |  | import com.zy.asrs.service.ApiLogService; | 
|---|
|  |  |  | import com.zy.asrs.utils.AppAuthUtil; | 
|---|
|  |  |  | import com.zy.common.web.BaseController; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | 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 javax.servlet.http.HttpServletRequest; | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Slf4j | 
|---|
|  |  |  | @RestController | 
|---|
|  |  |  | @RequestMapping("/agv") | 
|---|
|  |  |  | public class AgvWarnController extends BaseController { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @AppAuth(memo = "AGV告警回调") | 
|---|
|  |  |  | public Object taskEventStaus(@RequestBody AgvWarnCallBackParam param, HttpServletRequest request) { | 
|---|
|  |  |  | log.info("AGV告警回调:{}", JSON.toJSONString(param)); | 
|---|
|  |  |  | List<AgvWarnBody> data = param.getData(); | 
|---|
|  |  |  | AppAuthUtil.auth("", param, request); | 
|---|
|  |  |  | List<AgvWarnBody> agvWarnBodies = param.getData(); | 
|---|
|  |  |  | //  List<AgvWarnBody> agvWarnBodies = JSONArray.parseArray(data, AgvWarnBody.class); | 
|---|
|  |  |  | AgvWarn agvWarn = null; | 
|---|
|  |  |  | List<AgvWarn> agvWarns = new ArrayList<>(); | 
|---|
|  |  |  | List<AgvWarn> updates = new ArrayList<>(); | 
|---|
|  |  |  | for (AgvWarnBody body : data) { | 
|---|
|  |  |  | for (AgvWarnBody body : agvWarnBodies) { | 
|---|
|  |  |  | List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().eq("robot_code", body.getRobotCode()).eq("begin_time", body.getBeginTime()).eq("warn_content", body.getWarnContent())); | 
|---|
|  |  |  | if (Cools.isEmpty(agvWarnList)) { | 
|---|
|  |  |  | agvWarn = new AgvWarn(); | 
|---|
|  |  |  | agvWarn.setBeginTime(body.getBeginTime()); | 
|---|
|  |  |  | agvWarn.setAppeTime(new Date()); | 
|---|
|  |  |  | agvWarn.setTimes(0); | 
|---|
|  |  |  | agvWarn.setModiTime(DateUtils.convert(body.getBeginTime(), DateUtils.yyyyMMddHHmmss_F)); | 
|---|
|  |  |  | agvWarn.setRobotCode(body.getRobotCode()); | 
|---|
|  |  |  | agvWarn.setWarnContent(body.getWarnContent()); | 
|---|
|  |  |  | if (body.getTaskCode() != null) { | 
|---|
|  |  |  | AgvWrkMast agvWrkMast = agvWrkMastService.selectById(body.getTaskCode()); | 
|---|
|  |  |  | if (agvWrkMast != null) { | 
|---|
|  |  |  | agvWarn.setLocNo(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | AgvWrkMast agvWrkMast = agvWrkMastService.selectById(Math.abs(Integer.parseInt(body.getTaskCode()))); | 
|---|
|  |  |  | if (agvWrkMast != null) { | 
|---|
|  |  |  | agvWarn.setLocNo(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.info("任务不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | agvWarns.add(agvWarn); | 
|---|
|  |  |  | 
|---|
|  |  |  | agvWarn.setWarnContent(agvWarn.getWarnContent().contains(body.getWarnContent()) ? body.getWarnContent() : agvWarn.getWarnContent() + "、" + body.getWarnContent()); | 
|---|
|  |  |  | agvWarn.setModiTime(new Date()); | 
|---|
|  |  |  | if (body.getTaskCode() != null) { | 
|---|
|  |  |  | AgvWrkMast agvWrkMast = agvWrkMastService.selectById(body.getTaskCode()); | 
|---|
|  |  |  | if (agvWrkMast != null) { | 
|---|
|  |  |  | agvWarn.setLocNo(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | AgvWrkMast agvWrkMast = agvWrkMastService.selectById(body.getTaskCode()); | 
|---|
|  |  |  | if (agvWrkMast != null) { | 
|---|
|  |  |  | agvWarn.setLocNo(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.info("任务不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | updates.add(agvWarn); | 
|---|
|  |  |  | 
|---|
|  |  |  | agvWarnService.updateBatchById(updates); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Map<String, Object> result = new HashMap<>(); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(result), true); | 
|---|
|  |  |  | logPost(JSONObject.toJSONString(param), JSONObject.toJSONString(result), true); | 
|---|
|  |  |  | result.put("code", 0); | 
|---|
|  |  |  | result.put("message", "成功"); | 
|---|
|  |  |  | result.put("reqCode", param.getReqCode()); | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void logPost(AgvWarnCallBackParam param, String response, boolean success) { | 
|---|
|  |  |  | private void logPost(String param, String response, boolean success) { | 
|---|
|  |  |  | apiLogService.save( | 
|---|
|  |  |  | "ESS任务回调", | 
|---|
|  |  |  | "/phyzwms/agv/task/event/status", | 
|---|
|  |  |  | null, | 
|---|
|  |  |  | null, | 
|---|
|  |  |  | JSONObject.toJSONString(param), | 
|---|
|  |  |  | param, | 
|---|
|  |  |  | response, | 
|---|
|  |  |  | success | 
|---|
|  |  |  | ); | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | package com.zy.asrs.entity; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableField; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableId; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableName; | 
|---|
|  |  |  | import lombok.Data; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.io.Serializable; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableName("agv_bas") | 
|---|
|  |  |  | @Data | 
|---|
|  |  |  | public class Agv implements Serializable { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableId("agv_no") | 
|---|
|  |  |  | private String agvNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("region") | 
|---|
|  |  |  | private String region; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @TableField("modi_time") | 
|---|
|  |  |  | private Date modiTime; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    @TableField("report_time") | 
|---|
|  |  |  | //    private Date reportTime; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("memo") | 
|---|
|  |  |  | private String memo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | package com.zy.asrs.entity; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableField; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableId; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableName; | 
|---|
|  |  |  | import lombok.Data; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | private static final long serialVersionUID = 1L; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("id") | 
|---|
|  |  |  | @TableId | 
|---|
|  |  |  | private Long id; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 上报次数 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @TableField("times") | 
|---|
|  |  |  | private Integer times; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("robot_code") | 
|---|
|  |  |  | private String robotCode; | 
|---|
|  |  |  | 
|---|
|  |  |  | @TableField("begin_time") | 
|---|
|  |  |  | private String beginTime; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("warnContent") | 
|---|
|  |  |  | private String warn_content; | 
|---|
|  |  |  | @TableField("warn_content") | 
|---|
|  |  |  | private String warnContent; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("task_code") | 
|---|
|  |  |  | private String taskCode; | 
|---|
|  |  |  | 
|---|
|  |  |  | @TableField("loc_no") | 
|---|
|  |  |  | private String locNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("source_locNo") | 
|---|
|  |  |  | @TableField("source_loc_no") | 
|---|
|  |  |  | private String sourceLocNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("appe_time") | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("modi_time") | 
|---|
|  |  |  | private Date modiTime; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    @TableField("report_time") | 
|---|
|  |  |  | //    private Date reportTime; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("memo") | 
|---|
|  |  |  | private String memo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | 
|---|
|  |  |  | import com.alibaba.excel.annotation.ExcelProperty; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableField; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableId; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.annotations.TableName; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.core.common.SpringUtils; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static final long serialVersionUID = 1L; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "库位号") | 
|---|
|  |  |  | @TableId | 
|---|
|  |  |  | private Long id; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value = "库位号") | 
|---|
|  |  |  | @TableField("loc_no") | 
|---|
|  |  |  | private String locNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "托盘条码") | 
|---|
|  |  |  | @ApiModelProperty(value = "托盘条码") | 
|---|
|  |  |  | private String zpallet; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "数量") | 
|---|
|  |  |  | @ApiModelProperty(value = "数量") | 
|---|
|  |  |  | @ExcelProperty("数量") | 
|---|
|  |  |  | private Double anfme; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "物料号") | 
|---|
|  |  |  | @ApiModelProperty(value = "物料号") | 
|---|
|  |  |  | @ExcelProperty("物料号") | 
|---|
|  |  |  | private String matnr; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "物料号") | 
|---|
|  |  |  | @ApiModelProperty(value = "物料号") | 
|---|
|  |  |  | @ExcelProperty("物料号") | 
|---|
|  |  |  | private String maktx; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "序列码") | 
|---|
|  |  |  | @ApiModelProperty(value = "序列码") | 
|---|
|  |  |  | @ExcelProperty("序列码") | 
|---|
|  |  |  | private String batch; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "单据编号") | 
|---|
|  |  |  | @ApiModelProperty(value = "单据编号") | 
|---|
|  |  |  | @ExcelProperty("单据编号") | 
|---|
|  |  |  | @TableField("order_no") | 
|---|
|  |  |  | private String orderNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "规格") | 
|---|
|  |  |  | @ApiModelProperty(value = "规格") | 
|---|
|  |  |  | private String specs; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "批次") | 
|---|
|  |  |  | @ApiModelProperty(value = "批次") | 
|---|
|  |  |  | private String model; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "颜色") | 
|---|
|  |  |  | @ApiModelProperty(value = "颜色") | 
|---|
|  |  |  | private String color; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "品牌") | 
|---|
|  |  |  | @ApiModelProperty(value = "品牌") | 
|---|
|  |  |  | private String brand; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "单位") | 
|---|
|  |  |  | @ApiModelProperty(value = "单位") | 
|---|
|  |  |  | private String unit; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "单价") | 
|---|
|  |  |  | @ApiModelProperty(value = "单价") | 
|---|
|  |  |  | private Double price; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "sku") | 
|---|
|  |  |  | @ApiModelProperty(value = "sku") | 
|---|
|  |  |  | private String sku; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "包数") | 
|---|
|  |  |  | @ApiModelProperty(value = "包数") | 
|---|
|  |  |  | private Double units; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "条码") | 
|---|
|  |  |  | @ApiModelProperty(value = "条码") | 
|---|
|  |  |  | private String barcode; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "物料状态") | 
|---|
|  |  |  | @ApiModelProperty(value = "物料状态") | 
|---|
|  |  |  | private String origin; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "厂家") | 
|---|
|  |  |  | @ApiModelProperty(value = "厂家") | 
|---|
|  |  |  | private String manu; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "单据时间") | 
|---|
|  |  |  | @ApiModelProperty(value = "单据时间") | 
|---|
|  |  |  | @TableField("manu_date") | 
|---|
|  |  |  | private String manuDate; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "品项数") | 
|---|
|  |  |  | @ApiModelProperty(value = "品项数") | 
|---|
|  |  |  | @TableField("item_num") | 
|---|
|  |  |  | private String itemNum; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "安全库存量") | 
|---|
|  |  |  | @ApiModelProperty(value = "安全库存量") | 
|---|
|  |  |  | @TableField("safe_qty") | 
|---|
|  |  |  | private Double safeQty; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "重量") | 
|---|
|  |  |  | @ApiModelProperty(value = "重量") | 
|---|
|  |  |  | private Double weight; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "长度") | 
|---|
|  |  |  | @ApiModelProperty(value = "长度") | 
|---|
|  |  |  | private Double length; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "体积") | 
|---|
|  |  |  | @ApiModelProperty(value = "体积") | 
|---|
|  |  |  | private Double volume; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "三方编码") | 
|---|
|  |  |  | @ApiModelProperty(value = "三方编码") | 
|---|
|  |  |  | @TableField("three_code") | 
|---|
|  |  |  | private String threeCode; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "供应商") | 
|---|
|  |  |  | @ApiModelProperty(value = "供应商") | 
|---|
|  |  |  | private String supp; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "供应商编码") | 
|---|
|  |  |  | @ApiModelProperty(value = "供应商编码") | 
|---|
|  |  |  | @TableField("supp_code") | 
|---|
|  |  |  | private String suppCode; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "是否批次 1: 是  0: 否  ") | 
|---|
|  |  |  | @ApiModelProperty(value = "是否批次 1: 是  0: 否  ") | 
|---|
|  |  |  | @TableField("be_batch") | 
|---|
|  |  |  | private Integer beBatch; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "保质期") | 
|---|
|  |  |  | @ApiModelProperty(value = "保质期") | 
|---|
|  |  |  | @TableField("dead_time") | 
|---|
|  |  |  | private String deadTime; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "预警天数") | 
|---|
|  |  |  | @ApiModelProperty(value = "预警天数") | 
|---|
|  |  |  | @TableField("dead_warn") | 
|---|
|  |  |  | private Integer deadWarn; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "制购 1: 制造  2: 采购  3: 外协  ") | 
|---|
|  |  |  | @ApiModelProperty(value = "制购 1: 制造  2: 采购  3: 外协  ") | 
|---|
|  |  |  | private Integer source; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "要求检验 1: 是  0: 否  ") | 
|---|
|  |  |  | @ApiModelProperty(value = "要求检验 1: 是  0: 否  ") | 
|---|
|  |  |  | private Integer inspect; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "危险品 1: 是  0: 否  ") | 
|---|
|  |  |  | @ApiModelProperty(value = "危险品 1: 是  0: 否  ") | 
|---|
|  |  |  | private Integer danger; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "修改人员") | 
|---|
|  |  |  | @ApiModelProperty(value = "修改人员") | 
|---|
|  |  |  | @TableField("modi_user") | 
|---|
|  |  |  | private Long modiUser; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "修改时间") | 
|---|
|  |  |  | @ApiModelProperty(value = "修改时间") | 
|---|
|  |  |  | @TableField("modi_time") | 
|---|
|  |  |  | private Date modiTime; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "创建者") | 
|---|
|  |  |  | @ApiModelProperty(value = "创建者") | 
|---|
|  |  |  | @TableField("appe_user") | 
|---|
|  |  |  | private Long appeUser; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "添加时间") | 
|---|
|  |  |  | @ApiModelProperty(value = "添加时间") | 
|---|
|  |  |  | @TableField("appe_time") | 
|---|
|  |  |  | private Date appeTime; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiModelProperty(value= "备注") | 
|---|
|  |  |  | @ApiModelProperty(value = "备注") | 
|---|
|  |  |  | private String memo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @TableField("stock_freeze") | 
|---|
|  |  |  | @ApiModelProperty(value= "库存冻结{1:正常,0:冻结}") | 
|---|
|  |  |  | @ApiModelProperty(value = "库存冻结{1:正常,0:冻结}") | 
|---|
|  |  |  | private Integer stockFreeze; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 库存数量 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @ApiModelProperty(value= "可出数量") | 
|---|
|  |  |  | @ApiModelProperty(value = "可出数量") | 
|---|
|  |  |  | @TableField(exist = false) | 
|---|
|  |  |  | private Double stock; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 库存数量 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @ApiModelProperty(value= "可出数量") | 
|---|
|  |  |  | @ApiModelProperty(value = "可出数量") | 
|---|
|  |  |  | @TableField(exist = false) | 
|---|
|  |  |  | private String locSts; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 库存数量 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @ApiModelProperty(value= "可出数量") | 
|---|
|  |  |  | @ApiModelProperty(value = "可出数量") | 
|---|
|  |  |  | @TableField(exist = false) | 
|---|
|  |  |  | private String locSts$; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 工序状态 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @ApiModelProperty(value= "工序状态 1:待加工,2:已加工,3:无需加工") | 
|---|
|  |  |  | @ApiModelProperty(value = "工序状态 1:待加工,2:已加工,3:无需加工") | 
|---|
|  |  |  | @TableField("process_sts") | 
|---|
|  |  |  | private Integer processSts; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getProcessSts$(){ | 
|---|
|  |  |  | if (null == this.processSts){ return null; } | 
|---|
|  |  |  | switch (this.processSts){ | 
|---|
|  |  |  | public String getProcessSts$() { | 
|---|
|  |  |  | if (null == this.processSts) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (this.processSts) { | 
|---|
|  |  |  | case 0: | 
|---|
|  |  |  | return "其他"; | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getLocNo$(){ | 
|---|
|  |  |  | public String getLocNo$() { | 
|---|
|  |  |  | LocMastService service = SpringUtils.getBean(LocMastService.class); | 
|---|
|  |  |  | LocMast locMast = service.selectById(this.locNo); | 
|---|
|  |  |  | if (!Cools.isEmpty(locMast)){ | 
|---|
|  |  |  | if (!Cools.isEmpty(locMast)) { | 
|---|
|  |  |  | return String.valueOf(locMast.getLocNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getBeBatch$(){ | 
|---|
|  |  |  | if (null == this.beBatch){ return null; } | 
|---|
|  |  |  | switch (this.beBatch){ | 
|---|
|  |  |  | public String getBeBatch$() { | 
|---|
|  |  |  | if (null == this.beBatch) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (this.beBatch) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | return "是"; | 
|---|
|  |  |  | case 0: | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getSource$(){ | 
|---|
|  |  |  | if (null == this.source){ return null; } | 
|---|
|  |  |  | switch (this.source){ | 
|---|
|  |  |  | public String getSource$() { | 
|---|
|  |  |  | if (null == this.source) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (this.source) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | return "制造"; | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getInspect$(){ | 
|---|
|  |  |  | if (null == this.inspect){ return null; } | 
|---|
|  |  |  | switch (this.inspect){ | 
|---|
|  |  |  | public String getInspect$() { | 
|---|
|  |  |  | if (null == this.inspect) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (this.inspect) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | return "是"; | 
|---|
|  |  |  | case 0: | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getDanger$(){ | 
|---|
|  |  |  | if (null == this.danger){ return null; } | 
|---|
|  |  |  | switch (this.danger){ | 
|---|
|  |  |  | public String getDanger$() { | 
|---|
|  |  |  | if (null == this.danger) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (this.danger) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | return "是"; | 
|---|
|  |  |  | case 0: | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getModiUser$(){ | 
|---|
|  |  |  | public String getModiUser$() { | 
|---|
|  |  |  | UserService service = SpringUtils.getBean(UserService.class); | 
|---|
|  |  |  | User user = service.selectById(this.modiUser); | 
|---|
|  |  |  | if (!Cools.isEmpty(user)){ | 
|---|
|  |  |  | if (!Cools.isEmpty(user)) { | 
|---|
|  |  |  | return String.valueOf(user.getUsername()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getModiTime$(){ | 
|---|
|  |  |  | if (Cools.isEmpty(this.modiTime)){ | 
|---|
|  |  |  | public String getModiTime$() { | 
|---|
|  |  |  | if (Cools.isEmpty(this.modiTime)) { | 
|---|
|  |  |  | return ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getAppeUser$(){ | 
|---|
|  |  |  | public String getAppeUser$() { | 
|---|
|  |  |  | UserService service = SpringUtils.getBean(UserService.class); | 
|---|
|  |  |  | User user = service.selectById(this.appeUser); | 
|---|
|  |  |  | if (!Cools.isEmpty(user)){ | 
|---|
|  |  |  | if (!Cools.isEmpty(user)) { | 
|---|
|  |  |  | return String.valueOf(user.getUsername()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getAppeTime$(){ | 
|---|
|  |  |  | if (Cools.isEmpty(this.appeTime)){ | 
|---|
|  |  |  | public String getAppeTime$() { | 
|---|
|  |  |  | if (Cools.isEmpty(this.appeTime)) { | 
|---|
|  |  |  | return ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getStockFreeze$() { | 
|---|
|  |  |  | if (Cools.isEmpty(this.stockFreeze)){ | 
|---|
|  |  |  | if (Cools.isEmpty(this.stockFreeze)) { | 
|---|
|  |  |  | return ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return this.stockFreeze == 1 ? "正常" : "冻结"; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private String tokenCode; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private List<AgvWarnBody> data; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | package com.zy.asrs.mapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.BaseMapper; | 
|---|
|  |  |  | import com.zy.asrs.entity.Agv; | 
|---|
|  |  |  | import com.zy.asrs.entity.AgvBasDevp; | 
|---|
|  |  |  | import org.apache.ibatis.annotations.Delete; | 
|---|
|  |  |  | import org.apache.ibatis.annotations.Mapper; | 
|---|
|  |  |  | import org.apache.ibatis.annotations.Param; | 
|---|
|  |  |  | import org.apache.ibatis.annotations.Select; | 
|---|
|  |  |  | import org.springframework.stereotype.Repository; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Mapper | 
|---|
|  |  |  | @Repository | 
|---|
|  |  |  | public interface AgvBasMapper extends BaseMapper<Agv> { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.zy.asrs.entity.Agv; | 
|---|
|  |  |  | import com.zy.asrs.entity.AgvWarn; | 
|---|
|  |  |  | import com.zy.asrs.mapper.AgvBasMapper; | 
|---|
|  |  |  | import com.zy.asrs.service.AgvWarnService; | 
|---|
|  |  |  | import com.zy.asrs.task.handler.AgvWarnHandler; | 
|---|
|  |  |  | import com.zy.common.utils.HttpHandler; | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ConfigService configService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AgvBasMapper agvBasMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 超过 | 
|---|
|  |  |  | * 超过一分钟没更新的,删除 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(fixedDelay = 30000) | 
|---|
|  |  |  | @Scheduled(fixedDelay = 10000) | 
|---|
|  |  |  | private void del() { | 
|---|
|  |  |  | String format = DateUtil.format(DateUtil.offsetMinute(new Date(), -3), "yyyy-MM-dd HH:mm:ss"); | 
|---|
|  |  |  | List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().ge("modi_time", format)); | 
|---|
|  |  |  | String format = DateUtil.format(DateUtil.offsetMinute(new Date(), -1), "yyyy-MM-dd HH:mm:ss"); | 
|---|
|  |  |  | List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().le("modi_time", format)); | 
|---|
|  |  |  | for (AgvWarn agvWarn : agvWarnList) { | 
|---|
|  |  |  | agvWarnHandler.start(agvWarn); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Scheduled(fixedDelay = 10000) | 
|---|
|  |  |  | @Scheduled(fixedDelay = 20000) | 
|---|
|  |  |  | private void report() { | 
|---|
|  |  |  | List<Config> config = configService.selectList(new EntityWrapper<Config>().eq("code", "AGV_WARN_REPORT_URL")); | 
|---|
|  |  |  | List<Agv> agvs = agvBasMapper.selectList(new EntityWrapper<Agv>()); | 
|---|
|  |  |  | Config first = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE1")); | 
|---|
|  |  |  | Config second = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE2")); | 
|---|
|  |  |  | Config third = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE3")); | 
|---|
|  |  |  | Config url = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_REPORT_URL")); | 
|---|
|  |  |  | List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>()); | 
|---|
|  |  |  | StringBuffer buffer; | 
|---|
|  |  |  | for (AgvWarn agvWarn : agvWarnList) { | 
|---|
|  |  |  | Integer warnTime = getWarnTime(agvWarn.getTimes()); | 
|---|
|  |  |  | Integer warnTime = getWarnTime(agvWarn.getTimes(), first.getValue(), second.getValue(), third.getValue()); | 
|---|
|  |  |  | DateTime begin = DateUtil.parse(agvWarn.getBeginTime(), "yyyy-MM-dd HH:mm:ss"); | 
|---|
|  |  |  | if (DateUtil.offsetMinute(begin, warnTime).after(new Date())) { | 
|---|
|  |  |  | if (DateUtil.offsetMinute(begin, warnTime).before(new Date())) { | 
|---|
|  |  |  | buffer = new StringBuffer(); | 
|---|
|  |  |  | buffer.append(agvWarn.getRobotCode() + "号AGV小车报警:"); | 
|---|
|  |  |  | buffer.append(agvWarn.getWarnContent()); | 
|---|
|  |  |  | buffer.append(processRegion(agvs, agvWarn.getRobotCode()) + "[" + agvWarn.getRobotCode() + "]号AGV小车报警了\n"); | 
|---|
|  |  |  | buffer.append("报警类型:" + agvWarn.getWarnContent() + "\n"); | 
|---|
|  |  |  | if (!Cools.isEmpty(agvWarn.getSourceLocNo())) { | 
|---|
|  |  |  | buffer.append("从:[" + agvWarn.getSourceLocNo() + "]到[" + agvWarn.getLocNo() + "]\n"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | buffer.append("开始时间:" + agvWarn.getBeginTime() + "\n"); | 
|---|
|  |  |  | int i = agvWarn.getTimes() + 1; | 
|---|
|  |  |  | buffer.append("第[" + i + "]次报警"); | 
|---|
|  |  |  | HashMap<String, Object> param = new HashMap<>(); | 
|---|
|  |  |  | HashMap<String, Object> data = new HashMap<>(); | 
|---|
|  |  |  | data.put("content", buffer.toString()); | 
|---|
|  |  |  | param.put("msgtype", "text"); | 
|---|
|  |  |  | param.put("text", data); | 
|---|
|  |  |  | log.info("发送报警信息:{}", JSON.toJSONString(param)); | 
|---|
|  |  |  | String response = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | response = new HttpHandler.Builder() | 
|---|
|  |  |  | .setUri(config.get(0).getValue()) | 
|---|
|  |  |  | .setUri(url.getValue()) | 
|---|
|  |  |  | .setJson(JSON.toJSONString(param)) | 
|---|
|  |  |  | .setHttps(true) | 
|---|
|  |  |  | .build() | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | JSONObject jsonObject = JSON.parseObject(response); | 
|---|
|  |  |  | if (jsonObject.get("errmsg").equals("ok")) { | 
|---|
|  |  |  | agvWarn.setTimes(agvWarn.getTimes() + 1); | 
|---|
|  |  |  | agvWarnService.updateById(agvWarn); | 
|---|
|  |  |  | //发送成功 | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | * @param times | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private Integer getWarnTime(Integer times) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | List<Config> config = configService.selectList(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE1")); | 
|---|
|  |  |  | if (!Cools.isEmpty(config)) { | 
|---|
|  |  |  | String value = config.get(0).getValue(); | 
|---|
|  |  |  | if (Cools.isEmpty(value)) { | 
|---|
|  |  |  | return 5; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | String[] split = value.split(","); | 
|---|
|  |  |  | if (split.length < times + 1) { | 
|---|
|  |  |  | Config config2 = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE2")); | 
|---|
|  |  |  | int t = 0; | 
|---|
|  |  |  | for (String s : split) { | 
|---|
|  |  |  | t = t + Integer.parseInt(s); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return t + Integer.parseInt(config2.getValue()) * (times + 1 - split.length); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return Integer.parseInt(split[times]); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return 5; | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | return 5; | 
|---|
|  |  |  | private Integer getWarnTime(Integer times, String first, String second, String thrid) { | 
|---|
|  |  |  | switch (times) { | 
|---|
|  |  |  | case 0: | 
|---|
|  |  |  | return Integer.parseInt(first); | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | return Integer.parseInt(second); | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | return Integer.parseInt(thrid); | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | return (times - 2) * Integer.parseInt(thrid) + Integer.parseInt(first) + Integer.parseInt(second) + Integer.parseInt(thrid); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private String processRegion(List<Agv> agvs, String agvNo) { | 
|---|
|  |  |  | if (agvNo == null) { | 
|---|
|  |  |  | return "未知小车"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (Agv agv : agvs) { | 
|---|
|  |  |  | if (agv.getAgvNo() != null && agv.getAgvNo().equals(agvNo)) { | 
|---|
|  |  |  | return agv.getRegion(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return "未知"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | private String stock; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Scheduled(fixedDelay = 5000) | 
|---|
|  |  |  | @Scheduled(fixedDelay = 30000) | 
|---|
|  |  |  | public void execute() { | 
|---|
|  |  |  | log.info("定时任务开始执行"); | 
|---|
|  |  |  | if (!flag) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Scheduled(fixedDelay = 1000 * 60 * 30) | 
|---|
|  |  |  | public void executeStock() { | 
|---|
|  |  |  | log.info("Stock定时任务开始执行"); | 
|---|
|  |  |  | if (!flag) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if (!flag) { | 
|---|
|  |  |  | //            return; | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | Map<String, Object> mesTokenInfo = getMesTokenInfo(); | 
|---|
|  |  |  | reportDataHandler.stock(mesTokenInfo); | 
|---|
|  |  |  | log.info("Stock定时任务结束执行"); | 
|---|
|  |  |  | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | //TODO | 
|---|
|  |  |  | log.error("修改AGV入库通知档状态入出状态为Y,{}", e.getMessage()); | 
|---|
|  |  |  | //log.error("修改AGV入库通知档状态入出状态为Y,{}", e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return FAIL; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | import java.util.concurrent.TimeUnit; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Created by vincent on 2020/7/7 | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException("mes接口调用失败,返回信息:" + jsonObject); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | success = true; | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | return response; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("mes接口调用失败,返回信息:{}", e.getMessage()); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public ReturnT<String> stock(Map<String, Object> mesTokenInfo) { | 
|---|
|  |  |  | mesLocDetlService.delete(new EntityWrapper<MesLocDetl>().eq("1", 1)); | 
|---|
|  |  |  | List<MesLocDetl> all = mesLocDetlService.selectList(new EntityWrapper<>()); | 
|---|
|  |  |  | if (all != null) { | 
|---|
|  |  |  | List<Long> collect = all.stream().map(MesLocDetl::getId).collect(Collectors.toList()); | 
|---|
|  |  |  | boolean del = true; | 
|---|
|  |  |  | int d = 1; | 
|---|
|  |  |  | while (del && collect.size() > 0) { | 
|---|
|  |  |  | if (collect.size() > d * 1000) { | 
|---|
|  |  |  | mesLocDetlService.deleteBatchIds(collect.subList((d - 1) * 1000, d * 1000)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | mesLocDetlService.deleteBatchIds(collect.subList((d - 1) * 1000, collect.size())); | 
|---|
|  |  |  | del = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | d++; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean flag = true; | 
|---|
|  |  |  | Map<String, Object> req = new HashMap<>(); | 
|---|
|  |  |  | int i = 1; | 
|---|
|  |  |  | 
|---|
|  |  |  | mesLocDetl.setBatch(mesStock.getBatchNo()); | 
|---|
|  |  |  | mesLocDetl.setAnfme(mesStock.getOpAmount().getAmount().getAmount()); | 
|---|
|  |  |  | mesLocDetls.add(mesLocDetl); | 
|---|
|  |  |  | mesLocDetlService.insert(mesLocDetl); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | flag = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!mesLocDetls.isEmpty()) { | 
|---|
|  |  |  | mesLocDetlService.insertBatch(mesLocDetls); | 
|---|
|  |  |  | //mesLocDetlService.insertBatch(mesLocDetls); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | i++; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | spring: | 
|---|
|  |  |  | profiles: | 
|---|
|  |  |  | #dev loc prod | 
|---|
|  |  |  | active: prod | 
|---|
|  |  |  | active: loc | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | <?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.zy.asrs.mapper.AgvWarnMapper"> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!-- 通用查询映射结果 --> | 
|---|
|  |  |  | <resultMap id="BaseResultMap" type="com.zy.asrs.entity.Agv"> | 
|---|
|  |  |  | <id column="agv_no" property="agvNo" /> | 
|---|
|  |  |  | <result column="region" property="region" /> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </resultMap> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </mapper> | 
|---|
|  |  |  | 
|---|
|  |  |  | <mapper namespace="com.zy.asrs.mapper.AgvWarnLogMapper"> | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </mapper> | 
|---|
|  |  |  | 
|---|
|  |  |  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
|---|
|  |  |  | <mapper namespace="com.zy.asrs.mapper.MesLocDetlMapper"> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!-- 通用查询映射结果 --> | 
|---|
|  |  |  | <resultMap id="BaseResultMap" type="com.zy.asrs.entity.AgvLocDetl"> | 
|---|
|  |  |  | <result column="loc_no" property="locNo"/> | 
|---|
|  |  |  | <result column="zpallet" property="zpallet"/> | 
|---|
|  |  |  | <result column="anfme" property="anfme"/> | 
|---|
|  |  |  | <result column="matnr" property="matnr"/> | 
|---|
|  |  |  | <result column="maktx" property="maktx"/> | 
|---|
|  |  |  | <result column="batch" property="batch"/> | 
|---|
|  |  |  | <result column="order_no" property="orderNo"/> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <result column="specs" property="specs"/> | 
|---|
|  |  |  | <result column="model" property="model"/> | 
|---|
|  |  |  | <result column="color" property="color"/> | 
|---|
|  |  |  | <result column="brand" property="brand"/> | 
|---|
|  |  |  | <result column="unit" property="unit"/> | 
|---|
|  |  |  | <result column="price" property="price"/> | 
|---|
|  |  |  | <result column="sku" property="sku"/> | 
|---|
|  |  |  | <result column="units" property="units"/> | 
|---|
|  |  |  | <result column="barcode" property="barcode"/> | 
|---|
|  |  |  | <result column="origin" property="origin"/> | 
|---|
|  |  |  | <result column="manu" property="manu"/> | 
|---|
|  |  |  | <result column="manu_date" property="manuDate"/> | 
|---|
|  |  |  | <result column="item_num" property="itemNum"/> | 
|---|
|  |  |  | <result column="safe_qty" property="safeQty"/> | 
|---|
|  |  |  | <result column="weight" property="weight"/> | 
|---|
|  |  |  | <result column="length" property="length"/> | 
|---|
|  |  |  | <result column="volume" property="volume"/> | 
|---|
|  |  |  | <result column="three_code" property="threeCode"/> | 
|---|
|  |  |  | <result column="supp" property="supp"/> | 
|---|
|  |  |  | <result column="supp_code" property="suppCode"/> | 
|---|
|  |  |  | <result column="be_batch" property="beBatch"/> | 
|---|
|  |  |  | <result column="dead_time" property="deadTime"/> | 
|---|
|  |  |  | <result column="dead_warn" property="deadWarn"/> | 
|---|
|  |  |  | <result column="source" property="source"/> | 
|---|
|  |  |  | <result column="inspect" property="inspect"/> | 
|---|
|  |  |  | <result column="danger" property="danger"/> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <result column="modi_user" property="modiUser"/> | 
|---|
|  |  |  | <result column="modi_time" property="modiTime"/> | 
|---|
|  |  |  | <result column="appe_user" property="appeUser"/> | 
|---|
|  |  |  | <result column="appe_time" property="appeTime"/> | 
|---|
|  |  |  | <result column="memo" property="memo"/> | 
|---|
|  |  |  | <result column="stock_freeze" property="stockFreeze"/> | 
|---|
|  |  |  | </resultMap> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </mapper> | 
|---|
|  |  |  | 
|---|
|  |  |  | var pageCurr; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function getCol() { | 
|---|
|  |  |  | var cols = [ | 
|---|
|  |  |  | {field: 'anfme', align: 'center',title: '库存数量', style: 'font-weight: bold'} | 
|---|
|  |  |  | {field: 'anfme', align: 'center', title: 'WMS库存数量', style: 'font-weight: bold'} | 
|---|
|  |  |  | , {field: 'anfme2', align: 'center', title: 'MES库存数量', style: 'font-weight: bold'} | 
|---|
|  |  |  | , {field: 'matnr', align: 'center', title: '编码'} | 
|---|
|  |  |  | , {field: 'maktx', align: 'center', title: '物料名称'} | 
|---|
|  |  |  | ]; | 
|---|
|  |  |  | arrRemove(detlCols, "field", "anfme"); | 
|---|
|  |  |  | arrRemove(detlCols,"field","suppCode"); | 
|---|
|  |  |  | arrRemove(detlCols, "field", "zpallet"); | 
|---|
|  |  |  | arrRemove(detlCols, "field", "orderNo"); | 
|---|
|  |  |  | arrRemove(detlCols, "field", "threeCode"); | 
|---|
|  |  |  | arrRemove(detlCols, "field", "deadTime"); | 
|---|
|  |  |  | arrRemove(detlCols, "field", "batch"); | 
|---|
|  |  |  | cols.push.apply(cols, detlCols); | 
|---|
|  |  |  | // arrRemove(detlCols, "field", "anfme"); | 
|---|
|  |  |  | // arrRemove(detlCols,"field","suppCode"); | 
|---|
|  |  |  | // arrRemove(detlCols, "field", "zpallet"); | 
|---|
|  |  |  | // arrRemove(detlCols, "field", "orderNo"); | 
|---|
|  |  |  | // arrRemove(detlCols, "field", "threeCode"); | 
|---|
|  |  |  | // arrRemove(detlCols, "field", "deadTime"); | 
|---|
|  |  |  | // arrRemove(detlCols, "field", "batch"); | 
|---|
|  |  |  | //cols.push.apply(cols, detlCols); | 
|---|
|  |  |  | // cols.push({field: 'anfme', align: 'center',title: '数量', style: 'font-weight: bold'} | 
|---|
|  |  |  | // ) | 
|---|
|  |  |  | return cols; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | layui.use(['table','laydate', 'form'], function(){ | 
|---|
|  |  |  | layui.use(['table', 'laydate', 'form'], function () { | 
|---|
|  |  |  | var table = layui.table; | 
|---|
|  |  |  | var $ = layui.jquery; | 
|---|
|  |  |  | var layer = layui.layer; | 
|---|
|  |  |  | 
|---|
|  |  |  | tableIns = table.render({ | 
|---|
|  |  |  | elem: '#locDetlStatis', | 
|---|
|  |  |  | headers: {token: localStorage.getItem('token')}, | 
|---|
|  |  |  | url: baseUrl+'/agv/locDetl/statis/auth', | 
|---|
|  |  |  | url: baseUrl + '/agv/locDetl/statis/auth', | 
|---|
|  |  |  | page: true, | 
|---|
|  |  |  | limit: 20, | 
|---|
|  |  |  | limits: [20, 30, 50, 100, 200, 500], | 
|---|
|  |  |  | 
|---|
|  |  |  | response: { | 
|---|
|  |  |  | statusCode: 200 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | done: function(res, curr, count) { | 
|---|
|  |  |  | done: function (res, curr, count) { | 
|---|
|  |  |  | if (res.code === 403) { | 
|---|
|  |  |  | top.location.href = baseUrl+"/"; | 
|---|
|  |  |  | top.location.href = baseUrl + "/"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pageCurr=curr; | 
|---|
|  |  |  | pageCurr = curr; | 
|---|
|  |  |  | limit(); | 
|---|
|  |  |  | form.on('checkbox(tableCheckbox)', function (data) { | 
|---|
|  |  |  | var _index = $(data.elem).attr('table-index')||0; | 
|---|
|  |  |  | if(data.elem.checked){ | 
|---|
|  |  |  | var _index = $(data.elem).attr('table-index') || 0; | 
|---|
|  |  |  | if (data.elem.checked) { | 
|---|
|  |  |  | res.data[_index][data.value] = 'Y'; | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | res.data[_index][data.value] = 'N'; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | 
|---|
|  |  |  | * 显示库存总数量 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | $.ajax({ | 
|---|
|  |  |  | url: baseUrl+"/agv/locDetl/count", | 
|---|
|  |  |  | url: baseUrl + "/agv/locDetl/count", | 
|---|
|  |  |  | headers: {'token': localStorage.getItem('token')}, | 
|---|
|  |  |  | contentType:'application/json;charset=UTF-8', | 
|---|
|  |  |  | contentType: 'application/json;charset=UTF-8', | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | success: function (res) { | 
|---|
|  |  |  | $("#countNum").text(res.data + '个'); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 监听排序事件 | 
|---|
|  |  |  | table.on('sort(locDetlStatis)', function (obj) { | 
|---|
|  |  |  | var searchData = {}; | 
|---|
|  |  |  | $.each($('#search-box [name]').serializeArray(), function() { | 
|---|
|  |  |  | $.each($('#search-box [name]').serializeArray(), function () { | 
|---|
|  |  |  | searchData[this.name] = this.value; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | searchData['orderByField'] = obj.field; | 
|---|
|  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | done: function (res, curr, count) { | 
|---|
|  |  |  | if (res.code === 403) { | 
|---|
|  |  |  | top.location.href = baseUrl+"/"; | 
|---|
|  |  |  | top.location.href = baseUrl + "/"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pageCurr=curr; | 
|---|
|  |  |  | pageCurr = curr; | 
|---|
|  |  |  | limit(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 监听头工具栏事件 | 
|---|
|  |  |  | table.on('toolbar(locDetlStatis)', function (obj) { | 
|---|
|  |  |  | var checkStatus = table.checkStatus(obj.config.id); | 
|---|
|  |  |  | switch(obj.event) { | 
|---|
|  |  |  | switch (obj.event) { | 
|---|
|  |  |  | case 'exportAll': | 
|---|
|  |  |  | layer.confirm('确定导出Excel吗', {shadeClose: true}, function(){ | 
|---|
|  |  |  | var titles=[]; | 
|---|
|  |  |  | var fields=[]; | 
|---|
|  |  |  | layer.confirm('确定导出Excel吗', {shadeClose: true}, function () { | 
|---|
|  |  |  | var titles = []; | 
|---|
|  |  |  | var fields = []; | 
|---|
|  |  |  | obj.config.cols[0].map(function (col) { | 
|---|
|  |  |  | if (col.type === 'normal' && col.hide === false && col.toolbar == null) { | 
|---|
|  |  |  | titles.push(col.title); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | var exportData = {}; | 
|---|
|  |  |  | $.each($('#search-box [name]').serializeArray(), function() { | 
|---|
|  |  |  | $.each($('#search-box [name]').serializeArray(), function () { | 
|---|
|  |  |  | exportData[this.name] = this.value; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | var param = { | 
|---|
|  |  |  | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | var loadIndex = layer.msg('正在导出...', {icon: 16, shade: 0.01, time: false}); | 
|---|
|  |  |  | $.ajax({ | 
|---|
|  |  |  | url: baseUrl+"/agv/locDetl/statis/export", | 
|---|
|  |  |  | url: baseUrl + "/agv/locDetl/statis/export", | 
|---|
|  |  |  | headers: {'token': localStorage.getItem('token')}, | 
|---|
|  |  |  | data: JSON.stringify(param), | 
|---|
|  |  |  | dataType:'json', | 
|---|
|  |  |  | contentType:'application/json;charset=UTF-8', | 
|---|
|  |  |  | dataType: 'json', | 
|---|
|  |  |  | contentType: 'application/json;charset=UTF-8', | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | success: function (res) { | 
|---|
|  |  |  | layer.close(loadIndex); | 
|---|
|  |  |  | layer.closeAll(); | 
|---|
|  |  |  | if (res.code === 200) { | 
|---|
|  |  |  | table.exportFile(titles,res.data,'xls'); | 
|---|
|  |  |  | table.exportFile(titles, res.data, 'xls'); | 
|---|
|  |  |  | } else if (res.code === 403) { | 
|---|
|  |  |  | top.location.href = baseUrl+"/"; | 
|---|
|  |  |  | top.location.href = baseUrl + "/"; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | layer.msg(res.msg) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 'exportData': | 
|---|
|  |  |  | layer.confirm('确定导出Excel吗', {shadeClose: true}, function(){ | 
|---|
|  |  |  | var titles=[]; | 
|---|
|  |  |  | var fields=[]; | 
|---|
|  |  |  | layer.confirm('确定导出Excel吗', {shadeClose: true}, function () { | 
|---|
|  |  |  | var titles = []; | 
|---|
|  |  |  | var fields = []; | 
|---|
|  |  |  | obj.config.cols[0].map(function (col) { | 
|---|
|  |  |  | if (col.type === 'normal' && col.hide === false && col.toolbar == null) { | 
|---|
|  |  |  | titles.push(col.title); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | var exportData = {}; | 
|---|
|  |  |  | $.each($('#search-box [name]').serializeArray(), function() { | 
|---|
|  |  |  | $.each($('#search-box [name]').serializeArray(), function () { | 
|---|
|  |  |  | exportData[this.name] = this.value; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | var param = { | 
|---|
|  |  |  | 
|---|
|  |  |  | 'fields': fields | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | $.ajax({ | 
|---|
|  |  |  | url: baseUrl+"/agv/locDetl/export/auth", | 
|---|
|  |  |  | url: baseUrl + "/agv/locDetl/export/auth", | 
|---|
|  |  |  | headers: {'token': localStorage.getItem('token')}, | 
|---|
|  |  |  | data: JSON.stringify(param), | 
|---|
|  |  |  | dataType:'json', | 
|---|
|  |  |  | contentType:'application/json;charset=UTF-8', | 
|---|
|  |  |  | dataType: 'json', | 
|---|
|  |  |  | contentType: 'application/json;charset=UTF-8', | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | success: function (res) { | 
|---|
|  |  |  | layer.closeAll(); | 
|---|
|  |  |  | if (res.code === 200) { | 
|---|
|  |  |  | table.exportFile(titles,res.data,'xls'); | 
|---|
|  |  |  | table.exportFile(titles, res.data, 'xls'); | 
|---|
|  |  |  | } else if (res.code === 403) { | 
|---|
|  |  |  | top.location.href = baseUrl+"/"; | 
|---|
|  |  |  | top.location.href = baseUrl + "/"; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | layer.msg(res.msg) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 监听行工具事件 | 
|---|
|  |  |  | table.on('tool(locDetlStatis)', function(obj){ | 
|---|
|  |  |  | table.on('tool(locDetlStatis)', function (obj) { | 
|---|
|  |  |  | var data = obj.data; | 
|---|
|  |  |  | switch (obj.event) { | 
|---|
|  |  |  | // 详情 | 
|---|
|  |  |  | 
|---|
|  |  |  | area: [top.detailWidth, top.detailHeight], | 
|---|
|  |  |  | shadeClose: false, | 
|---|
|  |  |  | content: 'locDetl_detail.html', | 
|---|
|  |  |  | success: function(layero, index){ | 
|---|
|  |  |  | success: function (layero, index) { | 
|---|
|  |  |  | setFormVal(layer.getChildFrame('#detail', index), data, true); | 
|---|
|  |  |  | top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); | 
|---|
|  |  |  | layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); | 
|---|
|  |  |  | layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); | 
|---|
|  |  |  | layer.iframeAuto(index); | 
|---|
|  |  |  | layer.style(index, {top: (($(window).height() - layer.getChildFrame('#data-detail', index).height()) / 3) + "px"}); | 
|---|
|  |  |  | layero.find('iframe')[0].contentWindow.layui.form.render('select'); | 
|---|
|  |  |  | layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 关闭动作 | 
|---|
|  |  |  | $(document).on('click','#data-detail-close', function () { | 
|---|
|  |  |  | $(document).on('click', '#data-detail-close', function () { | 
|---|
|  |  |  | parent.layer.closeAll(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function tableReload(child) { | 
|---|
|  |  |  | var searchData = {}; | 
|---|
|  |  |  | $.each($('#search-box [name]').serializeArray(), function() { | 
|---|
|  |  |  | $.each($('#search-box [name]').serializeArray(), function () { | 
|---|
|  |  |  | searchData[this.name] = this.value; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | (child ? parent.tableIns : tableIns).reload({ | 
|---|
|  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | done: function (res, curr, count) { | 
|---|
|  |  |  | if (res.code === 403) { | 
|---|
|  |  |  | top.location.href = baseUrl+"/"; | 
|---|
|  |  |  | top.location.href = baseUrl + "/"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pageCurr=curr; | 
|---|
|  |  |  | pageCurr = curr; | 
|---|
|  |  |  | if (res.data.length === 0 && count !== 0) { | 
|---|
|  |  |  | tableIns.reload({ | 
|---|
|  |  |  | where: searchData, | 
|---|
|  |  |  | page: { | 
|---|
|  |  |  | curr: pageCurr-1 | 
|---|
|  |  |  | curr: pageCurr - 1 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | pageCurr -= 1; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function detailScreen(index) { | 
|---|
|  |  |  | var detail = layer.getChildFrame('#data-detail', index); | 
|---|
|  |  |  | var height = detail.height()+60; | 
|---|
|  |  |  | if (height > ($(window).height()*0.9)) { | 
|---|
|  |  |  | height = ($(window).height()*0.8); | 
|---|
|  |  |  | var height = detail.height() + 60; | 
|---|
|  |  |  | if (height > ($(window).height() * 0.9)) { | 
|---|
|  |  |  | height = ($(window).height() * 0.8); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | layer.style(index, { | 
|---|
|  |  |  | //        top: (($(window).height()-height)/3)+"px", | 
|---|
|  |  |  | height: height+'px' | 
|---|
|  |  |  | height: height + 'px' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="layui-inline"> | 
|---|
|  |  |  | <fieldset class="layui-elem-field"> | 
|---|
|  |  |  | <legend>总计数量</legend> | 
|---|
|  |  |  | <div class="layui-field-box" id="countNum"> | 
|---|
|  |  |  | 请稍等 | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </fieldset> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <!--    <div class="layui-inline">--> | 
|---|
|  |  |  | <!--        <fieldset class="layui-elem-field">--> | 
|---|
|  |  |  | <!--            <legend>总计数量</legend>--> | 
|---|
|  |  |  | <!--            <div class="layui-field-box" id="countNum">--> | 
|---|
|  |  |  | <!--                请稍等--> | 
|---|
|  |  |  | <!--            </div>--> | 
|---|
|  |  |  | <!--        </fieldset>--> | 
|---|
|  |  |  | <!--    </div>--> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!-- 表格 --> | 
|---|
|  |  |  | 
|---|
|  |  |  | <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> | 
|---|
|  |  |  | <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> | 
|---|
|  |  |  | <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> | 
|---|
|  |  |  | <script type="text/javascript" src="../../static/js/agvLocDetlStatis/locDetlStatis.js" charset="utf-8"></script> | 
|---|
|  |  |  | <script type="text/javascript" src="../../static/js/agvLocDetlStatis/locDetlStatis.js?v=1" charset="utf-8"></script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </body> | 
|---|
|  |  |  | </html> | 
|---|