From e745789c9c3cf0cb94497dab985571a6b15f3d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E9=B8=A3?= Date: Mon, 15 Mar 2021 15:35:15 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E7=9B=98=E7=82=B9=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/CategoryController.java | 44 ++++++- .../web/controller/StockController.java | 34 +++++- .../web/controller/StreetController.java | 6 + .../com/zhehekeji/web/entity/Category.java | 11 +- .../java/com/zhehekeji/web/entity/Stock.java | 15 +++ .../zhehekeji/web/lib/CaptureReceiveCB.java | 5 +- .../zhehekeji/web/lib/CaptureRunnable.java | 63 ++++------ .../java/com/zhehekeji/web/lib/OrderInfo.java | 6 + .../zhehekeji/web/mapper/CategoryMapper.java | 4 +- .../web/pojo/category/CategoryExcel.java | 2 +- .../web/pojo/category/PageSearch.java | 11 ++ .../web/pojo/stock/LocalDateTimeConvert.java | 40 +++++++ .../web/pojo/stock/StockExportExcel.java | 35 ++++++ .../zhehekeji/web/pojo/stock/StockStatus.java | 26 ++++ .../web/pojo/stock/StockStatusConvert.java | 36 ++++++ .../zhehekeji/web/service/CategoryImport.java | 43 ------- .../web/service/CategoryService.java | 112 ++++++++++++------ .../zhehekeji/web/service/OrderService.java | 68 +++++------ .../com/zhehekeji/web/service/PlcService.java | 6 +- .../zhehekeji/web/service/StockService.java | 65 +++++++++- .../zhehekeji/web/service/StreetService.java | 73 ++++++++---- 21 files changed, 504 insertions(+), 201 deletions(-) create mode 100644 web/src/main/java/com/zhehekeji/web/pojo/category/PageSearch.java create mode 100644 web/src/main/java/com/zhehekeji/web/pojo/stock/LocalDateTimeConvert.java create mode 100644 web/src/main/java/com/zhehekeji/web/pojo/stock/StockExportExcel.java create mode 100644 web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatus.java create mode 100644 web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatusConvert.java delete mode 100644 web/src/main/java/com/zhehekeji/web/service/CategoryImport.java diff --git a/web/src/main/java/com/zhehekeji/web/controller/CategoryController.java b/web/src/main/java/com/zhehekeji/web/controller/CategoryController.java index 293bf2d..b115b49 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/CategoryController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/CategoryController.java @@ -1,16 +1,18 @@ package com.zhehekeji.web.controller; +import com.github.pagehelper.PageInfo; import com.zhehekeji.core.pojo.Result; +import com.zhehekeji.web.entity.Category; +import com.zhehekeji.web.pojo.category.PageSearch; import com.zhehekeji.web.service.CategoryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; +import java.util.List; @Api(value = "category",tags = "分类管理") @RestController @@ -23,7 +25,41 @@ public class CategoryController { @PostMapping("/import") @ApiOperation(value = "分类导入") public Result upload(MultipartFile file) throws IOException { - categoryService.importExcel(file); + Integer rows = categoryService.importExcel(file); + Result result = Result.success(); + result.setMessage("成功导入"+rows+"行"); + return result; + } + + @ApiOperation("分页列表") + @PostMapping("/page") + public Result> page(@RequestBody PageSearch pageSearch){ + return Result.success(categoryService.list(pageSearch)); + } + + @ApiOperation("列表") + @GetMapping("/list") + public Result> list(@RequestParam String name){ + return Result.success(categoryService.list(name)); + } + + @ApiOperation("修改") + @PutMapping() + public Result edit(@RequestBody Category category){ + categoryService.edit(category); + return Result.success(); + } + + @ApiOperation("新增") + @PostMapping() + public Result add(@RequestBody Category category){ + return Result.success(categoryService.add(category)); + } + + @ApiOperation("删除") + @DeleteMapping("/{id}") + public Result del(@PathVariable Integer id){ + categoryService.del(id); return Result.success(); } } diff --git a/web/src/main/java/com/zhehekeji/web/controller/StockController.java b/web/src/main/java/com/zhehekeji/web/controller/StockController.java index 23e26a1..c9ad9d9 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StockController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StockController.java @@ -1,16 +1,24 @@ package com.zhehekeji.web.controller; +import com.alibaba.excel.EasyExcel; import com.zhehekeji.core.pojo.Result; +import com.zhehekeji.web.entity.Stock; +import com.zhehekeji.web.pojo.stock.StockExportExcel; import com.zhehekeji.web.service.StockService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; @Api(value = "Stock",tags = "库存管理") @RestController @@ -19,10 +27,30 @@ public class StockController { @Resource private StockService stockService; + @PostMapping("/import") @ApiOperation(value = "库存导入") public Result upload(MultipartFile file){ stockService.importExcel(file); return Result.success(); } + + @GetMapping("/list") + @ApiOperation(value = "盘点页面 返回map key:货架号 value:库存信息") + public Result>> stockByStreet(@RequestParam(required = true) Integer streetId){ + return Result.success(stockService.stocksByStreetId(streetId)); + } + + @ApiOperation(value = "导出全部巷道excel") + @RequestMapping(value = "/export", method = RequestMethod.GET) + public void batchDeliver(@RequestParam Integer streetId, HttpServletResponse response) throws IOException { + OutputStream os = response.getOutputStream(); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("盘点" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")), "UTF-8"); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + List excels = stockService.exportExcels(streetId); + EasyExcel.write(os, StockExportExcel.class).sheet().doWrite(excels); + + } } diff --git a/web/src/main/java/com/zhehekeji/web/controller/StreetController.java b/web/src/main/java/com/zhehekeji/web/controller/StreetController.java index 551051a..34938b5 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StreetController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StreetController.java @@ -55,6 +55,12 @@ public class StreetController { return Result.success(); } + @GetMapping("/{id}") + @ApiOperation(value = "巷道详情") + public Result detail(@PathVariable Integer id){ + return Result.success(streetService.streetById(id)); + } + /*@GetMapping("/userCenter") diff --git a/web/src/main/java/com/zhehekeji/web/entity/Category.java b/web/src/main/java/com/zhehekeji/web/entity/Category.java index 2d5a7de..ce1679e 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Category.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Category.java @@ -5,8 +5,11 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; +import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; import java.util.Map; @Data @@ -18,14 +21,6 @@ public class Category { private String name; - private Integer level; - - private Integer parentId; - private LocalDateTime updateTime; - /** - * key : name - */ - private Map children; } diff --git a/web/src/main/java/com/zhehekeji/web/entity/Stock.java b/web/src/main/java/com/zhehekeji/web/entity/Stock.java index 0031087..13a47a6 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Stock.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Stock.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @@ -15,21 +16,35 @@ public class Stock { @TableId(type = IdType.AUTO) private Long id; + private String orderNum; + + @ApiModelProperty("品规名称") private String category; + @ApiModelProperty("货架号") private String shelveId; @TableField(value = "`count`") + @ApiModelProperty("数量") private Integer count; @TableField(value = "`row`") + @ApiModelProperty("行号") private Integer row; @TableField(value = "`column`") + @ApiModelProperty("列号") private Integer column; + @ApiModelProperty("0:未盘点 1:盘点异常 2:核对正确") private Integer status; + @ApiModelProperty("操作前的图片") + private String preoperationPic; + + @ApiModelProperty("操作后的图片") + private String overoperationPic; + private LocalDateTime exportTime; diff --git a/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java b/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java index 24e0c9d..d7f9efb 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java @@ -3,6 +3,7 @@ package com.zhehekeji.web.lib; import com.sun.jna.Pointer; import com.zhehekeji.web.mapper.OrderLastMediaMapper; import com.zhehekeji.web.mapper.OrderMapper; +import com.zhehekeji.web.mapper.StockMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -30,7 +31,7 @@ public class CaptureReceiveCB implements NetSDKLib.fSnapRev{ private static String fileType = "jpg"; @Resource - private OrderLastMediaMapper lastMediaMapper; + private StockMapper stockMapper; /** * 执行线程池 @@ -40,7 +41,7 @@ public class CaptureReceiveCB implements NetSDKLib.fSnapRev{ @Override public void invoke(NetSDKLib.LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { - CaptureRunnable captureRunnable = new CaptureRunnable(CmdSerial,fileType,RevLen,mediaPath,pBuf,orderMapper,lastMediaMapper); + CaptureRunnable captureRunnable = new CaptureRunnable(CmdSerial,fileType,RevLen,mediaPath,pBuf,orderMapper,stockMapper); threadPoolExecutor.execute(captureRunnable); } diff --git a/web/src/main/java/com/zhehekeji/web/lib/CaptureRunnable.java b/web/src/main/java/com/zhehekeji/web/lib/CaptureRunnable.java index 5dc6234..29531fa 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CaptureRunnable.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CaptureRunnable.java @@ -3,9 +3,9 @@ package com.zhehekeji.web.lib; import com.sun.jna.Pointer; import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.web.entity.Order; -import com.zhehekeji.web.entity.OrderLastMedia; -import com.zhehekeji.web.mapper.OrderLastMediaMapper; +import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.mapper.OrderMapper; +import com.zhehekeji.web.mapper.StockMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; @@ -30,17 +30,17 @@ public class CaptureRunnable implements Runnable { private OrderMapper orderMapper; - private OrderLastMediaMapper lastMediaMapper; + private StockMapper stockMapper; public CaptureRunnable(int cmdSerial, String fileType, Integer revLen, String mediaPath, - Pointer pBuf, OrderMapper orderMapper, OrderLastMediaMapper lastMediaMapper) { + Pointer pBuf, OrderMapper orderMapper, StockMapper stockMapper) { this.CmdSerial = cmdSerial; this.fileType = fileType; this.RevLen = revLen; this.mediaPath = mediaPath; this.pBuf = pBuf; this.orderMapper = orderMapper; - this.lastMediaMapper = lastMediaMapper; + this.stockMapper = stockMapper; } @Override @@ -53,39 +53,41 @@ public class CaptureRunnable implements Runnable { if (picPath == null) { return; } - log.info("save pic orderNum:{} path:{}", orderInfo.getOrderNum(), path); + String shelveId = orderInfo.getShelveId(); Integer row = orderInfo.getRow(); Integer column = orderInfo.getColumn(); //同步 防止有照片丢失 - synchronized (orderInfo.getOrderNum().intern()){ + synchronized (orderInfo.getOrderNum().intern()) { Order order = orderMapper.getOneByOrderNum(orderInfo.getOrderNum()); - log.info(" update order get pics:{},orderNum:{}",order.getPicPaths(),orderInfo.getOrderNum()); - if(order != null){ - OrderLastMedia orderLastMedia = lastMediaMapper.getOne(shelveId,row,column); - if (orderLastMedia == null) { - orderLastMedia = initLastOrder(shelveId,row,column,orderInfo.getOrderNum()); + if (order != null) { + Stock stock = stockMapper.getByShelveIdAndRowColumn(orderInfo.getShelveId(), orderInfo.getRow(), orderInfo.getColumn()); + if (stock == null) { + stock = new Stock(); + stock.setShelveId(shelveId); + stock.setColumn(column); + stock.setRow(row); + stock.setStatus(0); + } + if (orderInfo.getIsPre()) { + stock.setOveroperationPic(path); + } else { + stock.setOveroperationPic(path); } + stock.setOrderNum(order.getOrderNum()); + stockMapper.updateById(stock); String pics = order.getPicPaths(); - if(StringUtils.isEmpty(pics)){ + if (StringUtils.isEmpty(pics)) { order.setPicPaths(path); - }else { - order.setPicPaths(pics+","+path); + } else { + order.setPicPaths(pics + "," + path); } Order update = new Order(); update.setId(order.getId()); update.setPicPaths(order.getPicPaths()); - log.info(" update order set pics:{},orderNum:{}",update.getPicPaths(),orderInfo.getOrderNum()); + log.info(" update order set pics:{},orderNum:{}", update.getPicPaths(), orderInfo.getOrderNum()); orderMapper.updateById(update); - log.info(" update over :{}",update.toString()); - -// if(StringUtils.isEmpty(orderLastMedia.getPics())){ -// orderLastMedia.setPics(picPath); -// }else { -// orderLastMedia.setPics(pics+","+picPath); -// } -// lastMediaMapper.updateById(orderLastMedia); } } @@ -94,17 +96,6 @@ public class CaptureRunnable implements Runnable { log.warn("no order"); } - private OrderLastMedia initLastOrder(String shelveId,Integer row,Integer column,String orderNum) { - OrderLastMedia orderLastMedia = new OrderLastMedia(); - orderLastMedia.setShelveId(shelveId); - orderLastMedia.setRow(row); - orderLastMedia.setColumn(column); - orderLastMedia.setLastOrderNum(orderNum); - lastMediaMapper.insert(orderLastMedia); - return orderLastMedia; - - } - private String savePic(Pointer pBuf, int RevLen, String path) { BufferedImage bufferedImage = null; if (pBuf != null && RevLen > 0) { @@ -125,8 +116,6 @@ public class CaptureRunnable implements Runnable { bufferedImage.flush(); } } - - } return null; } diff --git a/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java b/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java index 8cda304..30103d6 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java +++ b/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java @@ -21,6 +21,12 @@ public class OrderInfo { private String code; + /** + * true 操作前 + * false 操作后 + */ + private Boolean isPre; + /** * 1:入库 2:货位 3:出库 */ diff --git a/web/src/main/java/com/zhehekeji/web/mapper/CategoryMapper.java b/web/src/main/java/com/zhehekeji/web/mapper/CategoryMapper.java index 925a4fb..be7cd24 100644 --- a/web/src/main/java/com/zhehekeji/web/mapper/CategoryMapper.java +++ b/web/src/main/java/com/zhehekeji/web/mapper/CategoryMapper.java @@ -6,6 +6,6 @@ import org.apache.ibatis.annotations.Select; public interface CategoryMapper extends BaseMapper { - @Select(" select * from category where name = #{name} and level = #{level} and parent_id = #{parentId} limit 1") - Category getByNameAndLevelAndParent(String name,Integer level,Integer parentId); + @Select(" select * from category where name = #{name} limit 1") + Category getByName(String name); } diff --git a/web/src/main/java/com/zhehekeji/web/pojo/category/CategoryExcel.java b/web/src/main/java/com/zhehekeji/web/pojo/category/CategoryExcel.java index 12a220c..a77ed7d 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/category/CategoryExcel.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/category/CategoryExcel.java @@ -7,5 +7,5 @@ import java.util.Map; @Data public class CategoryExcel { - private Map map; + private String category; } diff --git a/web/src/main/java/com/zhehekeji/web/pojo/category/PageSearch.java b/web/src/main/java/com/zhehekeji/web/pojo/category/PageSearch.java new file mode 100644 index 0000000..d4d23ac --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/pojo/category/PageSearch.java @@ -0,0 +1,11 @@ +package com.zhehekeji.web.pojo.category; + +import lombok.Data; + +@Data +public class PageSearch { + + private Integer pageSize; + + private Integer pageNum; +} diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/LocalDateTimeConvert.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/LocalDateTimeConvert.java new file mode 100644 index 0000000..f41d858 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/LocalDateTimeConvert.java @@ -0,0 +1,40 @@ +package com.zhehekeji.web.pojo.stock; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class LocalDateTimeConvert implements Converter { + @Override + public Class supportJavaTypeKey() { + return null; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return null; + } + + @Override + public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return null; + } + + @Override + public CellData convertToExcelData(LocalDateTime localDateTime, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { + + if (localDateTime != null) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + String time = localDateTime.format(formatter); + return new CellData(time); + } + return null; + } + + +} diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockExportExcel.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockExportExcel.java new file mode 100644 index 0000000..b04ae16 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockExportExcel.java @@ -0,0 +1,35 @@ +package com.zhehekeji.web.pojo.stock; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class StockExportExcel { + + @ExcelProperty(index = 0, value = "巷道号") + private String streetName; + + @ExcelProperty(index = 4, value = "品规") + private String category; + + @ExcelProperty(index = 1, value = "货架号") + private String shelveId; + + @ExcelProperty(index = 5, value = "数量") + private Integer count; + + @ExcelProperty(index = 2, value = "行") + private Integer row; + + @ExcelProperty(index = 3, value = "列") + private Integer column; + + @ExcelProperty(index = 6, value = "人工复核结果", converter = StockStatusConvert.class) + private Integer status; + + @ExcelProperty(index = 7, value = "复核时间", converter = LocalDateTimeConvert.class) + private LocalDateTime exportTime; + +} diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatus.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatus.java new file mode 100644 index 0000000..a603a43 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatus.java @@ -0,0 +1,26 @@ +package com.zhehekeji.web.pojo.stock; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum StockStatus { + + /** + * 待付款 + */ + PENDING(0, "未核对"), + /** + * 待发货 + */ + SUCCESS(1, "核对准确"), + /** + * 已发货 + */ + ERROR(2, "核对错误"), + ; + private Integer status; + + private String name; +} diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatusConvert.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatusConvert.java new file mode 100644 index 0000000..aff4508 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockStatusConvert.java @@ -0,0 +1,36 @@ +package com.zhehekeji.web.pojo.stock; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +public class StockStatusConvert implements Converter { + @Override + public Class supportJavaTypeKey() { + return null; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return null; + } + + @Override + public Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return null; + } + + @Override + public CellData convertToExcelData(Integer integer, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { + for (StockStatus orderStatus : StockStatus.values()) { + if (orderStatus.getStatus().equals(integer)) { + return new CellData(orderStatus.getName()); + } + } + return null; + } + + +} diff --git a/web/src/main/java/com/zhehekeji/web/service/CategoryImport.java b/web/src/main/java/com/zhehekeji/web/service/CategoryImport.java deleted file mode 100644 index 61553e6..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/CategoryImport.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.zhehekeji.web.service; - -import com.alibaba.excel.context.AnalysisContext; -import com.alibaba.excel.event.AnalysisEventListener; -import com.zhehekeji.web.pojo.category.CategoryExcel; -import com.zhehekeji.web.pojo.stock.StockExcel; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Slf4j -public class CategoryImport extends AnalysisEventListener> { - - Map headMap = new HashMap<>(); - - List> list = new ArrayList<>(); - - @Override - public void invokeHeadMap(Map headMap, AnalysisContext context){ - System.out.println(headMap.toString()); - this.headMap=headMap; - } - - @Override - public void invoke(Map data, AnalysisContext context) { - log.info("解析到一条数据:{}, currentRowIndex: {}----", data.toString(), context.readRowHolder().getRowIndex()); - Map> map = new HashMap<>(); - map.put(context.readRowHolder().getRowIndex(), data); -// for (Integer key: headMap.keySet()){ -// String s = integerStringMap.get(key);//即可读取对应数据 -// System.out.println("key:"+key); -// System.out.println("value:"+s); -// } - } - - @Override - public void doAfterAllAnalysed(AnalysisContext analysisContext) { - - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/CategoryService.java b/web/src/main/java/com/zhehekeji/web/service/CategoryService.java index b8c40ef..cb6f347 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CategoryService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CategoryService.java @@ -2,9 +2,15 @@ package com.zhehekeji.web.service; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.zhehekeji.core.util.Assert; import com.zhehekeji.web.entity.Category; import com.zhehekeji.web.mapper.CategoryMapper; import com.zhehekeji.web.pojo.category.CategoryExcel; +import com.zhehekeji.web.pojo.category.CategoryModel; +import com.zhehekeji.web.pojo.category.PageSearch; import com.zhehekeji.web.pojo.stock.StockExcel; import lombok.extern.slf4j.Slf4j; import org.apache.poi.hssf.usermodel.HSSFCell; @@ -16,15 +22,21 @@ import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.BeanUtils; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service @Slf4j @@ -33,54 +45,88 @@ public class CategoryService { @Resource private CategoryMapper categoryMapper; -// public void importExcel(MultipartFile file) throws IOException { -// EasyExcel.read(file.getInputStream(), HashMap.class, new CategoryImport()).sheet().doRead(); -// } + public PageInfo list(PageSearch pageSearch){ + PageHelper.startPage(pageSearch.getPageNum(),pageSearch.getPageSize()); + List all = categoryMapper.selectByMap(new HashMap<>(0)); + return new PageInfo<>(all); + } + + public List list(String name){ + List list = categoryMapper.selectList(new QueryWrapper().like("name",name)); + return list; + } + + public void edit(Category category){ + Assert.notNull(category.getId(),"ID不能为空"); + category.setUpdateTime(LocalDateTime.now()); + categoryMapper.updateById(category); + } + + public void del(Integer id){ + categoryMapper.deleteById(id); + } + + public Integer add(Category category){ + category.setUpdateTime(LocalDateTime.now()); + try { + categoryMapper.insert(category); + }catch (DuplicateKeyException e){ + Assert.isTrue(false,"品规已存在"); + } + return category.getId(); + } - public void importExcel(MultipartFile file) throws IOException { + public Integer importExcel(MultipartFile file) throws IOException { XSSFWorkbook wb = new XSSFWorkbook(file.getInputStream()); XSSFSheet sheet = wb.getSheetAt(0); int rows = sheet.getPhysicalNumberOfRows(); + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + runExcel(wb); + } + }); + thread.start(); + return rows-1; + } + + public void runExcel (XSSFWorkbook workbook) { + XSSFSheet sheet = workbook.getSheetAt(0); + int rows = sheet.getPhysicalNumberOfRows(); Row firstRow = sheet.getRow(0); int columns = firstRow.getLastCellNum(); - List categories = new ArrayList<>(); for (int i = 1; i < rows; i++) { XSSFRow row = sheet.getRow(i); - String parentName = ""; + StringBuffer category = new StringBuffer(); for(int j = 0;j 0){ + category.deleteCharAt(category.length()-1); + } + insert(category.toString()); } } - public void insert(Category category,String parentName){ - // 父类id - Integer parentLevel = 0; - Integer parentId = 0; - if(category.getLevel() == 1){ - //本身就是最顶级 - parentLevel = 1; - parentId = 0; - }else if (category.getLevel() > 1) { - parentLevel = category.getLevel() - 1; - Category parent = categoryMapper.getByNameAndLevelAndParent(parentName,parentLevel,0); - if(parent != null){ - parentId = parent.getId(); - }else { - log.error("category 不存在:name:{},level:{}",parentName,parentLevel); + public Integer insert(String name){ + Category category = categoryMapper.getByName(name); + if(category == null){ + category = new Category(); + category.setName(name); + category.setUpdateTime(LocalDateTime.now()); + try { + categoryMapper.insert(category); + }catch (DuplicateKeyException e){ + log.warn("品规已存在:{}",name); } - }else { - return; } - Category newCate = categoryMapper.getByNameAndLevelAndParent(category.getName(),category.getLevel(),parentId); - - - + return category.getId(); } } diff --git a/web/src/main/java/com/zhehekeji/web/service/OrderService.java b/web/src/main/java/com/zhehekeji/web/service/OrderService.java index 1e43153..b60792d 100644 --- a/web/src/main/java/com/zhehekeji/web/service/OrderService.java +++ b/web/src/main/java/com/zhehekeji/web/service/OrderService.java @@ -1,7 +1,5 @@ package com.zhehekeji.web.service; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.zhehekeji.common.util.PathUtil; @@ -31,8 +29,6 @@ public class OrderService { @Resource private OrderMapper orderMapper; - // @Resource -// private StreetShelveMapper streetShelveMapper; @Resource private StreetMapper streetMapper; @@ -43,13 +39,6 @@ public class OrderService { private String mp4Path; public PageInfo orders(OrderSearch orderSearch) { -// QueryWrapper queryWrapper = new QueryWrapper(); -// if(!StringUtils.isEmpty(orderSearch.getOrderNum())){ -// queryWrapper.eq("order_num", orderSearch.getOrderNum()); -// } -// if(orderSearch.getStartTimestamp() != null && orderSearch.getEndTimestamp() != null){ -// queryWrapper.between("create_time",orderSearch.getStartTimestamp(),orderSearch.getEndTimestamp()); -// } List streets = streetMapper.selectByMap(new HashMap<>(0)); Map streetMap = new HashMap<>(); streets.forEach(street -> { @@ -139,36 +128,37 @@ public class OrderService { * @param warn 是否有告警 true 告警 */ public void orderStop(String orderNum, Street street, Boolean warn) { + synchronized (orderNum.intern()){ + Order order = orderMapper.getOneByOrderNum(orderNum); + if (order == null) { + log.error("订单结束信号,订单不存在,orderNum:{}", orderNum); + return; + } + if (order.getStartTime() == null) { + log.error("订单结束信号,订单未开始,orderNum:{}", orderNum); + return; + } + Order update = new Order(); + update.setId(order.getId()); + if (warn) { + update.setStatus(1); + } else { + update.setStatus(0); + } + update.setEndTime(LocalDateTime.now()); - Order order = orderMapper.getOneByOrderNum(orderNum); - if (order == null) { - log.error("订单结束信号,订单不存在,orderNum:{}", orderNum); - return; - } - if (order.getStartTime() == null) { - log.error("订单结束信号,订单未开始,orderNum:{}", orderNum); - return; - } - if (warn) { - order.setStatus(1); - } else { - order.setStatus(0); - } - order.setOrderNum(orderNum); - order.setEndTime(LocalDateTime.now()); - - if (street.getCamera1Id() != null) { - String path = PathUtil.createFileName("mp4"); - PtzControlModule.downloadMp4(street.getCamera1Id(), mp4Path + path, orderNum, order.getStartTime(), order.getEndTime()); - order.setVideoPath1(path); - } - if (street.getCamera2Id() != null) { - String path = PathUtil.createFileName("mp4"); - PtzControlModule.downloadMp4(street.getCamera2Id(), mp4Path + path, orderNum, order.getStartTime(), order.getEndTime()); - order.setVideoPath2(path); + if (street.getCamera1Id() != null) { + String path = PathUtil.createFileName("mp4"); + PtzControlModule.downloadMp4(street.getCamera1Id(), mp4Path + path, orderNum, order.getStartTime(), order.getEndTime().plusSeconds(5)); + update.setVideoPath1(path); + } + if (street.getCamera2Id() != null) { + String path = PathUtil.createFileName("mp4"); + PtzControlModule.downloadMp4(street.getCamera2Id(), mp4Path + path, orderNum, order.getStartTime(), order.getEndTime().plusSeconds(5)); + update.setVideoPath2(path); + } + orderMapper.updateById(update); } - orderMapper.update(order, new UpdateWrapper().eq("order_num", orderNum)); - } diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index 854b8b7..9c5d38d 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -106,6 +106,10 @@ public class PlcService { Integer leftRight = 0; Integer row = 0; Integer column = 0; + Boolean isPre = true; + if(times % 2 ==0){ + isPre = false; + } if(times == 2 || times == 1){ leftRight = plcOrderInfo.getLeftRight1(); row = plcOrderInfo.getRow1(); @@ -139,7 +143,7 @@ public class PlcService { log.error("异常的任务号,找不到对应的货架或行列号。orderInfo:{},plcId:{},time:{}",plcOrderInfo.toString(),plcId,times); return; } - OrderInfo orderInfo = new OrderInfo(0L,plcOrderInfo.getOrderNum(),shelveId,row,column,code); + OrderInfo orderInfo = new OrderInfo(0L,plcOrderInfo.getOrderNum(),shelveId,row,column,code,isPre); CameraCaptureMap.put(street.getCamera1Id(),orderInfo); CameraCaptureMap.put(street.getCamera2Id(),orderInfo); move(street.getCamera1Id(), street.getCamera2Id(), code); diff --git a/web/src/main/java/com/zhehekeji/web/service/StockService.java b/web/src/main/java/com/zhehekeji/web/service/StockService.java index 2856775..e09eeee 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -1,17 +1,22 @@ package com.zhehekeji.web.service; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhehekeji.web.entity.Stock; +import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.mapper.StockMapper; import com.zhehekeji.web.pojo.stock.StockExcel; +import com.zhehekeji.web.pojo.stock.StockExportExcel; +import com.zhehekeji.web.pojo.street.StreetType; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; -import java.util.List; -import java.util.UUID; +import java.util.*; +import java.util.stream.Collectors; @Service @Slf4j @@ -19,6 +24,8 @@ public class StockService { @Resource private StockMapper stockMapper; + @Resource + private StreetService streetService; public void importExcel(MultipartFile file){ Thread thread = new Thread( @@ -36,4 +43,58 @@ public class StockService { thread.start(); } + public Map> stocksByStreetId(Integer streetId){ + List stocks = list(streetId); + Map> shelveMap = stocks.stream().collect(Collectors.groupingBy(Stock::getShelveId)); + return shelveMap; + } + + public List list(Integer streetId){ + Street street = streetService.streetById(streetId); + if(street == null){ + return new ArrayList<>(); + } + + Map map = new HashMap<>(); + if(StreetType.SINGLE.getType().equals(street.getLeftType())){ + map.put(street.getLeftShelveId(),new Integer[]{street.getLeftColumn(),street.getLeftRow()}); + } + if(StreetType.SINGLE.getType().equals(street.getRightType())){ + map.put(street.getRightShelveId(),new Integer[]{street.getRightColumn(),street.getRightRow()}); + } + if(StreetType.DOUBLE.getType().equals(street.getLeftType())){ + map.put(street.getLeftInsideShelveId(),new Integer[]{street.getLeftColumn(),street.getLeftRow()}); + map.put(street.getLeftOutsideShelveId(),new Integer[]{street.getLeftColumn(),street.getLeftRow()}); + } + if(StreetType.DOUBLE.getType().equals(street.getRightType())){ + map.put(street.getRightInsideShelveId(),new Integer[]{street.getRightColumn(),street.getRightRow()}); + map.put(street.getRightOutsideShelveId(),new Integer[]{street.getRightColumn(),street.getRightRow()}); + } + if(CollectionUtils.isEmpty(map)){ + return new ArrayList<>(); + } + Set shelves = map.keySet(); + List stocks = stockMapper.selectList(new QueryWrapper().in("shelve_id",shelves).orderByAsc("shelve_id","`row`","`column`")); + return stocks; + } + + public List exportExcels(Integer streetId){ + List stocks = list(streetId); + Street street = streetService.streetById(streetId); + List stockExportExcels = new ArrayList<>(stocks.size()); + stocks.forEach(stock -> { + StockExportExcel stockExportExcel = new StockExportExcel(); + stockExportExcel.setCategory(stock.getCategory()); + stockExportExcel.setColumn(stock.getColumn()); + stockExportExcel.setCount(stock.getCount()); + stockExportExcel.setRow(stock.getRow()); + stockExportExcel.setStreetName(street.getName()); + stockExportExcel.setExportTime(stock.getExportTime()); + stockExportExcel.setShelveId(stock.getShelveId()); + stockExportExcel.setStatus(stock.getStatus()); + stockExportExcels.add(stockExportExcel); + }); + return stockExportExcels; + } + } diff --git a/web/src/main/java/com/zhehekeji/web/service/StreetService.java b/web/src/main/java/com/zhehekeji/web/service/StreetService.java index df7b840..913853e 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StreetService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StreetService.java @@ -3,8 +3,10 @@ package com.zhehekeji.web.service; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.zhehekeji.core.util.Assert; +import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.mapper.OrderLastMediaMapper; +import com.zhehekeji.web.mapper.StockMapper; import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.pojo.street.StreetSearch; import com.zhehekeji.web.pojo.street.StreetType; @@ -25,71 +27,67 @@ public class StreetService { @Resource private StreetMapper streetMapper; -// @Resource + // @Resource // private StreetShelveMapper streetShelveMapper; @Resource private NettyClient nettyClient; @Resource - private OrderLastMediaMapper lastMediaMapper; + private StockMapper stockMapper; @Transactional(rollbackFor = Exception.class) - public Integer add(Street street){ + public Integer add(Street street) { List shelves = check(street); street.setCreateTime(LocalDateTime.now()); street.setUpdateTime(LocalDateTime.now()); try { streetMapper.insert(street); - }catch (DuplicateKeyException e){ - Assert.isTrue(false,"PLC ID已存在"); + } catch (DuplicateKeyException e) { + Assert.isTrue(false, "PLC ID已存在"); } - StreetConn.init(street.getId(),street.getPlcId()); + StreetConn.init(street.getId(), street.getPlcId()); //连接 try { nettyClient.createClient(street); } catch (InterruptedException e) { log.error("新增巷道,连接异常"); } + return street.getId(); } - public Street getStreetByPlcId(String plcId){ + public Street getStreetByPlcId(String plcId) { Street street = streetMapper.getStreetByPlcId(plcId); - if(street == null){ - log.error("巷道不存在plcId:{}",plcId); + if (street == null) { + log.error("巷道不存在plcId:{}", plcId); } return street; } @Transactional(rollbackFor = Exception.class) - public void del(Integer id){ + public void del(Integer id) { streetMapper.deleteById(id); - -// List sheleves = shelvesByStreetId(id); -// if(!CollectionUtils.isEmpty(sheleves)){ -// lastMediaMapper.deleteBatchIds(sheleves); -// } StreetConn.del(id); } - private List check(Street street){ + public List check(Street street) { List shelves = new ArrayList<>(); - if(StreetType.SINGLE.getType().equals(street.getLeftType())){ + if (StreetType.SINGLE.getType().equals(street.getLeftType())) { street.setLeftInsideShelveId(null); street.setLeftOutsideShelveId(null); shelves.add(street.getLeftShelveId()); } - if(StreetType.SINGLE.getType().equals(street.getRightType())){ + if (StreetType.SINGLE.getType().equals(street.getRightType())) { street.setRightInsideShelveId(null); street.setRightOutsideShelveId(null); shelves.add(street.getRightShelveId()); } - if(StreetType.DOUBLE.getType().equals(street.getLeftType())){ + if (StreetType.DOUBLE.getType().equals(street.getLeftType())) { street.setLeftShelveId(null); shelves.add(street.getLeftInsideShelveId()); shelves.add(street.getLeftOutsideShelveId()); } - if(StreetType.DOUBLE.getType().equals(street.getRightType())){ + if (StreetType.DOUBLE.getType().equals(street.getRightType())) { street.setRightShelveId(null); shelves.add(street.getRightInsideShelveId()); shelves.add(street.getRightOutsideShelveId()); @@ -98,24 +96,47 @@ public class StreetService { } @Transactional(rollbackFor = Exception.class) - public void edit(Street street){ + public void edit(Street street) { check(street); try { streetMapper.updateById(street); - }catch (DuplicateKeyException e){ - Assert.isTrue(false,"PLC ID已存在"); + } catch (DuplicateKeyException e) { + Assert.isTrue(false, "PLC ID已存在"); } } - public Street streetById(Integer id){ + public Street streetById(Integer id) { return streetMapper.selectById(id); } - public PageInfo page(StreetSearch search){ - PageHelper.startPage(search.getPageNum(),search.getPageSize()); + public PageInfo page(StreetSearch search) { + PageHelper.startPage(search.getPageNum(), search.getPageSize()); List streetVOS = streetMapper.list(); return new PageInfo<>(streetVOS); } + public List shelvesByStreetId(Integer streetId) { + Street street = streetMapper.selectById(streetId); + if (street != null) { + return check(street); + } + return null; + } + + private void stockGenerate(String sheveId, Integer row, Integer column) { + List stocks = new ArrayList<>(row * column); + for (int i = 1; i <= row; i++) { + for (int j = 1; j <= column; i++) { + Stock stock = new Stock(); + stock.setStatus(0); + stock.setRow(i); + stock.setColumn(j); + stock.setShelveId(sheveId); + stocks.add(stock); + } + } + stockMapper.batchInsert(stocks); + } + }