解决多单位商品导入的bug

This commit is contained in:
季圣华
2021-12-03 21:52:53 +08:00
parent 4bb9140426
commit 3e2bbd0a1b
7 changed files with 32 additions and 23 deletions

View File

@@ -879,10 +879,10 @@ CREATE TABLE `jsh_unit` (
-- ---------------------------- -- ----------------------------
-- Records of jsh_unit -- Records of jsh_unit
-- ---------------------------- -- ----------------------------
INSERT INTO `jsh_unit` VALUES ('15', ',箱(1:12)', '', '', null, null, '12', null, null, '63', '0'); INSERT INTO `jsh_unit` VALUES ('15', '/(箱=12)', '', '', null, null, '12', null, null, '63', '0');
INSERT INTO `jsh_unit` VALUES ('19', ',盒(1:15)', '', '', null, null, '15', null, null, '63', '0'); INSERT INTO `jsh_unit` VALUES ('19', '/(盒=15)', '', '', null, null, '15', null, null, '63', '0');
INSERT INTO `jsh_unit` VALUES ('20', ',箱(1:8)', '', '', null, null, '8', null, null, '63', '0'); INSERT INTO `jsh_unit` VALUES ('20', '/(箱=8盒)', '', '', null, null, '8', null, null, '63', '0');
INSERT INTO `jsh_unit` VALUES ('21', ',箱(1:12)', '', '', null, null, '12', null, null, '63', '0'); INSERT INTO `jsh_unit` VALUES ('21', '/(箱=12)', '', '', null, null, '12', null, null, '63', '0');
-- ---------------------------- -- ----------------------------
-- Table structure for jsh_user -- Table structure for jsh_user

View File

@@ -295,7 +295,7 @@ public class ExceptionConstants {
public static final String MATERIAL_BARCODE_EXISTS_MSG = "商品条码:%s重复"; public static final String MATERIAL_BARCODE_EXISTS_MSG = "商品条码:%s重复";
//商品-单位匹配不上 //商品-单位匹配不上
public static final int MATERIAL_UNIT_MATE_CODE = 8000006; public static final int MATERIAL_UNIT_MATE_CODE = 8000006;
public static final String MATERIAL_UNIT_MATE_MSG = "抱歉,单位匹配不上,请完善计量单位信息!"; public static final String MATERIAL_UNIT_MATE_MSG = "抱歉,商品条码:%s的单位匹配不上,请完善计量单位信息!";
/** /**
* 单据信息 * 单据信息
* type = 85 * type = 85

View File

@@ -382,7 +382,7 @@ public class DepotItemService {
Unit unitInfo = materialService.findUnit(materialExtend.getMaterialId()); //查询计量单位信息 Unit unitInfo = materialService.findUnit(materialExtend.getMaterialId()); //查询计量单位信息
if (StringUtil.isNotEmpty(unitInfo.getName())) { if (StringUtil.isNotEmpty(unitInfo.getName())) {
String basicUnit = unitInfo.getBasicUnit(); //基本单位 String basicUnit = unitInfo.getBasicUnit(); //基本单位
if (unit.equals(basicUnit)) { //如果等于基单位 if (unit.equals(basicUnit)) { //如果等于基单位
depotItem.setBasicNumber(oNumber); //数量一致 depotItem.setBasicNumber(oNumber); //数量一致
} else if (unit.equals(unitInfo.getOtherUnit())) { //如果等于副单位 } else if (unit.equals(unitInfo.getOtherUnit())) { //如果等于副单位
depotItem.setBasicNumber(oNumber.multiply(new BigDecimal(unitInfo.getRatio())) ); //数量乘以比例 depotItem.setBasicNumber(oNumber.multiply(new BigDecimal(unitInfo.getRatio())) ); //数量乘以比例

View File

@@ -472,7 +472,7 @@ public class MaterialService {
String color = ExcelUtils.getContent(src, i, 3); //颜色 String color = ExcelUtils.getContent(src, i, 3); //颜色
String categoryName = ExcelUtils.getContent(src, i, 4); //类别 String categoryName = ExcelUtils.getContent(src, i, 4); //类别
String expiryNum = ExcelUtils.getContent(src, i, 5); //保质期 String expiryNum = ExcelUtils.getContent(src, i, 5); //保质期
String unit = ExcelUtils.getContent(src, i, 6); //基单位 String unit = ExcelUtils.getContent(src, i, 6); //基单位
//校验名称、单位是否为空 //校验名称、单位是否为空
if(StringUtil.isNotEmpty(name) && StringUtil.isNotEmpty(unit)) { if(StringUtil.isNotEmpty(name) && StringUtil.isNotEmpty(unit)) {
MaterialWithInitStock m = new MaterialWithInitStock(); MaterialWithInitStock m = new MaterialWithInitStock();
@@ -516,14 +516,13 @@ public class MaterialService {
basicObj.put("wholesaleDecimal", wholesaleDecimal); basicObj.put("wholesaleDecimal", wholesaleDecimal);
basicObj.put("lowDecimal", lowDecimal); basicObj.put("lowDecimal", lowDecimal);
materialExObj.put("basic", basicObj); materialExObj.put("basic", basicObj);
if(StringUtil.isNotEmpty(manyUnit.trim())){ //多单位 if(StringUtil.isNotEmpty(manyUnit) && StringUtil.isNotEmpty(ratio)){ //多单位
String manyUnitAll = unit + "," + manyUnit + "(1:" + ratio + ")"; Long unitId = unitService.getUnitIdByParam(unit, manyUnit, Integer.parseInt(ratio.trim()));
Long unitId = unitService.getUnitIdByName(manyUnitAll);
if(unitId != null) { if(unitId != null) {
m.setUnitId(unitId); m.setUnitId(unitId);
} else { } else {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_UNIT_MATE_CODE, throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_UNIT_MATE_CODE,
String.format(ExceptionConstants.MATERIAL_UNIT_MATE_MSG)); String.format(ExceptionConstants.MATERIAL_UNIT_MATE_MSG, manyBarCode));
} }
JSONObject otherObj = new JSONObject(); JSONObject otherObj = new JSONObject();
otherObj.put("barCode", manyBarCode); otherObj.put("barCode", manyBarCode);
@@ -544,11 +543,13 @@ public class MaterialService {
int col = 15+j; int col = 15+j;
if(col < src.getColumns()){ if(col < src.getColumns()){
String depotName = ExcelUtils.getContent(src, 1, col); //获取仓库名称 String depotName = ExcelUtils.getContent(src, 1, col); //获取仓库名称
Long depotId = depotService.getIdByName(depotName); if(StringUtil.isNotEmpty(depotName)) {
if(depotId!=0L){ Long depotId = depotService.getIdByName(depotName);
String stockStr = ExcelUtils.getContent(src, i, col); if(depotId!=0L){
if(StringUtil.isNotEmpty(stockStr)) { String stockStr = ExcelUtils.getContent(src, i, col);
stockMap.put(depotId, parseBigDecimalEx(stockStr)); if(StringUtil.isNotEmpty(stockStr)) {
stockMap.put(depotId, parseBigDecimalEx(stockStr));
}
} }
} }
} }

View File

@@ -192,7 +192,7 @@ public class MaterialExtendService {
this.updateMaterialExtend(materialExtend); this.updateMaterialExtend(materialExtend);
} }
} }
//处理条码的排序,基单位排第一个 //处理条码的排序,基单位排第一个
if (null != sortJson && sortJson.size()>0) { if (null != sortJson && sortJson.size()>0) {
//此处为更新的逻辑 //此处为更新的逻辑
for (int i = 0; i < sortJson.size(); i++) { for (int i = 0; i < sortJson.size(); i++) {
@@ -207,7 +207,7 @@ public class MaterialExtendService {
this.updateMaterialExtend(materialExtend); this.updateMaterialExtend(materialExtend);
} }
} else { } else {
//新增的时候将第一条记录设置为默认基单位 //新增的时候将第一条记录设置为默认基单位
MaterialExtendExample example = new MaterialExtendExample(); MaterialExtendExample example = new MaterialExtendExample();
example.createCriteria().andMaterialIdEqualTo(materialId).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); example.createCriteria().andMaterialIdEqualTo(materialId).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
List<MaterialExtend> meList = materialExtendMapper.selectByExample(example); List<MaterialExtend> meList = materialExtendMapper.selectByExample(example);

View File

@@ -208,13 +208,17 @@ public class UnitService {
} }
/** /**
* 根据名称获取类型 * 根据条件查询单位id
* @param name * @param basicUnit
* @param otherUnit
* @param ratio
* @return
*/ */
public Long getUnitIdByName(String name){ public Long getUnitIdByParam(String basicUnit, String otherUnit, Integer ratio){
Long unitId = null; Long unitId = null;
UnitExample example = new UnitExample(); UnitExample example = new UnitExample();
example.createCriteria().andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); example.createCriteria().andBasicUnitEqualTo(basicUnit).andOtherUnitEqualTo(otherUnit).andRatioEqualTo(ratio)
.andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
List<Unit> list = unitMapper.selectByExample(example); List<Unit> list = unitMapper.selectByExample(example);
if(list!=null && list.size()>0) { if(list!=null && list.size()>0) {
unitId = list.get(0).getId(); unitId = list.get(0).getId();

View File

@@ -204,7 +204,11 @@ public class ExcelUtils {
public static String getContent(Sheet src, int rowNum, int colNum) { public static String getContent(Sheet src, int rowNum, int colNum) {
return src.getRow(rowNum)[colNum].getContents().trim(); if(colNum < src.getRow(rowNum).length) {
return src.getRow(rowNum)[colNum].getContents().trim();
} else {
return null;
}
} }
/** /**