add 盘点管理

camera_merge
王一鸣 5 years ago
parent d7e588f02d
commit e745789c9c

@ -1,16 +1,18 @@
package com.zhehekeji.web.controller; package com.zhehekeji.web.controller;
import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.pojo.Result; 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 com.zhehekeji.web.service.CategoryService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.util.List;
@Api(value = "category",tags = "分类管理") @Api(value = "category",tags = "分类管理")
@RestController @RestController
@ -23,7 +25,41 @@ public class CategoryController {
@PostMapping("/import") @PostMapping("/import")
@ApiOperation(value = "分类导入") @ApiOperation(value = "分类导入")
public Result upload(MultipartFile file) throws IOException { 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<PageInfo<Category>> page(@RequestBody PageSearch pageSearch){
return Result.success(categoryService.list(pageSearch));
}
@ApiOperation("列表")
@GetMapping("/list")
public Result<List<Category>> 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(); return Result.success();
} }
} }

@ -1,16 +1,24 @@
package com.zhehekeji.web.controller; package com.zhehekeji.web.controller;
import com.alibaba.excel.EasyExcel;
import com.zhehekeji.core.pojo.Result; 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 com.zhehekeji.web.service.StockService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; 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 = "库存管理") @Api(value = "Stock",tags = "库存管理")
@RestController @RestController
@ -19,10 +27,30 @@ public class StockController {
@Resource @Resource
private StockService stockService; private StockService stockService;
@PostMapping("/import") @PostMapping("/import")
@ApiOperation(value = "库存导入") @ApiOperation(value = "库存导入")
public Result upload(MultipartFile file){ public Result upload(MultipartFile file){
stockService.importExcel(file); stockService.importExcel(file);
return Result.success(); return Result.success();
} }
@GetMapping("/list")
@ApiOperation(value = "盘点页面 返回map key:货架号 value:库存信息")
public Result<Map<String, List<Stock>>> 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<StockExportExcel> excels = stockService.exportExcels(streetId);
EasyExcel.write(os, StockExportExcel.class).sheet().doWrite(excels);
}
} }

