Commit e36c55b2 LN

增加条码设置功能。查找出库增加条码解析。

1 个父辈 53152fd7
...@@ -191,9 +191,9 @@ public class DataInitManager { ...@@ -191,9 +191,9 @@ public class DataInitManager {
Menu menuStorage = new Menu(new ArrayList<Menu>(), 1, "storage:list", "料仓管理", 1, "bunker", "storage/storage/index", "", 0, "database"); Menu menuStorage = new Menu(new ArrayList<Menu>(), 1, "storage:list", "料仓管理", 1, "bunker", "storage/storage/index", "", 0, "database");
Menu menuStoragePos = new Menu(new ArrayList<Menu>(), 1, "storagePos:list", "库位管理", 1, "storagePos", "storagePos/storagePos/index", "", 0, "tree-table"); Menu menuStoragePos = new Menu(new ArrayList<Menu>(), 1, "storagePos:list", "库位管理", 1, "storagePos", "storagePos/storagePos/index", "", 0, "tree-table");
Menu menuMenu = new Menu(new ArrayList<Menu>(), 1, "menu:list", "菜单管理", 1, "menu", "system/menu/index", "", 0, "menu"); Menu menuMenu = new Menu(new ArrayList<Menu>(), 1, "menu:list", "菜单管理", 1, "menu", "system/menu/index", "", 0, "menu");
Menu sysSetting = new Menu(new ArrayList<Menu>(), 1, "setting", "系统设置", 1, "setting", "system/setting/index", "", 0, "database"); Menu sysSetting = new Menu(new ArrayList<Menu>(), 1, "setting", "条码设置", 1, "barcodeSetting", "system/barcodeSetting/index", "", 0, "database");
// menuMenu.setHidden(true); // menuMenu.setHidden(true);
sysSetting.setHidden(true); // sysSetting.setHidden(true);
menus.addAll(createMenus(poutSet, menuStorage, menuStoragePos, menuMenu, sysSetting)); menus.addAll(createMenus(poutSet, menuStorage, menuStoragePos, menuMenu, sysSetting));
......
...@@ -83,4 +83,6 @@ public class Constants { ...@@ -83,4 +83,6 @@ public class Constants {
* @deprecated No longer used to set themes. * @deprecated No longer used to set themes.
*/ */
public static final String CSS_THEME = "csstheme"; public static final String CSS_THEME = "csstheme";
public static final String CACHE_CodeRule="codeRule";
} }
...@@ -8,9 +8,7 @@ import com.neotel.smfcore.common.exception.ValidateException; ...@@ -8,9 +8,7 @@ import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto; import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeSettingDto;
import com.neotel.smfcore.core.barcode.rest.bean.mapstruct.BarcodeMapper; import com.neotel.smfcore.core.barcode.rest.bean.mapstruct.BarcodeMapper;
import com.neotel.smfcore.core.barcode.rest.bean.mapstruct.BarcodeSettingMapper;
import com.neotel.smfcore.core.barcode.rest.bean.query.BarcodeQueryCriteria; import com.neotel.smfcore.core.barcode.rest.bean.query.BarcodeQueryCriteria;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
...@@ -36,7 +34,6 @@ import javax.servlet.http.HttpServletResponse; ...@@ -36,7 +34,6 @@ import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
@Slf4j @Slf4j
...@@ -50,8 +47,6 @@ public class BarcodeController { ...@@ -50,8 +47,6 @@ public class BarcodeController {
@Autowired @Autowired
private final BarcodeMapper barcodeMapper; private final BarcodeMapper barcodeMapper;
@Autowired @Autowired
private final BarcodeSettingMapper barcodeSettingMapper;
@Autowired
private final DataCache dataCache; private final DataCache dataCache;
@Autowired @Autowired
...@@ -110,31 +105,25 @@ public class BarcodeController { ...@@ -110,31 +105,25 @@ public class BarcodeController {
} }
@ApiOperation("获取条码设置信息") @ApiOperation("获取条码规则")
@GetMapping("/setting") @GetMapping("/rule")
@PreAuthorize("@el.check('barcode:setting')") @PreAuthorize("@el.check('barcode:setting')")
public BarcodeSettingDto setting(){ public List<String> getRules(){
BarcodeSettingDto settingDto=barcodeSettingMapper.toDto(dataCache.getSettings() ); return dataCache.getSettings().getCodeRuleList();
return settingDto;
} }
@ApiOperation("修改条码设置信息") @ApiOperation("修改条码规则")
@PutMapping("/setting") @PutMapping("/rule")
@PreAuthorize("@el.check('barcode:setting')") @PreAuthorize("@el.check('barcode:setting')")
public ResponseEntity<Object> updateSetting(@Validated @RequestBody BarcodeSettingDto settingDto) { public ResponseEntity<Object> updateRules(@Validated @RequestBody List<String> codeRules) {
if(settingDto.getCodeRuleList().isEmpty()){ if(codeRules.isEmpty()){
throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"codeRuleList"} ); throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"codeRuleList"} );
} }
if(settingDto.getPageHeight()==null){ if(codeRules.size()>10){
throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"pageHeight"} ); throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"codeRuleList"} );
}
if(settingDto.getPageWidth()==null){
throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"pageWidth"} );
} }
Settings settings=dataCache.getSettings(); Settings settings=dataCache.getSettings();
settings.setCodeRuleList(settingDto.getCodeRuleList()); settings.setCodeRuleList(codeRules);
settings.setPageHeight(settingDto.getPageHeight());
settings.setPageWidth(settingDto.getPageWidth());
dataCache.updateSettings(settings); dataCache.updateSettings(settings);
//修改设置 //修改设置
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
......
package com.neotel.smfcore.core.barcode.rest.bean.dto;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class BarcodeSettingDto {
@ApiModelProperty("多条条码规则")
private List<String> codeRuleList = Lists.newArrayList();
@ApiModelProperty("打印条码的纸张宽度(条码为方形,大小是长宽中最小的)")
private Integer pageWidth = 500;
@ApiModelProperty("打印条码的纸张高度")
private Integer pageHeight = 160;
}
package com.neotel.smfcore.core.barcode.rest.bean.dto;
import com.google.common.collect.Lists;
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 io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.data.annotation.Transient;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Getter
@Setter
@ToString
public class CodeDto implements Serializable {
@ApiModelProperty("条码编号")
private String barcode;
@ApiModelProperty("料件编号")
private String partNumber;
@ApiModelProperty("宽度")
private int plateSize=0;
@ApiModelProperty("高度")
private int height=0;
/**
* 原始条码
*/
@ApiModelProperty("原始条码")
private String fullCode;
}
package com.neotel.smfcore.core.barcode.rest.bean.mapstruct; package com.neotel.smfcore.core.barcode.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper; import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeSettingDto; import com.neotel.smfcore.core.barcode.rest.bean.dto.CodeDto;
import com.neotel.smfcore.core.system.service.po.Settings; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring" ,unmappedTargetPolicy = ReportingPolicy.IGNORE) @Mapper(componentModel = "spring" ,unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface BarcodeSettingMapper extends BaseMapper<BarcodeSettingDto, Settings> { public interface CodeMapper extends BaseMapper<CodeDto,Barcode> {
} }
...@@ -43,7 +43,7 @@ public class CodeResolve { ...@@ -43,7 +43,7 @@ public class CodeResolve {
} }
/** /**
* 解析条码为单个 Barcode * 解析条码为单个 Barcode,自动保存到数据库
*/ */
public CodeBean resolveSingleCode(String barcodeItemStr){ public CodeBean resolveSingleCode(String barcodeItemStr){
...@@ -220,6 +220,26 @@ public class CodeResolve { ...@@ -220,6 +220,26 @@ public class CodeResolve {
return codeBeanFromRule; return codeBeanFromRule;
} }
/**
* 解析条码为单个 Barcode
*/
public Barcode resolveCode(String barcodeItemStr) {
CodeBean codeBeanFromRule = null;
//每个规则尝试解析一次
for (BarcodeRule codeRule : barcodeRuleList) {
codeBeanFromRule = codeRule.toCodeBean(barcodeItemStr);
if (codeBeanFromRule.isValid()) {
if (codeBeanFromRule.getBarcode() != null) {
return codeBeanFromRule.getBarcode();
}
}
}
return null;
}
public Collection<CodeBean> resolveCodeStr(String codeStr){ public Collection<CodeBean> resolveCodeStr(String codeStr){
List<CodeBean> codeBeans = Lists.newArrayList(); List<CodeBean> codeBeans = Lists.newArrayList();
//Map<String, CodeBean> codeBeanMap = Maps.newHashMap(); //Map<String, CodeBean> codeBeanMap = Maps.newHashMap();
......
...@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.device.util; ...@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.device.util;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.StorageConstants; import com.neotel.smfcore.common.utils.StorageConstants;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
...@@ -99,6 +100,10 @@ public class DataCache { ...@@ -99,6 +100,10 @@ public class DataCache {
public void updateCache(String cacheKey, Object value){ public void updateCache(String cacheKey, Object value){
cacheItemDao.updateCacheItem(cacheKey,value); cacheItemDao.updateCacheItem(cacheKey,value);
cacheMap.put(cacheKey,value); cacheMap.put(cacheKey,value);
if(cacheKey.equals(Constants.CACHE_CodeRule)){
List<String> ruleList=(List<String>)value;
codeResolve.updateBarcodeRuleList(ruleList);
}
} }
/** /**
......
...@@ -8,6 +8,10 @@ import com.neotel.smfcore.common.utils.Constants; ...@@ -8,6 +8,10 @@ import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.StorageConstants; import com.neotel.smfcore.common.utils.StorageConstants;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE; import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
import com.neotel.smfcore.core.barcode.rest.bean.dto.CodeDto;
import com.neotel.smfcore.core.barcode.rest.bean.mapstruct.CodeMapper;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.rest.dto.CheckOutDto; import com.neotel.smfcore.core.storage.rest.dto.CheckOutDto;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto; import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto;
...@@ -27,6 +31,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -27,6 +31,7 @@ import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
...@@ -59,6 +64,12 @@ public class StoragePosController { ...@@ -59,6 +64,12 @@ public class StoragePosController {
@Autowired @Autowired
private TaskService taskService; private TaskService taskService;
@Autowired
private CodeResolve codeResolve;
@Autowired
private CodeMapper codeMapper;
@ApiOperation("查询库位") @ApiOperation("查询库位")
...@@ -235,4 +246,21 @@ public class StoragePosController { ...@@ -235,4 +246,21 @@ public class StoragePosController {
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
@ApiOperation("解析出库条码")
@PutMapping("/resolveCode")
public CodeDto resolveCode(@RequestParam("blurry") String blurry){
String barcodeStr=blurry;
Barcode barcode=codeResolve.resolveCode(barcodeStr);
if(barcode==null){
return null;
}else{
CodeDto dto=codeMapper.toDto(barcode);
log.info("resolveCode ["+barcodeStr+"]=["+dto.toString()+"]");
return dto;
}
}
} }
...@@ -11,7 +11,7 @@ import java.util.Date; ...@@ -11,7 +11,7 @@ import java.util.Date;
@Data @Data
public class StoragePosFindCriteria { public class StoragePosFindCriteria {
@QueryCondition(blurry = "barcode,posName") @QueryCondition(blurry = "barcode.partNumber,barcode,posName")
private String blurry; private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate") @QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
......
...@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; ...@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
@Data @Data
public class StoragePosQueryCriteria { public class StoragePosQueryCriteria {
@QueryCondition(blurry = "barcode.barcode,posName") @QueryCondition(blurry = "barcode.partNumber,barcode.barcode,posName")
private String blurry; private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate") @QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!