Commit 04ec3da6 sunke

EasyExcel分页导出

感应料架占用库位加入缓存
MES兼容旧接口
1 个父辈 7362a1d0
正在显示 24 个修改的文件 包含 692 行增加196 行删除
......@@ -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);
......
......@@ -3,26 +3,43 @@ package com.neotel.smfcore.core.storage.rest;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.StorageConstants;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.bean.UsageItem;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
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.service.dao.IDataLogDao;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.util.Integers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
@Slf4j
@RestController
......@@ -33,10 +50,25 @@ public class MesApiController {
@Autowired
protected TaskService taskService;
@Autowired
protected IComponentManager componentManager;
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
IStoragePosManager storagePosManager;
private DataCache dataCache;
@Autowired
private IDataLogDao dataLogDao;
@Autowired
protected DataCache dataCache;
protected CodeResolve codeResolve;
//http://localhost/myproject/rest/api/v2/mes/inventory?LOC=1
@ApiOperation("查询有料仓位")
@RequestMapping(value = "/inventory")
......@@ -79,15 +111,109 @@ public class MesApiController {
}
return ReelBarCodes /*+ dataCache.getSettings().getNotifyApiUrl()*/;
}
@ApiOperation("指定出库")
/**
* 基础数据同步
*/
@RequestMapping(value = "/dataUpdate")
@ResponseBody
public String dataUpdate(HttpServletRequest request) {
try {
String Partnumber = checkParameter(request,"PN");
String w = checkParameter(request,"PACKAGE_WIDTH");
String h = checkParameter(request,"PACKAGE_HEIGHT");
log.info("收到 MES 的 数据同步信息"+Partnumber+"【"+w+"x"+h+"】");
Component c = componentManager.findOneByPN(Partnumber);
if(c == null){
c = new Component();
}
c.setPartNumber(Partnumber);
c.setPlateSize(Integer.valueOf(w));
c.setHeight(Integer.valueOf(h));
componentManager.save(c);
} catch (ValidateException e) {
return "Error:" + e.getMessage();
}
return "OK";
}
private String checkParameter(HttpServletRequest request, String paramName) throws ValidateException {
String value = request.getParameter(paramName);
if(Strings.isNullOrEmpty(value)){
log.info(paramName + " is required.");
throw new ValidateException("param.required",paramName + " is required.");
}
return value;
}
@RequestMapping(value = "/barcode")
@ResponseBody
public String barcode(HttpServletRequest request) {
try{
String codeStr = checkParameter(request,"codeStr");
String batch = checkParameter(request,"batch");
log.info("收到MES接口条码更新指令:codeStr="+codeStr + " batch="+batch);
String sizeCodeStr = "=1x1=" + codeStr;
CodeBean codeBean = codeResolve.resolveSingleCode(sizeCodeStr);
if(codeBean.isValid()){
Barcode barcode = codeBean.getBarcode();
barcode.setBatch(batch);
barcodeManager.save(barcode);
return "OK";
}else{
return "Error:" + codeBean.getError();
}
}catch (ValidateException ve) {
return "Error:" + ve.getMessage();
}catch (Exception e){
return "Error:" + e.getMessage();
}
}
@RequestMapping(value = "/codeUpdate")
@ResponseBody
public String codeUpdate(HttpServletRequest request) {
try {
String REEL_ID = checkParameter(request,"RI");
String PARTNUMBER = checkParameter(request,"PN");
String QTY = checkParameter(request,"QTY");
log.info("收到条码同步信息:RI="+REEL_ID + " PN=" + PARTNUMBER + " QTY="+QTY);
Component c = componentManager.findOneByPN(PARTNUMBER);
if(c == null){
return "Error: 物料编号[" + PARTNUMBER + "]的档案不存在";
}
Barcode barcode = barcodeManager.findByBarcode(REEL_ID);
if(barcode == null){
barcode = new Barcode();
}
barcode.setBarcode(REEL_ID);
barcode.setPartNumber(PARTNUMBER);
barcode.setInitialAmount(Integer.valueOf(QTY));
barcode.setAmount(Integer.valueOf(QTY));
barcode.setPlateSize(c.getPlateSize());
barcode.setHeight(c.getHeight());
barcodeManager.save(barcode);
}catch (ValidateException ve) {
return "Error:" + ve.getMessage();
}catch (Exception e){
return "Error:" + e.getMessage();
}
return "OK";
}
@RequestMapping(value = "/stackOut")
@ResponseBody
@AnonymousAccess
public String stackOut(HttpServletRequest request) {
try {
String[] REEL_IDS = request.getParameterValues("RIS");
log.info("stackOut: REEL_IDS="+REEL_IDS.toString());
if(REEL_IDS == null || REEL_IDS.length == 0){
return "Error: RI 为必须项";
}
......@@ -110,4 +236,226 @@ public class MesApiController {
}
return "OK";
}
@RequestMapping(value = "/unlock")
@ResponseBody
public String unlock(HttpServletRequest request) {
String orderName = request.getParameter("orderName");//锁定标签
log.info("收到unlock 请求:orderName=" + orderName);
List<StoragePos> lockPoses = storagePosManager.findLockPos(orderName);
for (StoragePos lockPos : lockPoses) {
try {
Barcode code = lockPos.getBarcode();
code.setLockId(null);
code.setLockName(null);
lockPos.setBarcode(code);
storagePosManager.save(lockPos);
Storage storage = dataCache.getStorageById(lockPos.getStorageId());
dataCache.unLockOneReel(storage.getCid(),code.getPartNumber());
} catch (ValidateException e) {
log.error("MES unlock error: "+ e.getDefaultMsg());
}
}
return "OK";
}
@RequestMapping(value = "/lock")
@ResponseBody
public String lock(HttpServletRequest request){
String orderName = request.getParameter("orderName");//锁定标签
String pn = request.getParameter("pn");//Partnumber
int num = Integers.parseInt(request.getParameter("num"),-1);//锁定数量
log.info("lock 请求:orderName="+orderName + ";pn=" + pn + ";num=" + num);
if(Strings.isNullOrEmpty(orderName) || Strings.isNullOrEmpty(pn) || num == -1){
return "Error:参数错误";
}
//验证库存
Collection<String> excludePosIds = Sets.newHashSet();
Collection<StoragePos> posToLock = Sets.newHashSet();
int lockNum = 0;
while (lockNum < num){
StoragePos pos = storagePosManager.findPartNumberInStorages(null, pn, excludePosIds, dataCache.getCheckOutType());
if(pos == null){
return "Error:库存不足";
}
Barcode barcode = pos.getBarcode();
if(barcode != null){
lockNum = lockNum + barcode.getAmount();
log.info("lockOrderName="+orderName+"查找到物料【 "+barcode.getBarcode()+" 】,PN=["+ barcode.getPartNumber()+"],数量="+barcode.getAmount()+"已找到数量:"+lockNum);
posToLock.add(pos);
}
excludePosIds.add(pos.getId());
}
for (StoragePos storagePos : posToLock) {
try {
Barcode code = storagePos.getBarcode();
code.setLockId(orderName);
code.setLockName("API");
storagePos.setBarcode(code);
storagePosManager.save(storagePos);
Storage storage = dataCache.getStorageById(storagePos.getStorageId());
dataCache.lockOneReel(storage.getCid(),pn);
} catch (ValidateException e) {
e.printStackTrace();
}
}
return "OK";
}
@RequestMapping(value = "/pnInventory")
@ResponseBody
public Map<String,Map<String,Integer>> getParnumberInventory(HttpServletRequest request){
log.info("收到 getParnumberInventory 请求");
Map<String,Map<String,Integer>> partnumberInventory = Maps.newHashMap();
List<StoragePos> poses = storagePosManager.findNotEmpty();
for (StoragePos pos : poses){
Barcode barcode = pos.getBarcode();
String parnumber = barcode.getPartNumber();
Map<String,Integer> itemInventory = partnumberInventory.get(parnumber);
int totalNum = 0;
int lockNum = 0;
if(itemInventory == null){
itemInventory = Maps.newHashMap();
}else{
totalNum = itemInventory.get("totalNum");
lockNum = itemInventory.get("lockNum");
}
totalNum = totalNum + barcode.getAmount();
if(!Strings.isNullOrEmpty(barcode.getLockId())){
lockNum = lockNum + barcode.getAmount();
}
itemInventory.put("totalNum", totalNum);
itemInventory.put("lockNum", lockNum);
partnumberInventory.put(parnumber,itemInventory);
}
return partnumberInventory;
}
@RequestMapping(value = "/history")
@ResponseBody
public List<Map<String,Object>> history(HttpServletRequest request) {
String bid = request.getParameter("bid");
// String start = request.getParameter("start");
// String end = request.getParameter("end");
// Date startDate = toDate(start);
// Date endDate = toDate(end);
String numStr = request.getParameter("num");
int num = 20;
if(!Strings.isNullOrEmpty(numStr)){
try{
num = Integer.valueOf(numStr);
}catch (Exception e){
}
}
List<Map<String,Object>> results = Lists.newArrayList();
List<DataLog> datas = dataLogDao.findHistory(bid,num);
datas.sort(new Comparator<DataLog>() {
@Override
public int compare(DataLog o1, DataLog o2) {
return o1.getCreateDate().compareTo(o2.getCreateDate());
}
});
for (DataLog dataItem : datas){
Map<String,Object> item = Maps.newHashMap();
item.put("barcode",dataItem.getBarcode());
item.put("partnumber",dataItem.getPartNumber());
item.put("qty",dataItem.getNum());
item.put("type", dataItem.getType());
item.put("opor", dataItem.getOperator());
item.put("boxName",dataItem.getStorageName());
item.put("posName",dataItem.getPosName());
item.put("source",dataItem.getSourceId());
item.put("status", dataItem.getStatus());
item.put("date", DateUtil.toDateTimeString(dataItem.getCreateDate()));
results.add(item);
}
return results;
}
@RequestMapping(value = "/status")
@ResponseBody
public List<Map<String,Object>> status(HttpServletRequest request) {
String cid = request.getParameter("cid");
// Locale localeZh = Language.ZH_CN.getLocale();
// Locale localeEn = Language.ENGLISH.getLocale();
Collection<Storage> storageList = Lists.newArrayList();
if(Strings.isNullOrEmpty(cid)){
storageList.addAll(dataCache.getAllStorage().values());
}else{
Storage storage = dataCache.getStorage(cid);
storageList.add(storage);
}
List<Map<String,Object>> results = Lists.newArrayList();
for (Storage storage : storageList){
StatusBean statusBean = DevicesStatusUtil.getStatusBean(storage.getCid());
Map<String, BoxStatusBean> boxStatusMap = statusBean.getBoxStatus();
int status = -1;
if(boxStatusMap != null){
BoxStatusBean boxStatusBean = boxStatusMap.get("1");
if(boxStatusBean != null){
status = boxStatusBean.getStatus();
}
}
int storageStatus = status;
if(status == StorageConstants.STATUS.OFFLINE || statusBean.timeOut()){
//离线
storageStatus = -1;
}
String msg = statusBean.getMsg();
String msgEn = statusBean.getMsgEn();
// Exception e = taskService.getServerException(storage.getCid());
// if(e != null){
// if(e instanceof ValidateException){
// msg = getText(e.getMessage(),((ValidateException) e).getParams(), localeZh ,e.getMessage());
// msgEn = getText(e.getMessage(),((ValidateException) e).getParams(), localeEn ,e.getMessage());
// }else{
// msg = e.getMessage();
// msgEn = e.getMessage();
// }
// }
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("cid", storage.getCid());
itemMap.put("name", storage.getName());
itemMap.put("status",storageStatus);
itemMap.put("msg",msg);
itemMap.put("msgEn",msgEn);
itemMap.put("doorReelSignal",statusBean.getDoorReelSingnal());
Map<String,Object> emptySlotMap = Maps.newHashMap();
Map<String,Object> totalSlotMap = Maps.newHashMap();
Map<String, UsageItem> usageMap = storage.getUsageMap();
for (UsageItem usageItem : usageMap.values()) {
String sizeStr = usageItem.getSizeStr();
int total = usageItem.getTotalCount();
int used = usageItem.getUsedCount();
totalSlotMap.put(sizeStr,total);
emptySlotMap.put(sizeStr,total - used);
}
itemMap.put("emptySlot",emptySlotMap);
itemMap.put("totalSlot",totalSlotMap);
results.add(itemMap);
}
return results;
}
private Date toDate(String dateStr){
try {
return DateUtil.toDate(dateStr,"yyyyMMddHHmmss");
} catch (Exception e) {
}
return null;
}
}
......@@ -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!