Commit 04ec3da6 sunke

EasyExcel分页导出

感应料架占用库位加入缓存
MES兼容旧接口
1 个父辈 7362a1d0
正在显示 24 个修改的文件 包含 336 行增加188 行删除
......@@ -167,21 +167,21 @@
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.0</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.apache.poi</groupId>-->
<!-- <artifactId>poi</artifactId>-->
<!-- <version>3.17</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.poi</groupId>-->
<!-- <artifactId>poi-ooxml</artifactId>-->
<!-- <version>3.17</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>xerces</groupId>-->
<!-- <artifactId>xercesImpl</artifactId>-->
<!-- <version>2.12.0</version>-->
<!-- </dependency>-->
<!--mapStruct-->
<dependency>
<groupId>org.mapstruct</groupId>
......@@ -235,6 +235,12 @@
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
......
package com.neotel.smfcore.common.base;
import cn.hutool.core.date.DateUtil;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
......
package com.neotel.smfcore.common.base;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List;
public interface IExcelDownLoad {
List<List<String>> getHeader();
List<List<Object>> getPageData(Query query, Pageable pageable);
}
......@@ -19,6 +19,10 @@ import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.language.util.MessageUtils;
import org.apache.commons.collections4.CollectionUtils;
......@@ -26,6 +30,9 @@ import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
......@@ -210,8 +217,63 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
}
/**
* 导出excel
* 分页导出Excel
* @param query
* @param pageable
* @param response
* @param excelDownLoad
* @throws IOException
*/
public static void downloadExcel(Query query, Pageable pageable, HttpServletResponse response, IExcelDownLoad excelDownLoad) throws IOException {
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
//String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
String fileName = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
// 这里 需要指定写用哪个class去写
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).head(excelDownLoad.getHeader()).build()) {
// 这里注意 如果同一个sheet只要创建一次
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
PageRequest page = PageRequest.ofSize(10000);
if(pageable != null){
page.withSort(pageable.getSort());
}
while (true){
List<List<Object>> data = excelDownLoad.getPageData(query,page);
if(data == null || data.isEmpty()){
break;
}
excelWriter.write(data, writeSheet);
page = page.next();
}
}
}
/**
* 一次性导出excel
*/
public static void downloadExcel(List<List<String>> headers, List<List<Object>> datas, HttpServletResponse response) throws IOException {
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
//String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
String fileName = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream()).sheet("Sheet1").head(headers).doWrite(datas);
}
/**
* 使用分页导出Excel或者一次性导出Excel方法
*/
@Deprecated
public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
File file = new File(tempPath);
......
......@@ -453,17 +453,12 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@AnonymousAccess
public ResultBean shelfStatus(HttpServletRequest request){
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId());
List<String> posList = new ArrayList<>();
for (StoragePos pos : allPos) {
posList.add(pos.getPosName());
}
List<String> posList = dataCache.getUsedPosNameList(cid);
List<String> outTaskPosList = new ArrayList<>();
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
for (DataLog task : queueTasks) {
if(task.isCheckOutTask()){
//只发执行中的任务
if(task.isCheckOutTask()&&task.isExecuting()){
String rgb = task.getLightColor();
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
if(color == null){
......@@ -477,6 +472,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
Map<String,List<String>> dataMap = new HashMap<>();
dataMap.put("hasReelPosList",posList);
dataMap.put("outTaskList",outTaskPosList);
//log.info("客户端获取["+cid+"]库位占用情况返回");
return ResultBean.newOkResult(dataMap);
}
......@@ -488,12 +484,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@AnonymousAccess
public ResultBean checkAll(HttpServletRequest request){
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId());
List<String> posList = new ArrayList<>();
for (StoragePos pos : allPos) {
posList.add(pos.getPosName());
}
List<String> posList = dataCache.getUsedPosNameList(cid);
return ResultBean.newOkResult(posList);
}
@Override
......
......@@ -87,7 +87,10 @@ public class DataCache {
*/
private static Settings settings;
/**
* 库位占用Map, key为cid,value为已使用的库位列表
*/
private static Map<String,List<String>> usedPosNameMap = new ConcurrentHashMap<>();
@PostConstruct
public void initialize() {
......@@ -379,6 +382,44 @@ public class DataCache {
/**
* 出库时清除使用库位列表
*/
private void removeUsedPosNameList(String cid, String posName){
List<String> usedPosNameList = getUsedPosNameList(cid);
usedPosNameList.remove(posName);
usedPosNameMap.put(cid, usedPosNameList);
}
/**
* 入库时增加使用库位列表
*/
private void addUsedPosNameList(String cid, String posName){
List<String> usedPosNameList = getUsedPosNameList(cid);
usedPosNameList.add(posName);
usedPosNameMap.put(cid, usedPosNameList);
}
/**
* 获取设备所有占用的库位名称列表
*/
public List<String> getUsedPosNameList(String cid){
List<String> posNameList = usedPosNameMap.get(cid);
if(posNameList == null){
Storage storage = getStorage(cid);
posNameList = new ArrayList<>();
if(storage != null){
log.info("加载["+cid+"]所有已使用库位到缓存");
List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId());
for (StoragePos pos : allPos) {
posNameList.add(pos.getPosName());
}
usedPosNameMap.put(cid,posNameList);
}
}
return posNameList;
}
/**
* 锁定库存
* @param cid
* @param partNumber 物料编号
......@@ -636,11 +677,12 @@ public class DataCache {
//出库
amount = - barcode.getAmount();
storage.emptyOnePos(pos);
removeUsedPosNameList(cid, pos.getPosName());
}else{
//入库
amount = barcode.getAmount();
storage.useOnePos(pos);
addUsedPosNameList(cid, pos.getPosName());
//入库单处理
if(ObjectUtil.isNotEmpty(storage.getInListName())){
inListCache.UpdateInList(storage.getInListName(),pos,barcode);
......
......@@ -2,9 +2,12 @@ package com.neotel.smfcore.core.storage.rest;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
......@@ -44,6 +47,8 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
......@@ -298,25 +303,72 @@ public class StoragePosController {
}
@ApiOperation("导出查找出库列表")
@GetMapping(value = "/find/download")
@PreAuthorize("@el.check('checkOut')")
public void download(HttpServletResponse response, StoragePosFindCriteria criteria,HttpServletRequest request) throws IOException {
Query query=getPosFindCriteria(criteria);
List<StoragePos> storagePos = storagePosManager.findByQuery(query );
storagePosManager.download(storagePos, response,request.getLocale());
}
@ApiOperation("查找出库列表")
@GetMapping("/find")
@PreAuthorize("@el.check('checkOut')")
public PageData<StoragePosDto> storagePosFind(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
Query query=getPosFindCriteria(criteria);
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements());
}
@ApiOperation("导出查找出库列表")
@GetMapping(value = "/find/download")
@PreAuthorize("@el.check('checkOut')")
public void download(HttpServletResponse response, StoragePosFindCriteria criteria,Pageable pageable, HttpServletRequest request) throws IOException {
Query query=getPosFindCriteria(criteria);
FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
@Override
public List<List<String>> getHeader() {
List<List<String>> header = new ArrayList<>();
Locale locale = request.getLocale();
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.barcode",locale,"条码编号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.partNumber",locale,"物料编号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.proDate",locale,"生产日期")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.expireDate",locale,"过期时间")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.posName",locale,"库位号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.lockName",locale,"工单号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.amount",locale,"数量")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.putInTime",locale,"首次入库时间")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.putInDate",locale,"入库时间")));
return header;
}
@Override
public List<List<Object>> getPageData(Query query, Pageable pageable) {
List<List<Object>> dataList = new ArrayList<>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<Map<String, Object>> list = new ArrayList<>();
List<StoragePos> storagePos = storagePosManager.findByQuery(query,pageable);
for (StoragePos pos : storagePos) {
String proDate = pos.getBarcode().getProduceDate() == null ? "" : dateFormat.format(pos.getBarcode().getProduceDate());
String expireDate = pos.getBarcode().getExpireDate() == null ? "" : dateFormat.format(pos.getBarcode().getExpireDate());
String putInTime = (pos.getBarcode().getPutInTime() == -1) ? "" : dateFormat.format(new Date(pos.getBarcode().getPutInTime()));
if(ObjectUtil.isNotEmpty(putInTime)){
putInTime=dateFormat.format(pos.getBarcode().getPutInDate());
}
List<Object> data = new ArrayList<>();
data.add(pos.getBarcode().getBarcode());
data.add(pos.getBarcode().getPartNumber());
data.add(proDate);
data.add(expireDate);
data.add(pos.getPosName());
data.add(pos.getBarcode().getLockName());
data.add(pos.getBarcode().getAmount());
data.add(putInTime);
data.add(dateFormat.format(pos.getBarcode().getPutInDate()));
dataList.add(data);
}
return dataList;
}
});
}
@ApiOperation("出库操作")
@PutMapping("/checkout")
public ResultBean checkout(@Validated @RequestBody CheckOutDto checkOutDto) {
......
......@@ -8,6 +8,8 @@ import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
......@@ -31,6 +33,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
List<StoragePos> findByQuery(Query query, Pageable pageable);
void removePosByStorageId(String storageId);
void deletePoss(Set<String> ids);
......@@ -59,8 +63,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
public void updateBarcodeMsd(String pn,String msl,String thickness);
void download(List<StoragePos> storagePos, HttpServletResponse response, Locale locale) throws IOException;
List<StoragePos> findPosList(String storageId, List<String> posNames);
List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException;
......
......@@ -6,13 +6,9 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.PointUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.bean.PlateSizeBean;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
import com.neotel.smfcore.core.storage.enums.COMPATIBLE_TYPE;
......@@ -20,7 +16,6 @@ import com.neotel.smfcore.core.storage.service.dao.IStoragePosDao;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.security.service.po.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
......@@ -33,10 +28,6 @@ import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
......@@ -308,6 +299,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public List<StoragePos> findByQuery(Query query, Pageable pageable) {
return storagePosDao.findByQuery(query, pageable);
}
@Override
public List<StoragePos> findByQuery(Query query) {
return storagePosDao.findByQuery(query);
}
......@@ -503,43 +499,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
storagePosDao.updateMulti(query, Update.update("barcode.thickness",thickness));
}
@Override
public void download(List<StoragePos> storagePos, HttpServletResponse response,Locale locale) throws IOException {
String barcodeStr= MessageUtils.getText("smfcore.storagePos.barcode",locale,"条码编号");
String partNumberStr= MessageUtils.getText("smfcore.storagePos.partNumber",locale,"物料编号");
String proDateStr= MessageUtils.getText("smfcore.storagePos.proDate",locale,"生产日期");
String expireDateStr= MessageUtils.getText("smfcore.storagePos.expireDate",locale,"过期时间");
String posNameStr= MessageUtils.getText("smfcore.storagePos.posName",locale,"库位号");
String lockNameStr= MessageUtils.getText("smfcore.storagePos.lockName",locale,"工单号");
String amountStr= MessageUtils.getText("smfcore.storagePos.amount",locale,"数量");
String putInTimeStr= MessageUtils.getText("smfcore.storagePos.putInTime",locale,"首次入库时间");
String putInDateStr= MessageUtils.getText("smfcore.storagePos.putInDate",locale,"入库时间");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
List<Map<String, Object>> list = new ArrayList<>();
for (StoragePos pos : storagePos) {
Map<String, Object> map = new LinkedHashMap<>();
map.put(barcodeStr, pos.getBarcode().getBarcode());
map.put(partNumberStr, pos.getBarcode().getPartNumber());
String proDate = pos.getBarcode().getProduceDate() == null ? "" : dateFormat.format(pos.getBarcode().getProduceDate());
map.put(proDateStr, proDate);
map.put(expireDateStr, pos.getBarcode().getExpireDate());
map.put(posNameStr, pos.getPosName());
map.put(lockNameStr, pos.getBarcode().getLockName());
map.put(amountStr, pos.getBarcode().getAmount());
String putInTime = (pos.getBarcode().getPutInTime() == -1) ? "" : dateFormat.format(new Date(pos.getBarcode().getPutInTime()));
if(ObjectUtil.isNotEmpty(putInTime)){
putInTime=dateFormat.format(pos.getBarcode().getPutInDate());
}
map.put(putInTimeStr, putInTime);
map.put(putInDateStr, dateFormat.format(pos.getBarcode().getPutInDate()));
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
/**
* 查找同尺寸连续的库位,合并库位放置料盘,仅用于智能料架
* @param storage
......
......@@ -3,8 +3,10 @@ package com.neotel.smfcore.core.system.rest;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
......@@ -35,6 +37,11 @@ import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
......@@ -60,17 +67,8 @@ public class TaskController {
@Autowired
private IUserManager userManager;
// @ApiOperation("导出用户数据")
// @GetMapping(value = "/download")
// @PreAuthorize("@el.check('user:list')")
// public void download(HttpServletResponse response, UserQueryCriteria criteria) throws IOException {
// userService.download(userService.queryAll(criteria), response);
// }
@ApiOperation("查询出入库日志")
@GetMapping("/history")
@PreAuthorize("@el.check('taskLog')")
public PageData<TaskDto> query(TaskQueryCondition criteria, Pageable pageable) {
private Query getQuery(TaskQueryCondition criteria){
String un_End = "UN_END";
boolean unEnd = false;
boolean finished=false;
......@@ -88,12 +86,76 @@ public class TaskController {
}else if(finished){
query.addCriteria(Criteria.where("status").in(OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
}
// query.with(Sort.by(Sort.Direction.DESC,"updateDate","createDate"));
return query;
}
@ApiOperation("查询出入库日志")
@GetMapping("/history")
@PreAuthorize("@el.check('taskLog')")
public PageData<TaskDto> query(TaskQueryCondition criteria, Pageable pageable) {
Query query = getQuery(criteria);
PageData<DataLog> taskList = dataLogManager.findByPage(query, pageable);
PageData<TaskDto> result= taskMapper.toDto(taskList);
return result;
}
@ApiOperation("导出查找出入库日志")
@GetMapping(value = "/history/download")
@PreAuthorize("@el.check('taskLog')")
public void download(HttpServletResponse response, TaskQueryCondition criteria, Pageable pageable, HttpServletRequest request) throws IOException {
Query query = getQuery(criteria);
//dataLogManager.download(query, pageable, response,request.getLocale());
// FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
// @Override
// public List<List<String>> getHeader() {
// List<List<String>> header = new ArrayList<>();
// header.add(Lists.newArrayList("类型"));
// header.add(Lists.newArrayList("单号"));
// header.add(Lists.newArrayList("料仓名称"));
// header.add(Lists.newArrayList("条码编号"));
// header.add(Lists.newArrayList("料件编号"));
// header.add(Lists.newArrayList("批次"));
// header.add(Lists.newArrayList("数量"));
// header.add(Lists.newArrayList("用户"));
//
// header.add(Lists.newArrayList("供应商"));
// header.add(Lists.newArrayList("来源二"));
// header.add(Lists.newArrayList("状态"));
// header.add(Lists.newArrayList("更新时间"));
// return header;
// }
//
// @Override
// public List<List<Object>> getPageData(Query query, Pageable pageable) {
// List<List<Object>> dataList = new ArrayList<>();
// List<DataLog> dataLogList = dataLogManager.findByQuery(query, pageable);
// DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// for (DataLog dataLog : dataLogList) {
// List<Object> data = new ArrayList<>();
//
// data.add(dataLog.getDetailTypeStr());//"类型"
// data.add(dataLog.getSourceName());//"单号"
// data.add(dataLog.getPosName());//"料仓名称"
// data.add(dataLog.getBarcode());//"条码编号"
// data.add(dataLog.getPartNumber());//"料件编号"
// data.add(dataLog.getBatchInfo());//"批次"
// data.add(dataLog.getReelQty());//"数量"
// data.add(dataLog.getOperator());//"用户"
//
// data.add(dataLog.getProvider());//"供应商"
// data.add(dataLog.getSubSourceInfo());//"来源二"
// data.add(dataLog.getStatusStr());//"状态"
// String updateTimeStr = dateFormat.format(dataLog.getUpdateDate());
// data.add(updateTimeStr);//"更新时间"
// dataList.add(data);
// }
// return dataList;
// }
// });
}
@ApiOperation("获取某个分组队列中的任务")
@AnonymousGetMapping("/{groupId}")
public List<TaskDto> groupTask(@PathVariable String groupId){
......
......@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.system.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
import com.neotel.smfcore.core.report.bean.ChartItem;
import com.neotel.smfcore.core.system.service.po.DataLog;
import java.util.Date;
import java.util.List;
......@@ -10,4 +11,6 @@ public interface IDataLogDao extends IBaseDao {
List<ChartItem> putInChart(Date startDay, Date endDay, String partNumber);
List<ChartItem> checkOutChart(Date startDay, Date endDay, String partNumber);
List<DataLog> findHistory(String bid, int num);
}
......@@ -8,9 +8,11 @@ import com.neotel.smfcore.core.report.bean.ChartItem;
import com.neotel.smfcore.core.system.service.dao.IDataLogDao;
import com.neotel.smfcore.core.system.service.po.DataLog;
import org.apache.logging.log4j.util.Strings;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.Date;
......@@ -51,5 +53,17 @@ public class DataLogDaoImpl extends AbstractBaseDao implements IDataLogDao {
return results.getMappedResults();
}
@Override
public List<DataLog> findHistory(String barcode, int num) {
Criteria c = new Criteria();
if(barcode != null && !barcode.isEmpty()){
c.and("barcode").is(barcode);
}
Query q = Query.query(c);
q.limit(num);
q.with(Sort.by(Sort.Direction.DESC, "updateDate"));
return findByQuery(q);
}
}
package com.neotel.smfcore.core.haman.bean;
package com.neotel.smfcore.custom.haman.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
......
package com.neotel.smfcore.core.haman.enums;
package com.neotel.smfcore.custom.haman.enums;
public class BIN_STATUS {
/**
......
package com.neotel.smfcore.core.haman.listener;
package com.neotel.smfcore.custom.haman.listener;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.haman.services.dao.IHamanBinPosDao;
import com.neotel.smfcore.core.haman.services.po.HamanBinPos;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.custom.haman.services.dao.IHamanBinPosDao;
import com.neotel.smfcore.custom.haman.services.po.HamanBinPos;
import com.neotel.smfcore.core.order.listener.DefaultOrderFileListener;
import com.neotel.smfcore.core.order.listener.IOrderFileListener;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.system.bean.OrderSetting;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*;
/**
......
package com.neotel.smfcore.core.haman.rest;
package com.neotel.smfcore.custom.haman.rest;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.haman.bean.BINPosInfo;
import com.neotel.smfcore.core.haman.enums.BIN_STATUS;
import com.neotel.smfcore.core.haman.rest.dto.BINPosDto;
import com.neotel.smfcore.core.haman.rest.mapstruct.BINPosMapper;
import com.neotel.smfcore.core.haman.rest.query.HamanBinQueryCondition;
import com.neotel.smfcore.core.haman.services.dao.IHamanBinPosDao;
import com.neotel.smfcore.core.haman.services.po.HamanBinPos;
import com.neotel.smfcore.core.inList.rest.bean.dto.InListDto;
import com.neotel.smfcore.core.inList.rest.bean.query.InListQueryCondition;
import com.neotel.smfcore.core.inList.service.po.InList;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.custom.haman.enums.BIN_STATUS;
import com.neotel.smfcore.custom.haman.rest.dto.BINPosDto;
import com.neotel.smfcore.custom.haman.rest.mapstruct.BINPosMapper;
import com.neotel.smfcore.custom.haman.rest.query.HamanBinQueryCondition;
import com.neotel.smfcore.custom.haman.services.dao.IHamanBinPosDao;
import com.neotel.smfcore.custom.haman.services.po.HamanBinPos;
import com.neotel.smfcore.core.order.enums.ORDER_COLOR;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto;
import com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.security.TokenProvider;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.service.po.Group;
import com.neotel.smfcore.security.service.po.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
......@@ -41,14 +22,9 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.DecimalFormat;
import java.util.*;
......
package com.neotel.smfcore.core.haman.rest;
package com.neotel.smfcore.custom.haman.rest;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.haman.bean.BINPosInfo;
import com.neotel.smfcore.core.haman.rest.dto.BINPosDto;
import com.neotel.smfcore.core.haman.rest.mapstruct.BINPosMapper;
import com.neotel.smfcore.custom.haman.bean.BINPosInfo;
import com.neotel.smfcore.custom.haman.rest.mapstruct.BINPosMapper;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.security.TokenProvider;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
......@@ -21,16 +17,12 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.DecimalFormat;
import java.util.*;
......
package com.neotel.smfcore.core.haman.rest.dto;
package com.neotel.smfcore.custom.haman.rest.dto;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.haman.enums.BIN_STATUS;
import com.neotel.smfcore.custom.haman.enums.BIN_STATUS;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......
package com.neotel.smfcore.core.haman.rest.mapstruct;
package com.neotel.smfcore.custom.haman.rest.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.haman.bean.BINPosInfo;
import com.neotel.smfcore.core.haman.rest.dto.BINPosDto;
import com.neotel.smfcore.core.haman.services.po.HamanBinPos;
import com.neotel.smfcore.custom.haman.rest.dto.BINPosDto;
import com.neotel.smfcore.custom.haman.services.po.HamanBinPos;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
......
package com.neotel.smfcore.core.haman.rest.query;
package com.neotel.smfcore.custom.haman.rest.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import com.neotel.smfcore.core.device.enums.OP;
import lombok.Data;
import java.util.Date;
@Data
public class HamanBinQueryCondition {
@QueryCondition
......
package com.neotel.smfcore.core.haman.services.dao;
package com.neotel.smfcore.custom.haman.services.dao;
import com.neotel.smfcore.common.base.IBaseDao;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.core.haman.services.po.HamanBinPos;
import com.neotel.smfcore.core.inList.service.po.InList;
import com.neotel.smfcore.custom.haman.services.po.HamanBinPos;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
......
package com.neotel.smfcore.core.haman.services.dao.impl;
package com.neotel.smfcore.custom.haman.services.dao.impl;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.haman.enums.BIN_STATUS;
import com.neotel.smfcore.core.haman.services.dao.IHamanBinPosDao;
import com.neotel.smfcore.core.haman.services.po.HamanBinPos;
import com.neotel.smfcore.core.inList.service.po.InList;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.custom.haman.enums.BIN_STATUS;
import com.neotel.smfcore.custom.haman.services.dao.IHamanBinPosDao;
import com.neotel.smfcore.custom.haman.services.po.HamanBinPos;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
......
package com.neotel.smfcore.core.haman.services.po;
package com.neotel.smfcore.custom.haman.services.po;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
import com.neotel.smfcore.core.barcode.enums.SOLDER_STATUS;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.haman.enums.BIN_STATUS;
import com.neotel.smfcore.custom.haman.enums.BIN_STATUS;
import lombok.Data;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
@Document
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!