Commit eafaf694 LN

1.库位增加坐标。2.库位上传修改。3.csv读取修改。

1 个父辈 258d0897
......@@ -34,6 +34,25 @@ import java.util.HashMap;
*/
@Slf4j
public class CsvReader {
public static CsvReader newReader(String fileURL, String titleName,String titleNameEn) throws IOException {
String reloadEncodeing="GBK";
CsvReader csvRead = new CsvReader(fileURL);
csvRead.setSkipEmptyRecords(true);
csvRead.setTrimWhitespace(true);
csvRead.readHeaders();
int index = csvRead.getIndex(titleName, titleNameEn);
//未找到列,重新读取
if (index == -1) {
log.info("文件未包含列[" + titleName + "][" + titleNameEn + "],改为" + reloadEncodeing + "重新读取");
csvRead = new CsvReader(fileURL, CsvReader.Letters.COMMA, Charset.forName(reloadEncodeing));
csvRead.setSkipEmptyRecords(true);
csvRead.setTrimWhitespace(true);
csvRead.readHeaders();
}
return csvRead;
}
private Reader inputStream = null;
private String fileName = null;
......@@ -1226,6 +1245,7 @@ public class CsvReader {
dataBuffer.ColumnStart = 0;
}
/**
* Read the first record of data as column headers.
*
......@@ -1699,7 +1719,7 @@ public class CsvReader {
}
}
private class Letters {
public class Letters {
public static final char LF = '\n';
public static final char CR = '\r';
......
......@@ -19,6 +19,8 @@ import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
......@@ -76,6 +78,15 @@ public class DataInitManager {
log.info("初始化环境完成...");
}
List<Menu> menus=menuManager.findByQuery(new Query(Criteria.where("path").ne("")));
for (Menu me:menus
) {
if(me.getTitleKey()==null|| me.getTitleKey()==""){
me.setTitleKey(me.getPath());
menuManager.saveMenu(me);
}
}
initTask();
} catch (Exception exception) {
......@@ -133,26 +144,26 @@ public class DataInitManager {
private List<Menu> createSubPerMenus(Menu menu) {
List<Menu> list = new ArrayList<>();
//如果是list结尾的,默认增加其他的权限菜单
Map<String, String[]> defaultMenus = new HashMap<>();
defaultMenus.put("menu", new String[]{"menu:edit", "menu:del", "menu:add"});
defaultMenus.put("user",new String[]{});
defaultMenus.put("role",new String[]{});
String per = menu.getPermission().replace(":list", "");
String menuName = menu.getTitle().replace("管理", "");
if (!defaultMenus.containsKey(per)) {
return list;
}
String[] subPers = defaultMenus.get(per);
if (subPers.length <= 0) {
subPers = new String[]{per + ":edit", per + ":del", per + ":add"};
}
for (String subPer :
subPers) {
Menu subperMenu = menuManager.save(Menu.CreatePerMenu(subPer, menuName + "_" + subPer, menu.getId()));
list.add(subperMenu);
}
// //如果是list结尾的,默认增加其他的权限菜单
// Map<String, String[]> defaultMenus = new HashMap<>();
// defaultMenus.put("menu", new String[]{"menu:edit", "menu:del", "menu:add"});
// defaultMenus.put("user",new String[]{});
// defaultMenus.put("role",new String[]{});
//
// String per = menu.getPermission().replace(":list", "");
// String menuName = menu.getTitle().replace("管理", "");
// if (!defaultMenus.containsKey(per)) {
// return list;
// }
// String[] subPers = defaultMenus.get(per);
// if (subPers.length <= 0) {
// subPers = new String[]{per + ":edit", per + ":del", per + ":add"};
// }
// for (String subPer :
// subPers) {
// Menu subperMenu = menuManager.save(Menu.CreatePerMenu(subPer, menuName + "_" + subPer, menu.getId()));
// list.add(subperMenu);
// }
return list;
}
......
package com.neotel.smfcore.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.data.geo.Point;
@Slf4j
public class PointUtil {
public static Point getPosPoint(String posId ) {
return getPosPoint(posId,true );
}
/**
* 获取坐标
* @param posId 库位号
* @param isUpdatePos true=更新库位坐标。false=查询使用
* @return
*/
public static Point getPosPoint(String posId, boolean isUpdatePos) {
// 库位号格式:
// 例:05AA03040102
// 05:表示料仓编号,01-08
// AA:存储机构A面或B面,AA或者BB
// 03:表示抽屉在第几行
// 04:表示抽屉在第几列
// 01:表示在抽屉中的第几行
// 02:表示在抽屉中的第几列
Point p = new Point(0, 0);
try {
if (posId.length() == 12 &&((posId.contains("AA")||posId.contains("BB")))) {
double storageNum = 0;
int storage = Integer.parseInt(posId.substring(0, 2));
String typeStr = posId.substring(2, 4);
if (typeStr.equals("AA")) {
if(isUpdatePos){
storageNum = storage * 10 + 1;
}else{
storageNum = storage * 10 + 2;
}
} else {
if(isUpdatePos){
storageNum = storage * 10 + 2;
}else{
storageNum = storage * 10 + 1;
}
}
double row = Integer.parseInt(posId.substring(4, 6));
double column = Integer.parseInt(posId.substring(6, 8));
double x = storageNum + column / 100;
double y = storageNum + row / 1000;
double drawerRow=1;
double drawerColumn=1;
if (isUpdatePos) {
drawerRow = Integer.parseInt(posId.substring(8, 10));
drawerColumn = Integer.parseInt(posId.substring(10, 12));
}
x += drawerColumn / 100 / 1000;
y += +drawerRow / 1000 / 100;
p = new Point(x, y);
}
} catch (Exception ex) {
log.error("解析库位[" + posId + "]的坐标出错:" + ex);
}
// log.info("解析库位[" + posId + "]的坐标结果:" + p.toString());
return p;
}
}
......@@ -61,10 +61,8 @@ public class UserCodeUtil {
protected static List<User> ReadFile(String fileURL ) throws Exception
{
List<User> list=new ArrayList<User>();
CsvReader csvRead = new CsvReader(fileURL);
csvRead.setSkipEmptyRecords(true);//忽略空行
csvRead.setTrimWhitespace(true);//去除空格
csvRead.readHeaders();
CsvReader csvRead = CsvReader.newReader(fileURL,"用户ID","ID");
int idIndex = getCsvIndex(csvRead,"用户ID","ID");
int usernameIndex = getCsvIndex(csvRead,"用户名","UserName");
......
......@@ -156,10 +156,7 @@ public class BarcodeController {
protected String handleBarcode(String fileURL) throws Exception {
log.info("开始读取文件:" + fileURL);
CsvReader csvRead = new CsvReader(fileURL);
csvRead.setSkipEmptyRecords(true);//忽略空行
csvRead.setTrimWhitespace(true);//去除空格
csvRead.readHeaders();
CsvReader csvRead =CsvReader.newReader(fileURL,"条码","RI");
int riIndex = csvRead.getIndex("条码","RI");
int pnIndex = csvRead.getIndex("物编","PN");
......
......@@ -184,10 +184,8 @@ public class OrderController {
log.info("开始更解析上传的工单");
List<LiteOrderItem> items = Lists.newArrayList();
CsvReader csvRead = new CsvReader(fileURL);
csvRead.setSkipEmptyRecords(true);//忽略空行
csvRead.setTrimWhitespace(true);//去除空格
csvRead.readHeaders();
CsvReader csvRead = CsvReader.newReader(fileURL,"PN", "PN");
int partNumberIndex = csvRead.getIndex("PN", "PN");
int qtyIndex = csvRead.getIndex("NUM", "QTY");
int feederIndex = csvRead.getIndex("FEEDER", "FEEDER");
......
......@@ -6,6 +6,7 @@ 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.PointUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.rest.dto.StorageDto;
......@@ -26,6 +27,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
......@@ -37,6 +39,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -225,10 +228,8 @@ public class StorageController {
}
CsvReader csvRead = new CsvReader(fileURL);
csvRead.setSkipEmptyRecords(true);//忽略空行
csvRead.setTrimWhitespace(true);//去除空格
csvRead.readHeaders();
CsvReader csvRead =CsvReader.newReader(fileURL,"位置","pos") ;
int posIndex =csvRead.getCsvIndex( "位置","pos");
int priIndex = csvRead.getCsvIndex("优先级","pri");
int hIndex = csvRead.getCsvIndex("高度","h");
......@@ -236,38 +237,96 @@ public class StorageController {
int row = 1;
int newRowCount = 0;
int existRowCount=0;
int updateRowCount = 0;
List<StoragePos> storagePosList=storagePosManager.findByStorage(storage.getId());
List<StoragePos> newList=new ArrayList<>();
while(csvRead.readRecord()){
row++;
String[] lineValues = csvRead.getValues();
String posName = lineValues[posIndex];
String priorityStr = lineValues[priIndex];
String hStr = lineValues[hIndex];
String wStr = lineValues[wIndex];
if(posName.isEmpty() || hStr.isEmpty() || wStr.isEmpty()){
Integer priority =0;
Integer height =0;
Integer width =0;
try {
priority =Integer.parseInt(lineValues[priIndex]) ;
height = Integer.parseInt(lineValues[hIndex]);
width = Integer.parseInt(lineValues[wIndex]);
}catch (Exception ex){
log.warn("第"+row+"行中有空白内容,此行忽略");
continue;
}
if(posName.isEmpty() ){
log.warn("第"+row+"行中有空白内容,此行忽略");
continue;
}
StoragePos posInfo = storagePosManager.getByPosName(posName);
// StoragePos posInfo = storagePosManager.getByPosName(posName);
StoragePos posInfo =findFormList(storagePosList,posName);
if(posInfo == null){
posInfo = new StoragePos();
posInfo.setPosName(posName);
posInfo.setStorageId(storageId);
posInfo.setH(height);
posInfo.setW(width);
posInfo.setPriority(priority);
Point point= PointUtil.getPosPoint(posName);
posInfo.setCoordinate(new double[]{point.getX(),point.getY()});
newRowCount++;
newList.add(posInfo);
}else{
updateRowCount++;
}
posInfo.setH(Integer.valueOf(hStr));
posInfo.setW(Integer.valueOf(wStr));
if(!Strings.isNullOrEmpty(priorityStr)){
posInfo.setPriority(Double.valueOf(priorityStr));
boolean needUpdate=false;
if(!posInfo.getPosName().equals(posName)){
needUpdate=true;
posInfo.setPosName(posName);
}
if(!posInfo.getStorageId().equals(storageId)){
needUpdate=true;
posInfo.setStorageId(storageId);
}
if(posInfo.getH()!=height){
needUpdate=true;
posInfo.setH(height);
}
if(posInfo.getW()!=width){
needUpdate=true;
posInfo.setW(width);
}
if(posInfo.getPriority()!=priority){
needUpdate=true;
posInfo.setPriority(priority);
}
Point point= PointUtil.getPosPoint(posInfo.getPosName());
if(posInfo.getCoordinate()==null||posInfo.getCoordinate().length!=2||
(posInfo.getCoordinate()[0]!=point.getX()) ||(posInfo.getCoordinate()[1]!=point.getY())){
needUpdate=true;
posInfo.setCoordinate(new double[]{point.getX(),point.getY()});
}
if(needUpdate){
updateRowCount++;
storagePosManager.save(posInfo);
}else{
existRowCount++;
}
}
storagePosManager.save(posInfo);
}
if(newList.size()>0){
storagePosManager.insertAll(newList);
}
dataCache.reloadStorage(storage);
String msg = "读取到["+row+"]行数据:新增【"+newRowCount+"】更新【" +updateRowCount +"】";
String msg = "读取到["+row+"]行数据:新增【"+newRowCount+"】,已存在【"+existRowCount+"】,更新【" +updateRowCount +"】";
log.info(msg);
return msg;
}
private StoragePos findFormList(List<StoragePos> list ,String posName)
{
for (StoragePos pos :
list) {
if( pos.getPosName().equals(posName)){
return pos;
}
}
return null;
}
}
......@@ -35,4 +35,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds) throws ValidateException ;
List<StoragePos> findNotEmpty();
List<StoragePos> findByStorage(String storageId);
void insertAll(List<StoragePos> posList);
}
......@@ -248,7 +248,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public List<StoragePos> findByQuery(Query query) {
return storagePosDao.findOne(query);
return storagePosDao.findByQuery(query);
}
......@@ -318,4 +318,14 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public List<StoragePos> findNotEmpty(){
return findNotEmptyByStorageId(null);
}
@Override
public List<StoragePos> findByStorage(String storageId) {
return storagePosDao.findListByCondition(new String[]{"storageId" }, new String[]{storageId });
}
@Override
public void insertAll(List<StoragePos> posList) {
storagePosDao.insertAll(posList);
}
}
......@@ -4,16 +4,23 @@ import com.google.common.base.Strings;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import lombok.Data;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexType;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.List;
@Data
@Document
public class StoragePos extends BasePo implements Serializable {
private String storageId;
private Barcode barcode;
private String posName;
@GeoSpatialIndexed(type= GeoSpatialIndexType.GEO_2DSPHERE)
private double[] coordinate;
/**
* 扩展库位的主库位
*/
......
......@@ -151,6 +151,14 @@ public class DataLog extends BasePo implements Serializable {
* 亮灯料架颜色
*/
private String lightColor = "FF0000";
/**
* 出入库执行时间,秒
*/
private int executeTime=0;
/**
* 出库时记录此料在库时长 ,分钟
*/
private long inStoreTime=0l;
public String getBarcode() {
if(barcode == null){
......
......@@ -256,11 +256,7 @@ public class UserController {
{
log.info("开始更新用户列表");
CsvReader csvRead = new CsvReader(fileURL);
csvRead.setSkipEmptyRecords(true);//忽略空行
csvRead.setTrimWhitespace(true);//去除空格
csvRead.readHeaders();
CsvReader csvRead = CsvReader.newReader(fileURL,"用户ID","ID");
int idIndex = csvRead.getCsvIndex("用户ID","ID");
int usernameIndex = csvRead.getCsvIndex("用户名","UserName");
int codeIndex = csvRead.getCsvIndex("启用码","CheckCode");
......
......@@ -194,7 +194,10 @@ public class MenuManagerImpl implements IMenuManager {
@Override
public List<Menu> getSuperior(Menu menu, List<Menu> menus) {
if(menu!=null&& menu.getPid().equals("")){
if (menu == null || menu.getPid() == null) {
return menus;
}
if (menu.getPid().equals("")) {
menus.addAll(menuDao.findByPid(menu.getPid()));
return menus;
}
......
......@@ -169,6 +169,11 @@ public class Menu extends BasePo implements Serializable {
Menu menu = new Menu(new ArrayList<Menu>(), 0, "", title, menuSort, path, "", "", subCount, false, false, false, title, icon,titleKey);
return menu;
}
/**
* 服务器使用的key
* @return
*/
public String GetMsgKey() {
String titleKey= (ObjectUtil.isNotEmpty(getTitleKey())? getTitleKey():getPath());
if(!titleKey.startsWith("smfcore.")){
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!