Commit 89fad21a LN

上传功能bug修改

1 个父辈 fd909f20
package com.neotel.smfcore.common.utils; package com.neotel.smfcore.common.utils;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
...@@ -57,6 +58,9 @@ public class DateUtil { ...@@ -57,6 +58,9 @@ public class DateUtil {
} }
public static String toDateString(Date aDate, String aMask) { public static String toDateString(Date aDate, String aMask) {
if(ObjectUtil.isEmpty(aMask)){
aMask="yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat df = null; SimpleDateFormat df = null;
String returnValue = ""; String returnValue = "";
...@@ -76,6 +80,9 @@ public class DateUtil { ...@@ -76,6 +80,9 @@ public class DateUtil {
public static Date toDate(String strDate,String aMask) public static Date toDate(String strDate,String aMask)
throws ParseException { throws ParseException {
if(ObjectUtil.isEmpty(aMask)){
aMask="yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat df; SimpleDateFormat df;
Date date; Date date;
df = new SimpleDateFormat(aMask); df = new SimpleDateFormat(aMask);
......
...@@ -182,36 +182,42 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -182,36 +182,42 @@ public class NLPShelfHandler extends BaseDeviceHandler{
handleMsg(statusBean); handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean); statusBean = saveAlarmAndHumidity(statusBean);
OrderSetting orderSetting = dataCache.getOrderSetting(); // OrderSetting orderSetting = dataCache.getOrderSetting();
boolean openZhiYin = orderSetting.getShelfLightType().equals(1); // boolean openZhiYin = orderSetting.getShelfLightType().equals(1);
Map<String, List<DataLog>> outMap = new HashMap<>(); // Map<String, List<DataLog>> outMap = new HashMap<>();
//亮灯 //亮灯
Collection<DataLog> queueTasks = taskService.getQueueTasks(statusBean.getCid()); Collection<DataLog> queueTasks = taskService.getQueueTasks(statusBean.getCid());
for (DataLog queueTask : queueTasks) { for (DataLog queueTask : queueTasks) {
if(queueTask.isWait()){ if(queueTask.isWait()) {
queueTask.setStatus(OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(queueTask); ORDER_COLOR color = null;
String rgb = queueTask.getLightColor(); if (queueTask.isPutInTask()) {
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb); //入库默认深绿色 DARKGREEN
if(color == null){ color = ORDER_COLOR.DARKGREEN;
if(queueTask.isPutInTask()){ } else {
color = ORDER_COLOR.DARKGREEN; if (ObjectUtil.isNotEmpty(queueTask.getSourceId())) {
}else{ if (queueTask.isInOperate()) {
if (openZhiYin && ObjectUtil.isNotEmpty(queueTask.getSourceId())) { //首盘料 颜色:CYAN
List<DataLog> dataLogList = outMap.get(queueTask.getSourceId()); //截料料 颜色:PURPLE
if (dataLogList == null) { //普通工单 颜色:SKYBLUE
dataLogList = new ArrayList<>(); String rgb = queueTask.getLightColor();
} color = ORDER_COLOR.fromRgb(rgb);
dataLogList.add(queueTask);
outMap.put(queueTask.getSourceId(), dataLogList);
} else { } else {
color = ORDER_COLOR.BLUE; continue;
} }
} else {
//普通出库蓝色 BLUE
color = ORDER_COLOR.BLUE;
} }
} }
statusBean.addData("open",queueTask.getPosName()+"="+color.name()); if (color != null) {
log.info("库位["+queueTask.getPosName()+"]+亮灯:" + color.name());
queueTask.setStatus(OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(queueTask);
statusBean.addData("open", queueTask.getPosName() + "=" + color.name());
log.info("库位[" + queueTask.getPosName() + "]+亮灯:" + color.name());
}
} }
// else if(queueTask.isCancel()){ // else if(queueTask.isCancel()){
// if(queueTask.isCheckOutTask()){ // if(queueTask.isCheckOutTask()){
...@@ -224,11 +230,6 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -224,11 +230,6 @@ public class NLPShelfHandler extends BaseDeviceHandler{
// } // }
} }
List<DataLog> dataLogs = getLightGuideTask(outMap);
for (DataLog task :
dataLogs) {
statusBean.addData("open", task.getPosName() + "=" + ORDER_COLOR.fromRgb(task.getLightColor()).name());
}
return statusBean; return statusBean;
} }
......
...@@ -394,48 +394,6 @@ public class LiteOrderCache implements ITaskListener { ...@@ -394,48 +394,6 @@ public class LiteOrderCache implements ITaskListener {
@Autowired @Autowired
private SafetyInventoryMapper safetyInventoryMapper; private SafetyInventoryMapper safetyInventoryMapper;
// /**
// * 获取需要截料的物料
// * @return key=需要截料的物料编号
// */
// private Map<String,SafetyInventoryDto> getSafetyInventoryMap( ) {
// List<Component> componentList = componentManager.findByQuery(new Query());
// Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(null, "");
//
//
// Map<String, SafetyInventoryDto> resultsMap = new HashMap<>();
// //循环PN
// for (Component com :
// componentList) {
// InventoryItem item = inventoryItemMap.get(com.getPartNumber());
// SafetyInventoryDto dto = new SafetyInventoryDto();
// if (item == null) {
// } else {
// dto = safetyInventoryMapper.toDto(item);
// }
// dto.setPartNumber(com.getPartNumber());
// dto.setAmount(com.getAmount());
// dto.setSupplementReel(0);
// //截料: 库存物料的盘数≤设定值 ,设定值使用安全库存
// if (dto.getStockCount() < com.getSafetyStoreNum()) {
//
// if (dto.getStockReel() > 0 && dto.getStockCount() > 0) {
//
// int reelCount = dto.getStockCount() / dto.getStockReel();
// //补充盘数
// int needReel = (com.getMinStoreNum() - dto.getStockCount()) / reelCount;
// dto.setSupplementReel(needReel);
// } else {
// int needReel = com.getMinStoreNum() / dto.getAmount();
// dto.setSupplementReel(needReel);
// }
// }
//
// resultsMap.put(com.getPartNumber(), dto);
// }
// return resultsMap;
// }
/** /**
* 锁定物料 * 锁定物料
*/ */
...@@ -524,7 +482,6 @@ public class LiteOrderCache implements ITaskListener { ...@@ -524,7 +482,6 @@ public class LiteOrderCache implements ITaskListener {
boolean isGuizhong = orderItem.getOverFlag()==1; boolean isGuizhong = orderItem.getOverFlag()==1;
//判断是否需要截料 //判断是否需要截料
boolean needJieliao =false; boolean needJieliao =false;
// boolean needJieliao = jieliaoMap.containsKey(pn);
if (needNum <= 0) { if (needNum <= 0) {
continue; continue;
...@@ -544,7 +501,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -544,7 +501,7 @@ public class LiteOrderCache implements ITaskListener {
Component component = componentManager.findOneByPN(pn); Component component = componentManager.findOneByPN(pn);
if(component==null){ if(component==null){
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 未找到元器件信息, 缺料 "); log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 未找到元器件信息, 缺料 ");
return "smfcore.order.out.short"; return materialShortPro(userName,cacheOrder);
} }
//判断库存 //判断库存
if(storageNum<component.getSafetyStoreNum()){ if(storageNum<component.getSafetyStoreNum()){
...@@ -554,7 +511,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -554,7 +511,7 @@ public class LiteOrderCache implements ITaskListener {
if(storageNum<orderItem.getQty()){ if(storageNum<orderItem.getQty()){
//不满足实际需求,不发,报缺料 //不满足实际需求,不发,报缺料
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 库存总数量[" + storageNum + "], 不满足实际需求,缺料 "); log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 库存总数量[" + storageNum + "], 不满足实际需求,缺料 ");
return "smfcore.order.out.short"; return materialShortPro(userName,cacheOrder);
} }
int wholeReelCount = 0; int wholeReelCount = 0;
...@@ -672,7 +629,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -672,7 +629,7 @@ public class LiteOrderCache implements ITaskListener {
if (outNum < orderItem.getQty()) { if (outNum < orderItem.getQty()) {
//不满足实际需求,不发,报缺料 //不满足实际需求,不发,报缺料
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 库存可发数量[" + outNum + "], 不满足实际需求,缺料 "); log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 库存可发数量[" + outNum + "], 不满足实际需求,缺料 ");
return "smfcore.order.out.short"; return materialShortPro(userName,cacheOrder);
} }
} }
//可以出库 //可以出库
...@@ -756,6 +713,21 @@ public class LiteOrderCache implements ITaskListener { ...@@ -756,6 +713,21 @@ public class LiteOrderCache implements ITaskListener {
return ""; return "";
} }
public String materialShortPro(String userName, LiteOrder liteOrder){
//挑料时缺料,直接 关闭工单
log.info("工单["+liteOrder.getOrderNo()+"]缺料,直接关闭工单");
liteOrder.setOperateUser(userName);
liteOrder.setStatus(LITEORDER_STATUS.CLOSED);
liteOrder.setClosed(true);
liteOrderManager.save(liteOrder);
liteOrderMap.put(liteOrder.getOrderNo(), liteOrder);
return "smfcore.order.out.short";
}
// /** // /**
// * 锁定物料 // * 锁定物料
// */ // */
......
...@@ -23,6 +23,7 @@ import com.neotel.smfcore.core.system.rest.bean.dto.TaskDto; ...@@ -23,6 +23,7 @@ import com.neotel.smfcore.core.system.rest.bean.dto.TaskDto;
import com.neotel.smfcore.core.system.rest.bean.mapstruct.TaskMapper; import com.neotel.smfcore.core.system.rest.bean.mapstruct.TaskMapper;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.hikvision.bean.HikOutInfo;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties; import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.service.manager.IGroupManager; import com.neotel.smfcore.security.service.manager.IGroupManager;
...@@ -174,38 +175,50 @@ public class OrderController { ...@@ -174,38 +175,50 @@ public class OrderController {
} }
File folder = new File(properties.getPath(), "pos"); File folder = new File(properties.getPath(), "pos");
File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath()); File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath());
Map<String, List<LiteOrderItem>> itemMap = orderFileWatch.readCsvFile(fileName, localFile.getAbsolutePath()); // Map<String, List<LiteOrderItem>> itemMap = orderFileWatch.readCsvFile(fileName, localFile.getAbsolutePath());
List<HikOutInfo> itemList = orderFileWatch.readCsvFile(fileName, localFile.getAbsolutePath());
if (itemMap == null || itemMap.size() <= 0) { if (itemList == null || itemList.size() <= 0) {
throw new ValidateException("smfcore.fileError", "文件解析失败"); throw new ValidateException("smfcore.fileError", "文件解析失败");
} }
for (String so : itemMap.keySet() for (HikOutInfo outInfo :
) { itemList) {
List<LiteOrderItem> liteOrderItems = itemMap.get(so); //查找工单是否存在
if (liteOrderItems.size() <= 0) { String orderNo = outInfo.getJobNo();
continue; if (ObjectUtil.isNotEmpty(outInfo.getReplenishmentNo())) {
orderNo += "-" + outInfo.getReplenishmentNo();
} }
LiteOrder liteOrder = new LiteOrder(so, liteOrderItems); LiteOrder order = liteOrderCache.findOrderByNo(orderNo);
liteOrder.setSource(localFile.getName()); if (order == null) {
LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo()); //创建工单
if (dbOrder != null) { order = new LiteOrder();
order.setOrderNo(orderNo);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); order.UpdateOutInfo(outInfo);
//把名字改为带时间的
String newOrderNo = liteOrder.getOrderNo() + "-" + format.format(new Date()); LiteOrderItem item = outInfo.crateOrderItem(orderNo);
dbOrder = liteOrderManager.findByOrderNo(newOrderNo);
if (dbOrder == null) { order.addOrderItems(item);
liteOrder.setOrderNo(newOrderNo);
} else { liteOrderManager.createWithItems(order);
log.info("数据库中已存在工单号为[" + liteOrder.getOrderNo() + "],忽略文件:" + localFile.getAbsolutePath()); liteOrderCache.addOrderToMap(order);
return ResultBean.newErrorResult(-1, "smfcore.order.ameExists", "工单名称[{0}]已存在", new String[]{liteOrder.getOrderNo()}); log.info("新建工单[" + order.getOrderNo() + "]工单详情"+order.getOrderItems().size()+"条" );
} else {
if (order.getStatus() > LITEORDER_STATUS.NEW) {
log.info("工单[" + orderNo + "]已存在,且状态为[" + order.getStatus() + "],不能修改工单信息:" + outInfo.toString());
continue;
} }
order.UpdateOutInfo(outInfo);
LiteOrderItem item = outInfo.crateOrderItem(orderNo);
order = liteOrderCache.updateOrderItem(order, item);
liteOrderCache.addOrderToMap(order);
log.info("更新工单[" + order.getOrderNo() + "]物料号["+item.getMaterialNo()+"]" );
} }
log.info("新增加订单:" + liteOrder.getOrderNo() + ",共" + liteOrderItems.size() + "条工单详情");
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
} }
return ResultBean.newOkResult("smfcore.order.uploadOK", "工单上传成功", ""); return ResultBean.newOkResult("smfcore.order.uploadOK", "工单上传成功", "");
...@@ -381,7 +394,6 @@ public class OrderController { ...@@ -381,7 +394,6 @@ public class OrderController {
return ResultBean.newOkResult("smfcore.order.nextOk", "成功切换到下一个工单", ""); return ResultBean.newOkResult("smfcore.order.nextOk", "成功切换到下一个工单", "");
} }
private List<LiteOrder> getExecuteOrders(User user) { private List<LiteOrder> getExecuteOrders(User user) {
//查询正在执行的工单列表 //查询正在执行的工单列表
Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED).ne(LITEORDER_STATUS.NEW)); Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED).ne(LITEORDER_STATUS.NEW));
......
...@@ -10,6 +10,7 @@ import org.springframework.data.annotation.Transient; ...@@ -10,6 +10,7 @@ import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -261,6 +262,7 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -261,6 +262,7 @@ public class LiteOrder extends BasePo implements Serializable {
this.setUpdateDate(new Date()); this.setUpdateDate(new Date());
this.setEndDate(outInfo.getEndD()); this.setEndDate(outInfo.getEndD());
this.setWemng(outInfo.getWemng()); this.setWemng(outInfo.getWemng());
orderItems=new ArrayList<>();
} }
public void addOrderItems(LiteOrderItem item){ public void addOrderItems(LiteOrderItem item){
......
...@@ -180,36 +180,92 @@ public class SettingsController { ...@@ -180,36 +180,92 @@ public class SettingsController {
List<String> titles = new ArrayList<>(); List<String> titles = new ArrayList<>();
OrderSetting orderSetting = dataCache.getOrderSetting(); OrderSetting orderSetting = dataCache.getOrderSetting();
titles.add(orderSetting.getPn() ); // int jobNoIndex = csvRead.getIndex("jobNo", "jobNo");
titles.add(orderSetting.getFeeder()); // int stationIndex = csvRead.getIndex("station", "station");
titles.add((orderSetting.getQty())); // int baseCodeIndex = csvRead.getIndex("baseCode", "baseCode");
titles.add(orderSetting.getRi()); // int lgortIndex = csvRead.getIndex("lgort", "lgort");
titles.add(orderSetting.getSo()); // int workLineIndex = csvRead.getIndex("workLine", "workLine");
for(int i=1;i<=10;i++) { // int startDateIndex = csvRead.getIndex("startDate", "startDate");
// int endDateIndex = csvRead.getIndex("endDate", "endDate");
// int materialNoIndex = csvRead.getIndex("materialNo", "materialNo");
// int qtyIndex = csvRead.getIndex("qty", "qty");
// int overFlagIndex = csvRead.getIndex("overFlag", "overFlag");
// int incrementIndex = csvRead.getIndex("increment", "increment");
// int wemngIndex = csvRead.getIndex("wemng", "wemng");
String[] titleArray = new String[]{"jobNo", "station", "baseCode", "lgort", "workLine", "startDate", "endDate"
, "materialNo", "qty", "overFlag", "increment", "wemng"};
for (String title :
titleArray) {
titles.add(title);
}
String currTime = DateUtil.toDateString(new Date(), "yyyyMMdd-HHmm");
for (int i = 1; i <= 5; i++) {
Map<String, Object> map = new LinkedHashMap<>(); Map<String, Object> map = new LinkedHashMap<>();
if(i<=4){
map.put(orderSetting.getPn(),"PN"+i); map.put("jobNo", "jobNo" + currTime);
map.put(orderSetting.getFeeder(),"Feeder1"+i); map.put("station", "station".toUpperCase() + "-" + i);
map.put(orderSetting.getQty(),"100"+i); map.put("baseCode", "baseCode".toUpperCase() + "-" + i);
map.put(orderSetting.getRi(),""); map.put("lgort", "lgort".toUpperCase() + "-" + i);
map.put(orderSetting.getSo(),"WO1001" ); map.put("workLine", "workLine" + currTime);
} map.put("startDate", DateUtil.toDateString(new Date(), "yyyy-MM-dd HH:mm:ss"));
else{
map.put(orderSetting.getPn(),"PN2"+i); Calendar cal = Calendar.getInstance();
map.put(orderSetting.getFeeder(),"Feeder2"+i); cal.setTime(new Date());
map.put(orderSetting.getQty(),"200"+i); cal.add(Calendar.DAY_OF_MONTH, 7);
map.put(orderSetting.getRi(),""); Date date = cal.getTime();
map.put(orderSetting.getSo(),"WO1002" ); map.put("endDate", DateUtil.toDateString(date, "yyyy-MM-dd HH:mm:ss"));
} map.put("materialNo", "materialNo".toUpperCase() + "-" + i);
map.put("qty", i * 1000);
map.put("overFlag", "1");
map.put("increment", i * 100);
map.put("wemng", i * 10);
maps.add(map); maps.add(map);
} }
FileUtil.downloadCSV(maps, titles, response); FileUtil.downloadCSV(maps, titles, response);
} catch (Exception e) { } catch (Exception e) {
log.error("导出失败" + e.getMessage(), e); log.error("导出失败" + e.getMessage(), e);
} }
} }
// public void downloadOrderModel( HttpServletResponse response) throws IOException {
// try {
// List<Map<String, Object>> maps = new ArrayList<>();
// List<String> titles = new ArrayList<>();
// OrderSetting orderSetting = dataCache.getOrderSetting();
//
// titles.add(orderSetting.getPn() );
// titles.add(orderSetting.getFeeder());
// titles.add((orderSetting.getQty()));
// titles.add(orderSetting.getRi());
// titles.add(orderSetting.getSo());
// for(int i=1;i<=10;i++) {
//
// Map<String, Object> map = new LinkedHashMap<>();
// if(i<=4){
// map.put(orderSetting.getPn(),"PN"+i);
// map.put(orderSetting.getFeeder(),"Feeder1"+i);
// map.put(orderSetting.getQty(),"100"+i);
// map.put(orderSetting.getRi(),"");
// map.put(orderSetting.getSo(),"WO1001" );
// }
// else{
// map.put(orderSetting.getPn(),"PN2"+i);
// map.put(orderSetting.getFeeder(),"Feeder2"+i);
// map.put(orderSetting.getQty(),"200"+i);
// map.put(orderSetting.getRi(),"");
// map.put(orderSetting.getSo(),"WO1002" );
// }
// maps.add(map);
// }
//
// FileUtil.downloadCSV(maps, titles, response);
// } catch (Exception e) {
// log.error("导出失败" + e.getMessage(), e);
// }
// }
@ApiOperation("获取版本号") @ApiOperation("获取版本号")
@GetMapping("/version") @GetMapping("/version")
......
...@@ -110,11 +110,6 @@ public class HikvisionApiController { ...@@ -110,11 +110,6 @@ public class HikvisionApiController {
LiteOrderItem item = outInfo.crateOrderItem(orderNo); LiteOrderItem item = outInfo.crateOrderItem(orderNo);
order = liteOrderCache.updateOrderItem(order, item); order = liteOrderCache.updateOrderItem(order, item);
// item = liteOrderItemManager.save(item);
// List<LiteOrderItem> items = order.getOrderItems();
// items.add(item);
// order.setOrderItems(items);
// liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order); liteOrderCache.addOrderToMap(order);
} }
......
...@@ -21,7 +21,7 @@ public class HikOutInfo implements Serializable { ...@@ -21,7 +21,7 @@ public class HikOutInfo implements Serializable {
/** /**
*replenishmentNo String false 补料单号,如果有值表示此单为补料单[合并唯一] *replenishmentNo String false 补料单号,如果有值表示此单为补料单[合并唯一]
*/ */
protected String replenishmentNo; protected String replenishmentNo="";
/** /**
*baseCode String true 基地编号 *baseCode String true 基地编号
...@@ -79,7 +79,7 @@ public class HikOutInfo implements Serializable { ...@@ -79,7 +79,7 @@ public class HikOutInfo implements Serializable {
/** /**
*reason String false 移动原因 *reason String false 移动原因
*/ */
protected String reason; protected String reason="";
public LiteOrderItem crateOrderItem(String orderNo) { public LiteOrderItem crateOrderItem(String orderNo) {
LiteOrderItem item = new LiteOrderItem(); LiteOrderItem item = new LiteOrderItem();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!