@ -55,6 +55,12 @@ public class StreetController {
return Result.success(); return Result.success();
} }
@GetMapping("/{id}")
@ApiOperation(value = "巷道详情")
public Result<Street> detail(@PathVariable Integer id){
return Result.success(streetService.streetById(id));
}
/*@GetMapping("/userCenter") /*@GetMapping("/userCenter")

@ -5,8 +5,11 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; import java.util.Map;
@Data @Data
@ -18,14 +21,6 @@ public class Category {
private String name; private String name;
private Integer level;
private Integer parentId;
private LocalDateTime updateTime; private LocalDateTime updateTime;
/**
* key : name
*/
private Map<String, Category> children;
} }

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -15,21 +16,35 @@ public class Stock {
@TableId(type = IdType.AUTO) @TableId(type = IdType.AUTO)
private Long id; private Long id;
private String orderNum;
@ApiModelProperty("品规名称")
private String category; private String category;
@ApiModelProperty("货架号")
private String shelveId; private String shelveId;
@TableField(value = "`count`") @TableField(value = "`count`")
@ApiModelProperty("数量")
private Integer count; private Integer count;
@TableField(value = "`row`") @TableField(value = "`row`")
@ApiModelProperty("行号")
private Integer row; private Integer row;
@TableField(value = "`column`") @TableField(value = "`column`")
@ApiModelProperty("列号")
private Integer column; private Integer column;
@ApiModelProperty("0:未盘点 1盘点异常 2核对正确")
private Integer status; private Integer status;
@ApiModelProperty("操作前的图片")
private String preoperationPic;
@ApiModelProperty("操作后的图片")
private String overoperationPic;
private LocalDateTime exportTime; private LocalDateTime exportTime;

@ -3,6 +3,7 @@ package com.zhehekeji.web.lib;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.zhehekeji.web.mapper.OrderLastMediaMapper; import com.zhehekeji.web.mapper.OrderLastMediaMapper;
import com.zhehekeji.web.mapper.OrderMapper; import com.zhehekeji.web.mapper.OrderMapper;
import com.zhehekeji.web.mapper.StockMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -30,7 +31,7 @@ public class CaptureReceiveCB implements NetSDKLib.fSnapRev{
private static String fileType = "jpg"; private static String fileType = "jpg";
@Resource @Resource
private OrderLastMediaMapper lastMediaMapper; private StockMapper stockMapper;
/** /**
* 线 * 线
@ -40,7 +41,7 @@ public class CaptureReceiveCB implements NetSDKLib.fSnapRev{
@Override @Override
public void invoke(NetSDKLib.LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { 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); threadPoolExecutor.execute(captureRunnable);
} }

@ -3,9 +3,9 @@ package com.zhehekeji.web.lib;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.common.util.PathUtil;
import com.zhehekeji.web.entity.Order; import com.zhehekeji.web.entity.Order;
import com.zhehekeji.web.entity.OrderLastMedia; import com.zhehekeji.web.entity.Stock;
import com.zhehekeji.web.mapper.OrderLastMediaMapper;
import com.zhehekeji.web.mapper.OrderMapper; import com.zhehekeji.web.mapper.OrderMapper;
import com.zhehekeji.web.mapper.StockMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -30,17 +30,17 @@ public class CaptureRunnable implements Runnable {
private OrderMapper orderMapper; private OrderMapper orderMapper;
private OrderLastMediaMapper lastMediaMapper; private StockMapper stockMapper;
public CaptureRunnable(int cmdSerial, String fileType, Integer revLen, String mediaPath, 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.CmdSerial = cmdSerial;
this.fileType = fileType; this.fileType = fileType;
this.RevLen = revLen; this.RevLen = revLen;
this.mediaPath = mediaPath; this.mediaPath = mediaPath;
this.pBuf = pBuf; this.pBuf = pBuf;
this.orderMapper = orderMapper; this.orderMapper = orderMapper;
this.lastMediaMapper = lastMediaMapper; this.stockMapper = stockMapper;
} }
@Override @Override
@ -53,39 +53,41 @@ public class CaptureRunnable implements Runnable {
if (picPath == null) { if (picPath == null) {
return; return;
} }
log.info("save pic orderNum:{} path:{}", orderInfo.getOrderNum(), path);
String shelveId = orderInfo.getShelveId(); String shelveId = orderInfo.getShelveId();
Integer row = orderInfo.getRow(); Integer row = orderInfo.getRow();
Integer column = orderInfo.getColumn(); Integer column = orderInfo.getColumn();
//同步 防止有照片丢失 //同步 防止有照片丢失
synchronized (orderInfo.getOrderNum().intern()){ synchronized (orderInfo.getOrderNum().intern()) {
Order order = orderMapper.getOneByOrderNum(orderInfo.getOrderNum()); Order order = orderMapper.getOneByOrderNum(orderInfo.getOrderNum());
log.info(" update order get pics:{},orderNum:{}",order.getPicPaths(),orderInfo.getOrderNum()); if (order != null) {
if(order != null){ Stock stock = stockMapper.getByShelveIdAndRowColumn(orderInfo.getShelveId(), orderInfo.getRow(), orderInfo.getColumn());
OrderLastMedia orderLastMedia = lastMediaMapper.getOne(shelveId,row,column); if (stock == null) {
if (orderLastMedia == null) { stock = new Stock();
orderLastMedia = initLastOrder(shelveId,row,column,orderInfo.getOrderNum()); 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(); String pics = order.getPicPaths();
if(StringUtils.isEmpty(pics)){ if (StringUtils.isEmpty(pics)) {
order.setPicPaths(path); order.setPicPaths(path);
}else { } else {
order.setPicPaths(pics+","+path); order.setPicPaths(pics + "," + path);
} }
Order update = new Order(); Order update = new Order();
update.setId(order.getId()); update.setId(order.getId());
update.setPicPaths(order.getPicPaths()); 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); 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"); 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) { private String savePic(Pointer pBuf, int RevLen, String path) {
BufferedImage bufferedImage = null; BufferedImage bufferedImage = null;
if (pBuf != null && RevLen > 0) { if (pBuf != null && RevLen > 0) {
@ -125,8 +116,6 @@ public class CaptureRunnable implements Runnable {
bufferedImage.flush(); bufferedImage.flush();
} }
} }
} }
return null; return null;
} }

@ -21,6 +21,12 @@ public class OrderInfo {
private String code; private String code;
/**
* true
* false
*/
private Boolean isPre;
/** /**
* 1: 2 3 * 1: 2 3
*/ */

@ -6,6 +6,6 @@ import org.apache.ibatis.annotations.Select;
public interface CategoryMapper extends BaseMapper<Category> { public interface CategoryMapper extends BaseMapper<Category> {
@Select(" select * from category where name = #{name} and level = #{level} and parent_id = #{parentId} limit 1") @Select(" select * from category where name = #{name} limit 1")
Category getByNameAndLevelAndParent(String name,Integer level,Integer parentId); Category getByName(String name);
} }

@ -7,5 +7,5 @@ import java.util.Map;
@Data @Data
public class CategoryExcel { public class CategoryExcel {
private Map<String,Object> map; private String category;
} }

@ -0,0 +1,11 @@
package com.zhehekeji.web.pojo.category;
import lombok.Data;
@Data
public class PageSearch {
private Integer pageSize;
private Integer pageNum;
}

@ -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<LocalDateTime> {
@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;
}
}

@ -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;
}

