Commit f13d7263 sunke

1 数据库连接池配置

2 优化挑料速度
1 个父辈 211a0cdc
......@@ -4,6 +4,7 @@ import com.mongodb.client.result.DeleteResult;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
......@@ -23,6 +24,7 @@ import java.util.regex.Pattern;
*/
public abstract class AbstractBaseDao implements IBaseDao {
@Autowired
@Qualifier("mongoTemplate")
private MongoTemplate mongoTemplate;
private final static int DEFAULT_PAGE_SIZE = 10;
protected final transient Logger log = LogManager.getLogger(getClass());
......
......@@ -45,7 +45,7 @@ public class DataInitManager {
MainTimer mainTimer;
//@Value("${menu.show}")
private String[] menuShowList = new String[]{"mslOut"};
private String[] menuShowList = new String[]{/*"commonIn","returnIn","cutIn"*/};
//@Value("${menu.hide}")
private String[] menuHideList = new String[]{};
......@@ -125,8 +125,6 @@ public class DataInitManager {
private Map<String,Menu> getAllMenuMap() {
List<Menu> menus = new ArrayList<Menu>();
Map<String,Menu> functionMenuMap = new HashMap<>();
//物料管理:工单出库,查找出库(UID出库,PN出库),物料标签,料盒操作,出库策略,工单设置
......@@ -135,22 +133,27 @@ public class DataInitManager {
Menu out = Menu.CreatePMenu("查找出库", 20, "searchOut", 2, "findOut",poutOut);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "checkOut", "UID出库", 1, "singleOuput", "neolight/singleOuput/index", "", 0, "export1",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "tacticsOuput", "PN出库", 1, "tacticsOuput", "neolight/tacticsOuput/index", "", 0, "tacticsOuput",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "mslOut", "湿敏管理", 1, "mslOut", "neolight/mslOut/index", "", 0, "tacticsOuput",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "mslOut", "湿敏管理", 1, "mslOut", "neolight/mslOut/index", "", 0, "tacticsOuput",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "posOutput", "库位出库", 1, "posOutput", "system/posOutput/index", "", 0, "swagger",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "posOutput", "库位出库", 1, "posOutput", "system/posOutput/index", "", 0, "swagger",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "labelOuput", "物料标签", 1, "labelOuput", "neolight/labelOuput/index", "", 0, "mgroup",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "materialBox", "料盒操作", 1, "materialBox", "neolight/materialBox/index", "", 0, "mIbox",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "outSetting", "出库策略", 1, "outSetting", "system/outSetting/index", "", 0, "outSet",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "inList", "入库单", 1, "inList", "system/inList/index", "", 0, "headIcon",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "labelOuput", "物料标签", 1, "labelOuput", "neolight/labelOuput/index", "", 0, "mgroup",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "materialBox", "料盒操作", 1, "materialBox", "neolight/materialBox/index", "", 0, "mIbox",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "outSetting", "出库策略", 1, "outSetting", "system/outSetting/index", "", 0, "outSet",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "inList", "入库单", 1, "inList", "system/inList/index", "", 0, "headIcon",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "dumpWarehousing", "转储入库", 1, "dumpWarehousing", "system/dumpWarehousing/index", "", 0, "dumpWarehousing",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "singleDiskWarehousing", "单盘入库", 1, "singleDiskWarehousing", "system/singleDiskWarehousing/index", "", 0, "singleDiskWarehousing",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "dumpWarehousing", "转储入库", 1, "dumpWarehousing", "system/dumpWarehousing/index", "", 0, "dumpWarehousing",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "singleDiskWarehousing", "单盘入库", 1, "singleDiskWarehousing", "system/singleDiskWarehousing/index", "", 0, "singleDiskWarehousing",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "sluggishMaterials", "呆滞物料", 1, "sluggishMaterials", "system/sluggishMaterials/index", "", 0, "sMaterial",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "safetyInventory", "安全库存", 1, "safetyInventory", "system/safetyInventory/index", "", 0, "safeInventory",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "outList", "转储出库", 1, "outList", "system/outList/index", "", 0, "outList",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "orderSet", "齐套", 1, "orderSet", "system/orderSet/index", "", 0, "outS",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "commonIn", "普通入库", 1, "commonIn", "system/singleStockIn/index", "", 0, "singleDiskWarehousing",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "returnIn", "退料入库", 1, "returnIn", "system/singleStockIn/index", "", 0, "singleDiskWarehousing",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "cutIn", "截料入库", 1, "cutIn", "system/singleStockIn/index", "", 0, "singleDiskWarehousing",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "sluggishMaterials", "呆滞物料", 1, "sluggishMaterials", "system/sluggishMaterials/index", "", 0, "sMaterial",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "safetyInventory", "安全库存", 1, "safetyInventory", "system/safetyInventory/index", "", 0, "safeInventory",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "outList", "转储出库", 1, "outList", "system/outList/index", "", 0, "outList",functionMenuMap);
addNewFunctionMenu(poutOut,new ArrayList<Menu>(), 1, "orderSet", "齐套", 1, "orderSet", "system/orderSet/index", "", 0, "outS",functionMenuMap);
Menu orderM = Menu.CreatePMenu("工单管理", 20, "orderManager", 2, "orderManager", null);
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "billworkOrder", "工单", 1, "billworkOrder", "neolight/billworkOrder/index", "", 0, "orderOut",functionMenuMap);
......@@ -245,24 +248,12 @@ public class DataInitManager {
if(dbMenus.isEmpty()){
log.info("创建默认菜单...");
menuListToShow = new String[]{
"lockMaterial", //设备看板
"singleOuput",
"tacticsOuput",
"outSetting",
"componentParts",
"barcode",
"barcodeSetting",
"taskLog",
//"orderSetting",//工单设置
"inOutData", //报表->出入库
"inventory", //报表->库存
"bunker", //设备管理
"storagePos", //库位管理
//"sysSetting", //系统设置
"peoples", //用户管理
"role" //角色管理
"searchOut","singleOuput","tacticsOuput","mslOut","inList","dumpWarehousing",
"commonIn","returnIn","cutIn","sluggishMaterials","safetyInventory","outList","orderSet","billworkOrder",
"reelOut", "orderSheet", "orderShortageOut", "orderShortageSheet", "productionLineReple","productionLineOut",
"componentParts","barcode","barcodeSetting","taskLog","message", "interfaceException",
"bunker","storagePos",
"peoples","role","about"
};
}
......
......@@ -80,6 +80,9 @@ public class DateUtil {
public static Date toDate(String strDate,String aMask)
throws ParseException {
if(ObjectUtil.isEmpty(strDate)){
return null;
}
if(ObjectUtil.isEmpty(aMask)){
aMask="yyyy-MM-dd HH:mm:ss";
}
......
......@@ -7,6 +7,7 @@ import org.springframework.data.mongodb.core.query.Query;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Set;
......@@ -19,6 +20,8 @@ public interface IComponentManager extends IBaseManager<Component> {
Component saveComponent(Component resources);
List<Component> findByPN(Collection<String> pnList);
void deleteComponents(Set<String> ids);
int saveComponentList(List<Component> componentList);
......
......@@ -98,6 +98,13 @@ public class ComponentManagerImpl implements IComponentManager {
}
@Override
public List<Component> findByPN(Collection<String> pnList) {
Query query = new Query(Criteria.where("partNumber").in(pnList));
List<Component> components = componentDao.findByQuery(query);
return components;
}
@Override
public void deleteComponents(Set<String> ids) {
Query query = new Query(Criteria.where("id").in(ids));
List<Component> components = componentDao.findByQuery(query);
......
......@@ -40,6 +40,8 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
@Api(tags = "SHELF: NLP感应料架")
@RestController
......@@ -129,6 +131,8 @@ public class NLPShelfHandler extends BaseDeviceHandler{
return statusBean;
}
private static Map<String,Boolean> processMap = new ConcurrentHashMap<>();
/**
* 客户端sensor变化
*/
......@@ -141,7 +145,17 @@ public class NLPShelfHandler extends BaseDeviceHandler{
if(storage == null){
return ResultBean.newErrorResult(-1,"smfcore.shelfNotExist", "{0}对应的料架不存在",new String[]{cid} );
}
synchronized(storage){
synchronized (storage){
Boolean process = processMap.get(cid);
if(process == null){
processMap.put(cid, true);
}else{
String msg = "料架["+cid+"]的上一次请求还未完成,忽略本次请求";
return ResultBean.newErrorResult(-1,"smfcore.shelfNotExist", msg);
}
}
try{
//实际信号有料,数据库无信息
String[] hasReelPosErrorList = request.getParameterValues("hasReelPosErrorList");
//实际信号无料,数据库有信息
......@@ -159,9 +173,9 @@ public class NLPShelfHandler extends BaseDeviceHandler{
if(noReelPosErrorList.length>0){
//log.info("开始检测noReelPosErrorList");
for (String noReelPosName : noReelPosErrorList) {
if(usedPosNameList.contains(noReelPosName)){
if(!usedPosNameList.contains(noReelPosName)){
ngToOk.add(noReelPosName);
log.info("sensorChange 客户端上传 noReelPosErrorList 库位["+noReelPosName+"]数据库无物料,放入ngToOk");
log.info(cid + "sensorChange 客户端上传 noReelPosErrorList 库位["+noReelPosName+"]数据库无物料,放入ngToOk");
}
}
}
......@@ -178,12 +192,12 @@ public class NLPShelfHandler extends BaseDeviceHandler{
String[] hasReelPosList = request.getParameterValues("hasReelPosList");
if(hasReelPosList != null){
log.info("开始检测hasReelPosList");
log.info(cid+"开始检测hasReelPosList");
Set<String> disabledPosNameSet = dataCache.getDisabledPosNameSet();
List<String> newList=new ArrayList<>();
for (String posName : hasReelPosList) {
if(disabledPosNameSet.contains(posName)){
log.info("sensorChange hasReelPosList [" + posName + "]库位被禁用,忽略");
log.info(cid + "sensorChange hasReelPosList [" + posName + "]库位被禁用,忽略");
continue;
}
newList.add(posName);
......@@ -193,20 +207,20 @@ public class NLPShelfHandler extends BaseDeviceHandler{
//入库的库位列表
if(hasReelPosList.length > 1){
String msg = "不可同时放入多盘物料:"+ String.join(",",hasReelPosList);
String msg = cid + "不可同时放入多盘物料:"+ String.join(",",hasReelPosList);
log.error(msg);
for (String posStr : hasReelPosList) {
inNgList.add(posStr);
}
}else if (hasReelPosList.length==1){
log.info("开始检测执行入库");
log.info(cid + "开始检测执行入库到库位:["+hasReelPosList[0]+"]");
StoragePos pos = storagePosManager.getByPosName(hasReelPosList[0]);
if(pos == null){
String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
}
else if(!pos.getStorageId().equals(storage.getId())){
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
String msg = "["+ cid +"]未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
}
//如果库位有料,直接结束
......@@ -214,7 +228,9 @@ public class NLPShelfHandler extends BaseDeviceHandler{
log.info("料架[" + cid + "]入库库位[" + pos.getPosName() + "]已有料: [" + pos.getBarcode().getBarcode() + "]");
}
else{
log.info(cid + "处理有料库位:["+pos.getPosName()+"]");
boolean posInResult = handlePosIn(storage,pos);
log.info(cid + "处理有料库位:["+pos.getPosName()+"]完成,结果:" + posInResult);
if(posInResult){
inOkList.add(pos.getPosName());
}else{
......@@ -227,9 +243,10 @@ public class NLPShelfHandler extends BaseDeviceHandler{
String[] noReelPosList = request.getParameterValues("noReelPosList");
if(noReelPosList != null){
//出库
log.info("出库检测noReelPosList");
for (String noReelPosName : noReelPosList) {
log.info(cid + "处理无料库位:["+noReelPosName+"]");
boolean handleNoReelPosResult = handleNoReelPos(storage,usedPosNameList,noReelPosName);
log.info(cid + "处理无料库位:["+noReelPosName+"]完成,结果:" + handleNoReelPosResult);
if(handleNoReelPosResult){
outOkList.add(noReelPosName);
}else{
......@@ -245,9 +262,13 @@ public class NLPShelfHandler extends BaseDeviceHandler{
dataMap.put("outNgList",outNgList);
dataMap.put("ngToOk",ngToOk);
return ResultBean.newOkResult(dataMap);
}catch (Exception e){
String msg = "料架["+cid+"]处理sensorChange异常";
log.error(msg,e);
return ResultBean.newErrorResult(-1,"smfcore.sensorChangeError", msg);
}finally {
processMap.remove(cid);
}
}
/**
......@@ -282,7 +303,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
queueTask.setStorageName(storage.getName());
try {
//入库完成,发送入库完成请求
log.info("入库完成,发送入库完成请求");
log.info(queueTask.getBarcode() + "入库完成,发送入库完成请求");
super.finishedPutIn(storage.getCid(), pos.getPosName());
String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功";
log.info(msg);
......@@ -315,7 +336,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
return inResult;
}
}
log.error("未找到["+pos.getPosName()+"]的入库任务");
log.warn("未找到["+pos.getPosName()+"]的入库任务");
return false;
}
......
......@@ -448,7 +448,22 @@ public class LiteOrderCache implements ITaskListener {
List<String> excludePosIds = Lists.newArrayList();
excludePosIds.addAll(taskService.excludePosIds());
List<String> outPosNameList = new ArrayList<>();
Set<String> pnList = new HashSet<>();
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
String pn = orderItem.getMaterialNo();
//需求数量
int needNum = orderItem.getQty() + orderItem.getIncrement() - orderItem.getTotalOutNum();
if (needNum <= 0) {
continue;
}
pnList.add(pn);
}
List<StoragePos> allAvailblePosList = storagePosManager.findOrderItemInStorage(availableStorageIds, pnList, excludePosIds);
Set<String> outPosNameList = new HashSet<>();
List<Component> componentList = componentManager.findByPN(pnList);
//获取此工单出库的所有物料
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
......@@ -460,7 +475,12 @@ public class LiteOrderCache implements ITaskListener {
}
//查找PN的所有库存,PN=pn,未锁定,qty 从大到小,批次正序, 入库时间正序
List<StoragePos> posList = storagePosManager.findOrderItemInStorage(availableStorageIds, pn, excludePosIds);
List<StoragePos> posList = new ArrayList<>();
for (StoragePos storagePos : allAvailblePosList) {
if(storagePos.getBarcode().getPartNumber().equals(pn)){
posList.add(storagePos);
}
}
int targetNum = needNum;
List<StoragePos> outPosList = new ArrayList<>();
......@@ -491,6 +511,7 @@ public class LiteOrderCache implements ITaskListener {
//排除掉这些库位,以免重复挑取同一盘料
for (StoragePos storagePos : outPosList) {
excludePosIds.add(storagePos.getId());
outPosNameList.add(storagePos.getPosName());
int reelAmount = storagePos.getBarcode().getAmount();
outNum = outNum + reelAmount;
}
......@@ -507,7 +528,13 @@ public class LiteOrderCache implements ITaskListener {
//判断是否需要截料
boolean needJieliao =false;
//判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料
Component component = componentManager.findOneByPN(pn);
Component component = null;
for (Component c : componentList) {
if(c.getPartNumber().equals(pn)){
component = c;
break;
}
}
if(component != null){
if(component.getMinStoreNum()>0&& posList.size() <=component.getMinStoreNum()){
needJieliao=true;
......@@ -735,7 +762,7 @@ public class LiteOrderCache implements ITaskListener {
* @param targetNum
* @return
*/
private List<StoragePos> pickBigOrderReels(String pn, List<String> outPosNameList, List<StoragePos> posList, int targetNum){
private List<StoragePos> pickBigOrderReels(String pn, Set<String> outPosNameList, List<StoragePos> posList, int targetNum){
List<String> excludePosNameList = new ArrayList<>(outPosNameList);
List<StoragePos> outPosList = new ArrayList<>();
......@@ -813,7 +840,7 @@ public class LiteOrderCache implements ITaskListener {
* @param targetNum
* @return
*/
private List<StoragePos> pickRepleReels(List<String> outPosNameList, List<StoragePos> posList, int targetNum){
private List<StoragePos> pickRepleReels(Set<String> outPosNameList, List<StoragePos> posList, int targetNum){
List<String> excludePosNameList = new ArrayList<>(outPosNameList);
List<StoragePos> itemPickPosList = new ArrayList<>();
boolean pickMaxQtyReel = false;
......
......@@ -155,12 +155,8 @@ public class OrderShortageController {
List<DataLog> taskList = new ArrayList<>();
if (liteOrders.size() > 0) {
LiteOrder liteOrder = liteOrders.get(0);
if (liteOrder.isNew() || liteOrder.isClosed()) {
throw new ValidateException("smfcore.order.notExecute", "工单[{0}]不在出库中", new String[]{liteOrder.getOrderNo()});
}
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog datalog :
allTasks) {
for (DataLog datalog : allTasks) {
if (datalog.isOrderTask() && datalog.getSourceId().equals(liteOrder.getId())) {
//判断是否是缺料出库
if (datalog.isAddOutbound()) {
......
......@@ -230,6 +230,21 @@ public class OutListCache implements ITaskListener {
Map<String, List<StoragePos>> needOutPosMap = new HashMap<>();//挑出的需要出库的料列表,key=itemId,value=库位
List<String> itemPosNameList = new ArrayList<>();
Set<String> pnList = new HashSet<>();
for (OutListItem outListItem : outList.getOutListItems()) {
String pn = outListItem.getMaterialNo();
//需求数量
int needNum = outListItem.getDumpQty();
if (needNum <= 0) {
continue;
}
pnList.add(pn);
}
List<StoragePos> allAvailblePosList = storagePosManager.findOrderItemInStorage(availableStorageIds, pnList, taskService.excludePosIds());
List<Component> componentList = componentManager.findByPN(pnList);
//获取此转储出库单出库的所有物料
for (OutListItem outListItem : outList.getOutListItems()) {
String pn = outListItem.getMaterialNo();
......@@ -239,7 +254,13 @@ public class OutListCache implements ITaskListener {
continue;
}
Component component = componentManager.findOneByPN(pn);
Component component = null;
for (Component c : componentList) {
if(c.getPartNumber().equals(pn)){
component = c;
break;
}
}
if (component == null) {
if(isShortageOut){
shortage=true;
......@@ -251,7 +272,12 @@ public class OutListCache implements ITaskListener {
}
//查找PN的所有库存,PN=pn,未锁定,qty 从大到小,入库时间正序
List<StoragePos> posList = storagePosManager.findOrderItemInStorage(availableStorageIds, pn, taskService.excludePosIds());
List<StoragePos> posList = new ArrayList<>();
for (StoragePos storagePos : allAvailblePosList) {
if(storagePos.getBarcode().getPartNumber().equals(pn)){
posList.add(storagePos);
}
}
log.info("共找到"+posList.size()+"盘"+pn+"的物料");
int storageNum = 0;
......
......@@ -69,5 +69,5 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException;
List<StoragePos> findOrderItemInStorage( List<String> storageIdList, String pn, Collection<String> excludePosIds );
List<StoragePos> findOrderItemInStorage( List<String> storageIdList, Set<String> pnList, Collection<String> excludePosIds );
}
......@@ -615,9 +615,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return new ArrayList<>();
}
@Override
public List<StoragePos> findOrderItemInStorage(List<String> storageIdList,String pn, Collection<String> excludePosIds ) {
Criteria c = Criteria.where("barcode.partNumber").is(pn)
public List<StoragePos> findOrderItemInStorage(List<String> storageIdList,Set<String> pnList, Collection<String> excludePosIds ) {
Criteria c = Criteria.where("barcode.partNumber").in(pnList)
.and("id").nin(excludePosIds)
.and("enabled").is(true)//可用
.and("barcode.lockId").is(null)//没有被锁定的仓位;
......@@ -632,9 +634,9 @@ public class StoragePosManagerImpl implements IStoragePosManager {
//sort.and(Sort.by(Sort.Direction.ASC, "canCheckOutTime"));
q.with(amountSort).with(batchSort);
List<StoragePos> posList = storagePosDao.findByQuery(q);
if (posList == null || posList.size() <= 0) {
log.info("findOrderItemInStorage 挑料 partNumber=" + pn + ",未找到可以出库的物料 ");
}
// if (posList == null || posList.size() <= 0) {
// log.info("findOrderItemInStorage 挑料未找到可以出库的物料 ");
// }
return posList;
}
......
package com.neotel.smfcore.hella.handler;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.api.CodeValidateParam;
import com.neotel.smfcore.core.device.api.IOpAuthApi;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.hella.tcp.HellaTcpClient;
import com.neotel.smfcore.hella.tcp.command.HellaReqCommand;
import com.neotel.smfcore.hella.tcp.command.HellaRespCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class HellaApiHandler implements IOpAuthApi {
@Autowired
private HellaServiceHandler hellaServiceHandler;
@Override
public Barcode resolveBarcode(CodeValidateParam param) throws ValidateException {
if (!isEnable()) {
return null;
}
hellaServiceHandler.checkMaterial(param);
Barcode barcode = new Barcode();
barcode.setFullCode(param.getCode());
return barcode;
}
@Override
public Barcode canPutIn(Barcode barcode) throws ValidateException {
if (!isEnable()) {
return null;
}
return barcode;
}
@Override
public boolean canCheckout(Barcode barcode) throws ValidateException {
if(!isEnable()){
return false;
}
return false;
}
@Override
public boolean isEnable() {
return HellaTcpClient.isEnable();
}
}
//package com.neotel.smfcore.hella.handler;
//
//import cn.hutool.core.util.ObjectUtil;
//import com.neotel.smfcore.common.bean.ResultBean;
//import com.neotel.smfcore.common.exception.ValidateException;
//import com.neotel.smfcore.core.barcode.service.po.Barcode;
//import com.neotel.smfcore.core.device.api.CodeValidateParam;
//import com.neotel.smfcore.core.device.api.IOpAuthApi;
//import com.neotel.smfcore.core.storage.service.po.Storage;
//import com.neotel.smfcore.hella.tcp.HellaTcpClient;
//import com.neotel.smfcore.hella.tcp.command.HellaReqCommand;
//import com.neotel.smfcore.hella.tcp.command.HellaRespCommand;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.ArrayList;
//import java.util.List;
//@Service
//public class HellaApiHandler implements IOpAuthApi {
//
// @Autowired
// private HellaServiceHandler hellaServiceHandler;
// @Override
// public Barcode resolveBarcode(CodeValidateParam param) throws ValidateException {
//
// if (!isEnable()) {
// return null;
// }
// hellaServiceHandler.checkMaterial(param);
// Barcode barcode = new Barcode();
// barcode.setFullCode(param.getCode());
// return barcode;
// }
//
// @Override
// public Barcode canPutIn(Barcode barcode) throws ValidateException {
// if (!isEnable()) {
// return null;
// }
// return barcode;
// }
//
// @Override
// public boolean canCheckout(Barcode barcode) throws ValidateException {
// if(!isEnable()){
// return false;
// }
// return false;
// }
//
// @Override
// public boolean isEnable() {
// return HellaTcpClient.isEnable();
// }
//}
......@@ -330,6 +330,7 @@ public class HikApi {
RequestParam info = new RequestParam(getReqCode(), userName, dataMap);
HikApiRequest request = new HikApiRequest(5, url,config.key_5_putInApi,config.secret_5_putInApi, info);
apiName = apiName +" ("+info.getReqCode()+") ";
log.info(apiName+" 发送 " + info.getData());
try {
......
......@@ -74,8 +74,7 @@ public class HikvisionApiController {
// msg string 提示消息
// data 返回数据
if (outInfos != null && outInfos.size() > 0) {
for (HikOrderInfo outInfo :
outInfos) {
for (HikOrderInfo outInfo : outInfos) {
//查找工单是否存在
String orderNo = outInfo.getJobNo();
......
package com.neotel.smfcore.security.config;
import lombok.Data;
@Data
public class CustomMongoProperties {
private String host;
private Integer port;
private String database;
private Integer maxConSize = 200;
private Integer minConSize = 100;
}
package com.neotel.smfcore.security.config;
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.connection.ClusterConnectionMode;
import com.mongodb.connection.ClusterType;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class MongoDbConfig {
@Bean(name = "mongoProperties")
@ConfigurationProperties(prefix = "spring.data.mongodb")
protected CustomMongoProperties mongoProperties() {
return new CustomMongoProperties();
}
@Primary
@Bean(name = "mongoTemplate")
public MongoTemplate mongoTemplate(@Qualifier("mongoProperties") CustomMongoProperties mongoProperties) {
return new MongoTemplate(mongoDbFactory(mongoProperties));
}
private static MongoDatabaseFactory mongoDbFactory(CustomMongoProperties mongoProperties) {
ClusterConnectionMode clusterConnectionMode;
ClusterType clusterType;
List<ServerAddress> serverAddressList = new ArrayList<>();
clusterConnectionMode = ClusterConnectionMode.SINGLE;
clusterType = ClusterType.STANDALONE;
ServerAddress serverAddress = new ServerAddress(mongoProperties.getHost(), mongoProperties.getPort());
serverAddressList.add(serverAddress);
MongoClientSettings setting = MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(serverAddressList)
.mode(clusterConnectionMode)
.requiredClusterType(clusterType)
).applyToConnectionPoolSettings(
builder ->
builder.maxSize(mongoProperties.getMaxConSize())
.minSize(mongoProperties.getMinConSize())
).build();
MongoClient mongoClient = MongoClients.create(setting);
return new SimpleMongoClientDatabaseFactory(mongoClient, mongoProperties.getDatabase());
}
}
\ No newline at end of file
......@@ -93,7 +93,8 @@ spring:
mongodb:
host: localhost # 主机地址
port: 27017 # 端口
database: hikvision20220801 # 数据库
database: hikvision # 数据库
messages:
encoding: utf-8
main:
......
......@@ -6,10 +6,10 @@
</Properties>
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level [%file:%line] - %msg%n"/>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%file:%line] - %msg%n"/>
</Console>
<RollingFile name="log" fileName="${LOG_HOME}/${LOG_NAME}" filePattern="${LOG_HOME}/%d{yyyy-MM-dd}.${LOG_NAME}" append="true">
<PatternLayout charset="GB18030" pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level [%file:%line] - %msg%n" />
<PatternLayout charset="GB18030" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%file:%line] - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1" />
</Policies>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!