@ -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;
}

@ -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<Integer> {
@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;
}
}

@ -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<Integer, String>> {
Map<Integer,String> headMap = new HashMap<>();
List<Map<String,String>> list = new ArrayList<>();
@Override
public void invokeHeadMap(Map<Integer,String > headMap, AnalysisContext context){
System.out.println(headMap.toString());
this.headMap=headMap;
}
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
log.info("解析到一条数据:{}, currentRowIndex: {}----", data.toString(), context.readRowHolder().getRowIndex());
Map<Integer, Map<Integer, String>> 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) {
}
}

@ -2,9 +2,15 @@ package com.zhehekeji.web.service;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject; 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.entity.Category;
import com.zhehekeji.web.mapper.CategoryMapper; import com.zhehekeji.web.mapper.CategoryMapper;
import com.zhehekeji.web.pojo.category.CategoryExcel; 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 com.zhehekeji.web.pojo.stock.StockExcel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFCell; 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.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 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.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
@Slf4j @Slf4j
@ -33,54 +45,88 @@ public class CategoryService {
@Resource @Resource
private CategoryMapper categoryMapper; private CategoryMapper categoryMapper;
// public void importExcel(MultipartFile file) throws IOException { public PageInfo<Category> list(PageSearch pageSearch){
// EasyExcel.read(file.getInputStream(), HashMap.class, new CategoryImport()).sheet().doRead(); PageHelper.startPage(pageSearch.getPageNum(),pageSearch.getPageSize());
// } List<Category> all = categoryMapper.selectByMap(new HashMap<>(0));
return new PageInfo<>(all);
}
public List<Category> list(String name){
List<Category> list = categoryMapper.selectList(new QueryWrapper<Category>().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()); XSSFWorkbook wb = new XSSFWorkbook(file.getInputStream());
XSSFSheet sheet = wb.getSheetAt(0); XSSFSheet sheet = wb.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows(); 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); Row firstRow = sheet.getRow(0);
int columns = firstRow.getLastCellNum(); int columns = firstRow.getLastCellNum();
List<Category> categories = new ArrayList<>();
for (int i = 1; i < rows; i++) { for (int i = 1; i < rows; i++) {
XSSFRow row = sheet.getRow(i); XSSFRow row = sheet.getRow(i);
String parentName = ""; StringBuffer category = new StringBuffer();
for(int j = 0;j<columns;j++){ for(int j = 0;j<columns;j++){
XSSFCell cell = row.getCell(j); XSSFCell cell = row.getCell(j);
Category category = new Category(); if(cell != null){
category.setLevel(j+1); String name = cell.getStringCellValue();
String name = cell.getStringCellValue(); if(!StringUtils.isEmpty(name)) {
parentName = name; category.append(name).append("-");
category.setName(name); }
categories.add(category); }
} }
if(category.length() > 0){
category.deleteCharAt(category.length()-1);
}
insert(category.toString());
} }
} }
public void insert(Category category,String parentName){ public Integer insert(String name){
// 父类id Category category = categoryMapper.getByName(name);
Integer parentLevel = 0; if(category == null){
Integer parentId = 0; category = new Category();
if(category.getLevel() == 1){ category.setName(name);
//本身就是最顶级 category.setUpdateTime(LocalDateTime.now());
parentLevel = 1; try {
parentId = 0; categoryMapper.insert(category);
}else if (category.getLevel() > 1) { }catch (DuplicateKeyException e){
parentLevel = category.getLevel() - 1; log.warn("品规已存在:{}",name);
Category parent = categoryMapper.getByNameAndLevelAndParent(parentName,parentLevel,0);
if(parent != null){
parentId = parent.getId();
}else {
log.error("category 不存在name:{},level:{}",parentName,parentLevel);
} }
}else {
return;
} }
Category newCate = categoryMapper.getByNameAndLevelAndParent(category.getName(),category.getLevel(),parentId); return category.getId();
} }
} }

@ -1,7 +1,5 @@
package com.zhehekeji.web.service; 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.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.common.util.PathUtil;
@ -31,8 +29,6 @@ public class OrderService {
@Resource @Resource
private OrderMapper orderMapper; private OrderMapper orderMapper;
// @Resource
// private StreetShelveMapper streetShelveMapper;
@Resource @Resource
private StreetMapper streetMapper; private StreetMapper streetMapper;
@ -43,13 +39,6 @@ public class OrderService {
private String mp4Path; private String mp4Path;
public PageInfo<OrderVO> orders(OrderSearch orderSearch) { public PageInfo<OrderVO> orders(OrderSearch orderSearch) {
// QueryWrapper<Order> queryWrapper = new QueryWrapper<Order>();
// 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<Street> streets = streetMapper.selectByMap(new HashMap<>(0)); List<Street> streets = streetMapper.selectByMap(new HashMap<>(0));
Map<Integer, Street> streetMap = new HashMap<>(); Map<Integer, Street> streetMap = new HashMap<>();
streets.forEach(street -> { streets.forEach(street -> {
@ -139,36 +128,37 @@ public class OrderService {
* @param warn true * @param warn true
*/ */
public void orderStop(String orderNum, Street street, Boolean warn) { 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 (street.getCamera1Id() != null) {
if (order == null) { String path = PathUtil.createFileName("mp4");
log.error("订单结束信号订单不存在orderNum:{}", orderNum); PtzControlModule.downloadMp4(street.getCamera1Id(), mp4Path + path, orderNum, order.getStartTime(), order.getEndTime().plusSeconds(5));
return; update.setVideoPath1(path);
} }
if (order.getStartTime() == null) { if (street.getCamera2Id() != null) {
log.error("订单结束信号订单未开始orderNum:{}", orderNum); String path = PathUtil.createFileName("mp4");
return; PtzControlModule.downloadMp4(street.getCamera2Id(), mp4Path + path, orderNum, order.getStartTime(), order.getEndTime().plusSeconds(5));
} update.setVideoPath2(path);
if (warn) { }
order.setStatus(1); orderMapper.updateById(update);
} 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);
} }
orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num", orderNum));
} }

@ -106,6 +106,10 @@ public class PlcService {
Integer leftRight = 0; Integer leftRight = 0;
Integer row = 0; Integer row = 0;
Integer column = 0; Integer column = 0;
Boolean isPre = true;
if(times % 2 ==0){
isPre = false;
}
if(times == 2 || times == 1){ if(times == 2 || times == 1){
leftRight = plcOrderInfo.getLeftRight1(); leftRight = plcOrderInfo.getLeftRight1();
row = plcOrderInfo.getRow1(); row = plcOrderInfo.getRow1();
@ -139,7 +143,7 @@ public class PlcService {
log.error("异常的任务号找不到对应的货架或行列号。orderInfo:{},plcId:{},time:{}",plcOrderInfo.toString(),plcId,times); log.error("异常的任务号找不到对应的货架或行列号。orderInfo:{},plcId:{},time:{}",plcOrderInfo.toString(),plcId,times);
return; 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.getCamera1Id(),orderInfo);
CameraCaptureMap.put(street.getCamera2Id(),orderInfo); CameraCaptureMap.put(street.getCamera2Id(),orderInfo);
move(street.getCamera1Id(), street.getCamera2Id(), code); move(street.getCamera1Id(), street.getCamera2Id(), code);

@ -1,17 +1,22 @@
package com.zhehekeji.web.service; package com.zhehekeji.web.service;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.entity.Stock;
import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.mapper.StockMapper; import com.zhehekeji.web.mapper.StockMapper;
import com.zhehekeji.web.pojo.stock.StockExcel; 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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.*;
import java.util.UUID; import java.util.stream.Collectors;
@Service @Service
@Slf4j @Slf4j
@ -19,6 +24,8 @@ public class StockService {
@Resource @Resource
private StockMapper stockMapper; private StockMapper stockMapper;
@Resource
private StreetService streetService;
public void importExcel(MultipartFile file){ public void importExcel(MultipartFile file){
Thread thread = new Thread( Thread thread = new Thread(
@ -36,4 +43,58 @@ public class StockService {
thread.start(); thread.start();
} }
public Map<String,List<Stock>> stocksByStreetId(Integer streetId){
List<Stock> stocks = list(streetId);
Map<String,List<Stock>> shelveMap = stocks.stream().collect(Collectors.groupingBy(Stock::getShelveId));
return shelveMap;
}
public List<Stock> list(Integer streetId){
Street street = streetService.streetById(streetId);
if(street == null){
return new ArrayList<>();
}
Map<String,Integer[]> 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<String> shelves = map.keySet();
List<Stock> stocks = stockMapper.selectList(new QueryWrapper<Stock>().in("shelve_id",shelves).orderByAsc("shelve_id","`row`","`column`"));
return stocks;
}
public List<StockExportExcel> exportExcels(Integer streetId){
List<Stock> stocks = list(streetId);
Street street = streetService.streetById(streetId);
List<StockExportExcel> 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;
}
} }

@ -3,8 +3,10 @@ package com.zhehekeji.web.service;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.util.Assert; import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.entity.Stock;
import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.mapper.OrderLastMediaMapper; import com.zhehekeji.web.mapper.OrderLastMediaMapper;
import com.zhehekeji.web.mapper.StockMapper;
import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.pojo.street.StreetSearch; import com.zhehekeji.web.pojo.street.StreetSearch;
import com.zhehekeji.web.pojo.street.StreetType; import com.zhehekeji.web.pojo.street.StreetType;
@ -25,71 +27,67 @@ public class StreetService {
@Resource @Resource
private StreetMapper streetMapper; private StreetMapper streetMapper;
// @Resource // @Resource
// private StreetShelveMapper streetShelveMapper; // private StreetShelveMapper streetShelveMapper;
@Resource @Resource
private NettyClient nettyClient; private NettyClient nettyClient;
@Resource @Resource
private OrderLastMediaMapper lastMediaMapper; private StockMapper stockMapper;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Integer add(Street street){ public Integer add(Street street) {
List<String> shelves = check(street); List<String> shelves = check(street);
street.setCreateTime(LocalDateTime.now()); street.setCreateTime(LocalDateTime.now());
street.setUpdateTime(LocalDateTime.now()); street.setUpdateTime(LocalDateTime.now());
try { try {
streetMapper.insert(street); streetMapper.insert(street);
}catch (DuplicateKeyException e){ } catch (DuplicateKeyException e) {
Assert.isTrue(false,"PLC ID已存在"); Assert.isTrue(false, "PLC ID已存在");
} }
StreetConn.init(street.getId(),street.getPlcId()); StreetConn.init(street.getId(), street.getPlcId());
//连接 //连接
try { try {
nettyClient.createClient(street); nettyClient.createClient(street);
} catch (InterruptedException e) { } catch (InterruptedException e) {
log.error("新增巷道,连接异常"); log.error("新增巷道,连接异常");
} }
return street.getId(); return street.getId();
} }
public Street getStreetByPlcId(String plcId){ public Street getStreetByPlcId(String plcId) {
Street street = streetMapper.getStreetByPlcId(plcId); Street street = streetMapper.getStreetByPlcId(plcId);
if(street == null){ if (street == null) {
log.error("巷道不存在plcId:{}",plcId); log.error("巷道不存在plcId:{}", plcId);
} }
return street; return street;
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void del(Integer id){ public void del(Integer id) {
streetMapper.deleteById(id); streetMapper.deleteById(id);
// List<String> sheleves = shelvesByStreetId(id);
// if(!CollectionUtils.isEmpty(sheleves)){
// lastMediaMapper.deleteBatchIds(sheleves);
// }
StreetConn.del(id); StreetConn.del(id);
} }
private List<String> check(Street street){ public List<String> check(Street street) {
List<String> shelves = new ArrayList<>(); List<String> shelves = new ArrayList<>();
if(StreetType.SINGLE.getType().equals(street.getLeftType())){ if (StreetType.SINGLE.getType().equals(street.getLeftType())) {
street.setLeftInsideShelveId(null); street.setLeftInsideShelveId(null);
street.setLeftOutsideShelveId(null); street.setLeftOutsideShelveId(null);
shelves.add(street.getLeftShelveId()); shelves.add(street.getLeftShelveId());
} }
if(StreetType.SINGLE.getType().equals(street.getRightType())){ if (StreetType.SINGLE.getType().equals(street.getRightType())) {
street.setRightInsideShelveId(null); street.setRightInsideShelveId(null);
street.setRightOutsideShelveId(null); street.setRightOutsideShelveId(null);
shelves.add(street.getRightShelveId()); shelves.add(street.getRightShelveId());
} }
if(StreetType.DOUBLE.getType().equals(street.getLeftType())){ if (StreetType.DOUBLE.getType().equals(street.getLeftType())) {
street.setLeftShelveId(null); street.setLeftShelveId(null);
shelves.add(street.getLeftInsideShelveId()); shelves.add(street.getLeftInsideShelveId());
shelves.add(street.getLeftOutsideShelveId()); shelves.add(street.getLeftOutsideShelveId());
} }
if(StreetType.DOUBLE.getType().equals(street.getRightType())){ if (StreetType.DOUBLE.getType().equals(street.getRightType())) {
street.setRightShelveId(null); street.setRightShelveId(null);
shelves.add(street.getRightInsideShelveId()); shelves.add(street.getRightInsideShelveId());
shelves.add(street.getRightOutsideShelveId()); shelves.add(street.getRightOutsideShelveId());
@ -98,24 +96,47 @@ public class StreetService {
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void edit(Street street){ public void edit(Street street) {
check(street); check(street);
try { try {
streetMapper.updateById(street); streetMapper.updateById(street);
}catch (DuplicateKeyException e){ } catch (DuplicateKeyException e) {
Assert.isTrue(false,"PLC ID已存在"); Assert.isTrue(false, "PLC ID已存在");
} }
} }
public Street streetById(Integer id){ public Street streetById(Integer id) {
return streetMapper.selectById(id); return streetMapper.selectById(id);
} }
public PageInfo<StreetVO> page(StreetSearch search){ public PageInfo<StreetVO> page(StreetSearch search) {
PageHelper.startPage(search.getPageNum(),search.getPageSize()); PageHelper.startPage(search.getPageNum(), search.getPageSize());
List<StreetVO> streetVOS = streetMapper.list(); List<StreetVO> streetVOS = streetMapper.list();
return new PageInfo<>(streetVOS); return new PageInfo<>(streetVOS);
} }
public List<String> 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<Stock> 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);
}
} }

Loading…
Cancel
Save