优化商品的excel导入

This commit is contained in:
季圣华
2022-05-14 23:47:21 +08:00
parent b4db7c6722
commit ad9ee39c80
12 changed files with 546 additions and 266 deletions

View File

@@ -305,6 +305,27 @@ public class ExceptionConstants {
//抱歉文件扩展名必须为xls //抱歉文件扩展名必须为xls
public static final int MATERIAL_EXTENSION_ERROR_CODE = 8000009; public static final int MATERIAL_EXTENSION_ERROR_CODE = 8000009;
public static final String MATERIAL_EXTENSION_ERROR_MSG = "抱歉文件扩展名必须为xls"; public static final String MATERIAL_EXTENSION_ERROR_MSG = "抱歉文件扩展名必须为xls";
//名称为空
public static final int MATERIAL_NAME_EMPTY_CODE = 8000010;
public static final String MATERIAL_NAME_EMPTY_MSG = "第%s行名称为空";
//基本单位为空
public static final int MATERIAL_UNIT_EMPTY_CODE = 8000011;
public static final String MATERIAL_UNIT_EMPTY_MSG = "第%s行基本单位为空";
//状态格式错误
public static final int MATERIAL_ENABLED_ERROR_CODE = 8000012;
public static final String MATERIAL_ENABLED_ERROR_MSG = "第%s行状态格式错误";
//单次导入超出1000条
public static final int MATERIAL_IMPORT_OVER_LIMIT_CODE = 8000013;
public static final String MATERIAL_IMPORT_OVER_LIMIT_MSG = "抱歉单次导入不能超出1000条";
//基础重量格式错误
public static final int MATERIAL_WEIGHT_NOT_DECIMAL_CODE = 8000014;
public static final String MATERIAL_WEIGHT_NOT_DECIMAL_MSG = "第%s行基础重量格式错误";
//保质期格式错误
public static final int MATERIAL_EXPIRY_NUM_NOT_INTEGER_CODE = 8000015;
public static final String MATERIAL_EXPIRY_NUM_NOT_INTEGER_MSG = "第%s行保质期格式错误";
//比例格式错误
public static final int MATERIAL_RATIO_NOT_INTEGER_CODE = 8000016;
public static final String MATERIAL_RATIO_NOT_INTEGER_MSG = "第%s行比例格式错误";
/** /**
* 单据信息 * 单据信息
* type = 85 * type = 85

View File

@@ -179,7 +179,7 @@ public class DepotController {
DepotEx de = new DepotEx(); DepotEx de = new DepotEx();
if(mId!=0) { if(mId!=0) {
BigDecimal initStock = materialService.getInitStock(mId, depot.getId()); BigDecimal initStock = materialService.getInitStock(mId, depot.getId());
BigDecimal currentStock = materialService.getCurrentStock(mId, depot.getId()); BigDecimal currentStock = materialService.getCurrentStockByMaterialIdAndDepotId(mId, depot.getId());
de.setInitStock(initStock); de.setInitStock(initStock);
de.setCurrentStock(currentStock); de.setCurrentStock(currentStock);
MaterialInitialStock materialInitialStock = materialService.getSafeStock(mId, depot.getId()); MaterialInitialStock materialInitialStock = materialService.getSafeStock(mId, depot.getId());

View File

@@ -0,0 +1,15 @@
package com.jsh.erp.datasource.mappers;
import com.jsh.erp.datasource.entities.MaterialCurrentStock;
import com.jsh.erp.datasource.entities.MaterialCurrentStockExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface MaterialCurrentStockMapperEx {
int batchInsert(List<MaterialCurrentStock> list);
List<MaterialCurrentStock> getCurrentStockMapByIdList(
@Param("materialIdList") List<Long> materialIdList);
}

View File

@@ -0,0 +1,14 @@
package com.jsh.erp.datasource.mappers;
import com.jsh.erp.datasource.entities.MaterialCurrentStock;
import com.jsh.erp.datasource.entities.MaterialInitialStock;
import com.jsh.erp.datasource.entities.MaterialInitialStockExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface MaterialInitialStockMapperEx {
int batchInsert(List<MaterialInitialStock> list);
}

View File

@@ -19,15 +19,13 @@ import java.util.Map;
public interface MaterialMapperEx { public interface MaterialMapperEx {
List<MaterialVo4Unit> selectByConditionMaterial( List<MaterialVo4Unit> selectByConditionMaterial(
@Param("barCode") String barCode, @Param("materialParam") String materialParam,
@Param("name") String name,
@Param("standard") String standard,
@Param("model") String model,
@Param("color") String color, @Param("color") String color,
@Param("weight") String weight, @Param("weight") String weight,
@Param("expiryNum") String expiryNum, @Param("expiryNum") String expiryNum,
@Param("enableSerialNumber") String enableSerialNumber, @Param("enableSerialNumber") String enableSerialNumber,
@Param("enableBatchNumber") String enableBatchNumber, @Param("enableBatchNumber") String enableBatchNumber,
@Param("enabled") String enabled,
@Param("remark") String remark, @Param("remark") String remark,
@Param("idList") List<Long> idList, @Param("idList") List<Long> idList,
@Param("mpList") String mpList, @Param("mpList") String mpList,
@@ -35,19 +33,19 @@ public interface MaterialMapperEx {
@Param("rows") Integer rows); @Param("rows") Integer rows);
Long countsByMaterial( Long countsByMaterial(
@Param("barCode") String barCode, @Param("materialParam") String materialParam,
@Param("name") String name,
@Param("standard") String standard,
@Param("model") String model,
@Param("color") String color, @Param("color") String color,
@Param("weight") String weight, @Param("weight") String weight,
@Param("expiryNum") String expiryNum, @Param("expiryNum") String expiryNum,
@Param("enableSerialNumber") String enableSerialNumber, @Param("enableSerialNumber") String enableSerialNumber,
@Param("enableBatchNumber") String enableBatchNumber, @Param("enableBatchNumber") String enableBatchNumber,
@Param("enabled") String enabled,
@Param("remark") String remark, @Param("remark") String remark,
@Param("idList") List<Long> idList, @Param("idList") List<Long> idList,
@Param("mpList") String mpList); @Param("mpList") String mpList);
Long insertSelectiveEx(Material record);
List<Unit> findUnitList(@Param("mId") Long mId); List<Unit> findUnitList(@Param("mId") Long mId);
List<MaterialVo4Unit> findById(@Param("id") Long id); List<MaterialVo4Unit> findById(@Param("id") Long id);

View File

@@ -34,38 +34,34 @@ public class MaterialComponent implements ICommonQuery {
private List<?> getMaterialList(Map<String, String> map) throws Exception{ private List<?> getMaterialList(Map<String, String> map) throws Exception{
String search = map.get(Constants.SEARCH); String search = map.get(Constants.SEARCH);
String categoryId = StringUtil.getInfo(search, "categoryId"); String categoryId = StringUtil.getInfo(search, "categoryId");
String barCode = StringUtil.getInfo(search, "barCode"); String materialParam = StringUtil.getInfo(search, "materialParam");
String name = StringUtil.getInfo(search, "name");
String standard = StringUtil.getInfo(search, "standard");
String model = StringUtil.getInfo(search, "model");
String color = StringUtil.getInfo(search, "color"); String color = StringUtil.getInfo(search, "color");
String weight = StringUtil.getInfo(search, "weight"); String weight = StringUtil.getInfo(search, "weight");
String expiryNum = StringUtil.getInfo(search, "expiryNum"); String expiryNum = StringUtil.getInfo(search, "expiryNum");
String enableSerialNumber = StringUtil.getInfo(search, "enableSerialNumber"); String enableSerialNumber = StringUtil.getInfo(search, "enableSerialNumber");
String enableBatchNumber = StringUtil.getInfo(search, "enableBatchNumber"); String enableBatchNumber = StringUtil.getInfo(search, "enableBatchNumber");
String enabled = StringUtil.getInfo(search, "enabled");
String remark = StringUtil.getInfo(search, "remark"); String remark = StringUtil.getInfo(search, "remark");
String mpList = StringUtil.getInfo(search, "mpList"); String mpList = StringUtil.getInfo(search, "mpList");
return materialService.select(barCode, name, standard, model, color, weight, expiryNum, return materialService.select(materialParam, color, weight, expiryNum,
enableSerialNumber, enableBatchNumber, remark, categoryId, mpList, QueryUtils.offset(map), QueryUtils.rows(map)); enableSerialNumber, enableBatchNumber, enabled, remark, categoryId, mpList, QueryUtils.offset(map), QueryUtils.rows(map));
} }
@Override @Override
public Long counts(Map<String, String> map)throws Exception { public Long counts(Map<String, String> map)throws Exception {
String search = map.get(Constants.SEARCH); String search = map.get(Constants.SEARCH);
String categoryId = StringUtil.getInfo(search, "categoryId"); String categoryId = StringUtil.getInfo(search, "categoryId");
String barCode = StringUtil.getInfo(search, "barCode"); String materialParam = StringUtil.getInfo(search, "materialParam");
String name = StringUtil.getInfo(search, "name");
String standard = StringUtil.getInfo(search, "standard");
String model = StringUtil.getInfo(search, "model");
String color = StringUtil.getInfo(search, "color"); String color = StringUtil.getInfo(search, "color");
String weight = StringUtil.getInfo(search, "weight"); String weight = StringUtil.getInfo(search, "weight");
String expiryNum = StringUtil.getInfo(search, "expiryNum"); String expiryNum = StringUtil.getInfo(search, "expiryNum");
String enableSerialNumber = StringUtil.getInfo(search, "enableSerialNumber"); String enableSerialNumber = StringUtil.getInfo(search, "enableSerialNumber");
String enableBatchNumber = StringUtil.getInfo(search, "enableBatchNumber"); String enableBatchNumber = StringUtil.getInfo(search, "enableBatchNumber");
String enabled = StringUtil.getInfo(search, "enabled");
String remark = StringUtil.getInfo(search, "remark"); String remark = StringUtil.getInfo(search, "remark");
String mpList = StringUtil.getInfo(search, "mpList"); String mpList = StringUtil.getInfo(search, "mpList");
return materialService.countMaterial(barCode, name, standard, model, color, weight, expiryNum, return materialService.countMaterial(materialParam, color, weight, expiryNum,
enableSerialNumber, enableBatchNumber, remark, categoryId, mpList); enableSerialNumber, enableBatchNumber, enabled, remark, categoryId, mpList);
} }
@Override @Override

View File

@@ -64,8 +64,12 @@ public class MaterialService {
@Resource @Resource
private MaterialInitialStockMapper materialInitialStockMapper; private MaterialInitialStockMapper materialInitialStockMapper;
@Resource @Resource
private MaterialInitialStockMapperEx materialInitialStockMapperEx;
@Resource
private MaterialCurrentStockMapper materialCurrentStockMapper; private MaterialCurrentStockMapper materialCurrentStockMapper;
@Resource @Resource
private MaterialCurrentStockMapperEx materialCurrentStockMapperEx;
@Resource
private DepotService depotService; private DepotService depotService;
@Resource @Resource
private MaterialExtendService materialExtendService; private MaterialExtendService materialExtendService;
@@ -107,8 +111,8 @@ public class MaterialService {
return list; return list;
} }
public List<MaterialVo4Unit> select(String barCode, String name, String standard, String model, String color, public List<MaterialVo4Unit> select(String materialParam, String color, String weight, String expiryNum,
String weight, String expiryNum, String enableSerialNumber, String enableBatchNumber, String enableSerialNumber, String enableBatchNumber, String enabled,
String remark, String categoryId, String mpList, int offset, int rows) String remark, String categoryId, String mpList, int offset, int rows)
throws Exception{ throws Exception{
String[] mpArr = new String[]{}; String[] mpArr = new String[]{};
@@ -122,12 +126,13 @@ public class MaterialService {
if(StringUtil.isNotEmpty(categoryId)){ if(StringUtil.isNotEmpty(categoryId)){
idList = getListByParentId(Long.parseLong(categoryId)); idList = getListByParentId(Long.parseLong(categoryId));
} }
list= materialMapperEx.selectByConditionMaterial(barCode, name, standard, model, color, weight, expiryNum, list= materialMapperEx.selectByConditionMaterial(materialParam, color, weight, expiryNum,
enableSerialNumber, enableBatchNumber, remark, idList, mpList, offset, rows); enableSerialNumber, enableBatchNumber, enabled, remark, idList, mpList, offset, rows);
if (null != list) { if (null != list && list.size()>0) {
Map<Long,BigDecimal> currentStockMap = getCurrentStockMapByMaterialList(list);
for (MaterialVo4Unit m : list) { for (MaterialVo4Unit m : list) {
m.setMaterialOther(getMaterialOtherByParam(mpArr, m)); m.setMaterialOther(getMaterialOtherByParam(mpArr, m));
m.setStock(depotItemService.getStockByParam(null,m.getId(),null,null)); m.setStock(currentStockMap.get(m.getId()));
resList.add(m); resList.add(m);
} }
} }
@@ -137,8 +142,8 @@ public class MaterialService {
return resList; return resList;
} }
public Long countMaterial(String barCode, String name, String standard, String model, String color, public Long countMaterial(String materialParam, String color, String weight, String expiryNum,
String weight, String expiryNum, String enableSerialNumber, String enableBatchNumber, String enableSerialNumber, String enableBatchNumber, String enabled,
String remark, String categoryId,String mpList)throws Exception { String remark, String categoryId,String mpList)throws Exception {
Long result =null; Long result =null;
try{ try{
@@ -146,8 +151,8 @@ public class MaterialService {
if(StringUtil.isNotEmpty(categoryId)){ if(StringUtil.isNotEmpty(categoryId)){
idList = getListByParentId(Long.parseLong(categoryId)); idList = getListByParentId(Long.parseLong(categoryId));
} }
result= materialMapperEx.countsByMaterial(barCode, name, standard, model, color, weight, expiryNum, result= materialMapperEx.countsByMaterial(materialParam, color, weight, expiryNum,
enableSerialNumber, enableBatchNumber, remark, idList, mpList); enableSerialNumber, enableBatchNumber, enabled, remark, idList, mpList);
}catch(Exception e){ }catch(Exception e){
JshException.readFail(logger, e); JshException.readFail(logger, e);
} }
@@ -159,15 +164,8 @@ public class MaterialService {
Material m = JSONObject.parseObject(obj.toJSONString(), Material.class); Material m = JSONObject.parseObject(obj.toJSONString(), Material.class);
m.setEnabled(true); m.setEnabled(true);
try{ try{
Long mId = null; materialMapperEx.insertSelectiveEx(m);
materialMapper.insertSelective(m); Long mId = m.getId();
JSONArray meArr = obj.getJSONArray("meList");
JSONObject tempJson = meArr.getJSONObject(0);
String basicBarCode = tempJson.getString("barCode");
List<Material> materials = getMaterialListByParam(m.getName(),m.getModel(),m.getColor(),m.getStandard(), m.getUnit(),m.getUnitId(), basicBarCode);
if(materials!=null && materials.size()>0) {
mId = materials.get(0).getId();
}
materialExtendService.saveDetials(obj, obj.getString("sortList"), mId, "insert"); materialExtendService.saveDetials(obj, obj.getString("sortList"), mId, "insert");
if(obj.get("stock")!=null) { if(obj.get("stock")!=null) {
JSONArray stockArr = obj.getJSONArray("stock"); JSONArray stockArr = obj.getJSONArray("stock");
@@ -459,6 +457,7 @@ public class MaterialService {
public BaseResponseInfo importExcel(MultipartFile file, HttpServletRequest request) throws Exception { public BaseResponseInfo importExcel(MultipartFile file, HttpServletRequest request) throws Exception {
BaseResponseInfo info = new BaseResponseInfo(); BaseResponseInfo info = new BaseResponseInfo();
try { try {
Long beginTime = System.currentTimeMillis();
//文件扩展名只能为xls //文件扩展名只能为xls
String fileName = file.getOriginalFilename(); String fileName = file.getOriginalFilename();
if(StringUtil.isNotEmpty(fileName)) { if(StringUtil.isNotEmpty(fileName)) {
@@ -472,7 +471,14 @@ public class MaterialService {
Sheet src = workbook.getSheet(0); Sheet src = workbook.getSheet(0);
List<Depot> depotList= depotService.getDepot(); List<Depot> depotList= depotService.getDepot();
int depotCount = depotList.size(); int depotCount = depotList.size();
Map<String, Long> depotMap = parseDepotToMap(depotList);
User user = userService.getCurrentUser();
List<MaterialWithInitStock> mList = new ArrayList<>(); List<MaterialWithInitStock> mList = new ArrayList<>();
//单次导入超出1000条
if(src.getRows()>1002) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_IMPORT_OVER_LIMIT_CODE,
String.format(ExceptionConstants.MATERIAL_IMPORT_OVER_LIMIT_MSG));
}
for (int i = 2; i < src.getRows(); i++) { for (int i = 2; i < src.getRows(); i++) {
String name = ExcelUtils.getContent(src, i, 0); //名称 String name = ExcelUtils.getContent(src, i, 0); //名称
String standard = ExcelUtils.getContent(src, i, 1); //规格 String standard = ExcelUtils.getContent(src, i, 1); //规格
@@ -480,122 +486,132 @@ 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 weight = ExcelUtils.getContent(src, i, 5); //基础重量(kg) String weight = ExcelUtils.getContent(src, i, 5); //基础重量(kg)
String expiryNum = ExcelUtils.getContent(src, i, 6); //保质期 String expiryNum = ExcelUtils.getContent(src, i, 6); //保质期(天)
String unit = ExcelUtils.getContent(src, i, 7); //基本单位 String unit = ExcelUtils.getContent(src, i, 7); //基本单位
//校验名称、单位是否为空 //名称为空
if(StringUtil.isNotEmpty(name) && StringUtil.isNotEmpty(unit)) { if(StringUtil.isEmpty(name)) {
MaterialWithInitStock m = new MaterialWithInitStock(); throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NAME_EMPTY_CODE,
m.setName(name); String.format(ExceptionConstants.MATERIAL_NAME_EMPTY_MSG, i+1));
m.setStandard(standard);
m.setModel(model);
m.setColor(color);
Long categoryId = materialCategoryService.getCategoryIdByName(categoryName);
if(null!=categoryId){
m.setCategoryId(categoryId);
}
if(StringUtil.isNotEmpty(weight)) {
m.setWeight(BigDecimal.valueOf(Long.parseLong(weight)));
}
if(StringUtil.isNotEmpty(expiryNum)) {
m.setExpiryNum(Integer.parseInt(expiryNum));
}
String manyUnit = ExcelUtils.getContent(src, i, 8); //副单位
String barCode = ExcelUtils.getContent(src, i, 9); //基础条码
String manyBarCode = ExcelUtils.getContent(src, i, 10); //副条码
String ratio = ExcelUtils.getContent(src, i, 11); //比例
String purchaseDecimal = ExcelUtils.getContent(src, i, 12); //采购价
String commodityDecimal = ExcelUtils.getContent(src, i, 13); //零售价
String wholesaleDecimal = ExcelUtils.getContent(src, i, 14); //销售价
String lowDecimal = ExcelUtils.getContent(src, i, 15); //最低售价
String enabled = ExcelUtils.getContent(src, i, 16); //状态
String enableSerialNumber = ExcelUtils.getContent(src, i, 17); //序列号
String enableBatchNumber = ExcelUtils.getContent(src, i, 18); //批号
//校验基础条码是否是正整数
if(!StringUtil.isPositiveLong(barCode)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_NOT_INTEGER_CODE,
String.format(ExceptionConstants.MATERIAL_BARCODE_NOT_INTEGER_MSG, barCode));
}
//校验副条码是否是正整数
if(StringUtil.isNotEmpty(manyBarCode) && !StringUtil.isPositiveLong(manyBarCode)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_NOT_INTEGER_CODE,
String.format(ExceptionConstants.MATERIAL_BARCODE_NOT_INTEGER_MSG, manyBarCode));
}
JSONObject materialExObj = new JSONObject();
JSONObject basicObj = new JSONObject();
basicObj.put("barCode", barCode);
basicObj.put("commodityUnit", unit);
basicObj.put("purchaseDecimal", purchaseDecimal);
basicObj.put("commodityDecimal", commodityDecimal);
basicObj.put("wholesaleDecimal", wholesaleDecimal);
basicObj.put("lowDecimal", lowDecimal);
materialExObj.put("basic", basicObj);
if(StringUtil.isNotEmpty(manyUnit) && StringUtil.isNotEmpty(ratio)){ //多单位
Long unitId = unitService.getUnitIdByParam(unit, manyUnit, Integer.parseInt(ratio.trim()));
if(unitId != null) {
m.setUnitId(unitId);
} else {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_UNIT_MATE_CODE,
String.format(ExceptionConstants.MATERIAL_UNIT_MATE_MSG, manyBarCode));
}
JSONObject otherObj = new JSONObject();
otherObj.put("barCode", manyBarCode);
otherObj.put("commodityUnit", manyUnit);
otherObj.put("purchaseDecimal", parsePrice(purchaseDecimal,ratio));
otherObj.put("commodityDecimal", parsePrice(commodityDecimal,ratio));
otherObj.put("wholesaleDecimal", parsePrice(wholesaleDecimal,ratio));
otherObj.put("lowDecimal", parsePrice(lowDecimal,ratio));
materialExObj.put("other", otherObj);
} else {
m.setUnit(unit);
}
m.setMaterialExObj(materialExObj);
m.setEnabled("1".equals(enabled));
if(StringUtil.isNotEmpty(enableSerialNumber) && "1".equals(enableSerialNumber)) {
m.setEnableSerialNumber("1");
} else {
m.setEnableSerialNumber("0");
}
if(StringUtil.isNotEmpty(enableBatchNumber) && "1".equals(enableBatchNumber)) {
m.setEnableBatchNumber("1");
} else {
m.setEnableBatchNumber("0");
}
if("1".equals(enableSerialNumber) && "1".equals(enableBatchNumber)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_ENABLE_MUST_ONE_CODE,
String.format(ExceptionConstants.MATERIAL_ENABLE_MUST_ONE_MSG, barCode));
}
//缓存各个仓库的库存信息
Map<Long, BigDecimal> stockMap = new HashMap<>();
for(int j=1; j<=depotCount;j++) {
int col = 18+j;
if(col < src.getColumns()){
String depotName = ExcelUtils.getContent(src, 1, col); //获取仓库名称
if(StringUtil.isNotEmpty(depotName)) {
Long depotId = depotService.getIdByName(depotName);
if(depotId!=0L){
String stockStr = ExcelUtils.getContent(src, i, col);
if(StringUtil.isNotEmpty(stockStr)) {
stockMap.put(depotId, parseBigDecimalEx(stockStr));
}
}
}
}
}
m.setStockMap(stockMap);
mList.add(m);
} }
//基本单位为空
if(StringUtil.isEmpty(unit)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_UNIT_EMPTY_CODE,
String.format(ExceptionConstants.MATERIAL_UNIT_EMPTY_MSG, i+1));
}
MaterialWithInitStock m = new MaterialWithInitStock();
m.setName(name);
m.setStandard(standard);
m.setModel(model);
m.setColor(color);
Long categoryId = materialCategoryService.getCategoryIdByName(categoryName);
if(null!=categoryId){
m.setCategoryId(categoryId);
}
if(StringUtil.isNotEmpty(weight)) {
//校验基础重量是否是数字(含小数)
if(!StringUtil.isPositiveBigDecimal(weight)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_WEIGHT_NOT_DECIMAL_CODE,
String.format(ExceptionConstants.MATERIAL_WEIGHT_NOT_DECIMAL_MSG, i+1));
}
m.setWeight(new BigDecimal(weight));
}
if(StringUtil.isNotEmpty(expiryNum)) {
//校验保质期是否是正整数
if(!StringUtil.isPositiveLong(expiryNum)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_EXPIRY_NUM_NOT_INTEGER_CODE,
String.format(ExceptionConstants.MATERIAL_EXPIRY_NUM_NOT_INTEGER_MSG, i+1));
}
m.setExpiryNum(Integer.parseInt(expiryNum));
}
String manyUnit = ExcelUtils.getContent(src, i, 8); //副单位
String barCode = ExcelUtils.getContent(src, i, 9); //基础条码
String manyBarCode = ExcelUtils.getContent(src, i, 10); //副条码
String ratio = ExcelUtils.getContent(src, i, 11); //比例
String purchaseDecimal = ExcelUtils.getContent(src, i, 12); //采购价
String commodityDecimal = ExcelUtils.getContent(src, i, 13); //零售价
String wholesaleDecimal = ExcelUtils.getContent(src, i, 14); //销售价
String lowDecimal = ExcelUtils.getContent(src, i, 15); //最低售价
String enabled = ExcelUtils.getContent(src, i, 16); //状态
String enableSerialNumber = ExcelUtils.getContent(src, i, 17); //序列号
String enableBatchNumber = ExcelUtils.getContent(src, i, 18); //批号
//状态格式错误
if(!"1".equals(enabled) && !"0".equals(enabled)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_ENABLED_ERROR_CODE,
String.format(ExceptionConstants.MATERIAL_ENABLED_ERROR_MSG, i+1));
}
//校验基础条码是否是正整数
if(!StringUtil.isPositiveLong(barCode)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_NOT_INTEGER_CODE,
String.format(ExceptionConstants.MATERIAL_BARCODE_NOT_INTEGER_MSG, barCode));
}
//校验副条码是否是正整数
if(StringUtil.isNotEmpty(manyBarCode) && !StringUtil.isPositiveLong(manyBarCode)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_NOT_INTEGER_CODE,
String.format(ExceptionConstants.MATERIAL_BARCODE_NOT_INTEGER_MSG, manyBarCode));
}
JSONObject materialExObj = new JSONObject();
JSONObject basicObj = new JSONObject();
basicObj.put("barCode", barCode);
basicObj.put("commodityUnit", unit);
basicObj.put("purchaseDecimal", purchaseDecimal);
basicObj.put("commodityDecimal", commodityDecimal);
basicObj.put("wholesaleDecimal", wholesaleDecimal);
basicObj.put("lowDecimal", lowDecimal);
materialExObj.put("basic", basicObj);
if(StringUtil.isNotEmpty(manyUnit) && StringUtil.isNotEmpty(ratio)){ //多单位
//校验比例是否是正整数
if(!StringUtil.isPositiveLong(ratio.trim())) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_RATIO_NOT_INTEGER_CODE,
String.format(ExceptionConstants.MATERIAL_RATIO_NOT_INTEGER_MSG, i+1));
}
Long unitId = unitService.getUnitIdByParam(unit, manyUnit, Integer.parseInt(ratio.trim()));
if(unitId != null) {
m.setUnitId(unitId);
} else {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_UNIT_MATE_CODE,
String.format(ExceptionConstants.MATERIAL_UNIT_MATE_MSG, manyBarCode));
}
JSONObject otherObj = new JSONObject();
otherObj.put("barCode", manyBarCode);
otherObj.put("commodityUnit", manyUnit);
otherObj.put("purchaseDecimal", parsePrice(purchaseDecimal,ratio));
otherObj.put("commodityDecimal", parsePrice(commodityDecimal,ratio));
otherObj.put("wholesaleDecimal", parsePrice(wholesaleDecimal,ratio));
otherObj.put("lowDecimal", parsePrice(lowDecimal,ratio));
materialExObj.put("other", otherObj);
} else {
m.setUnit(unit);
}
m.setMaterialExObj(materialExObj);
m.setEnabled("1".equals(enabled));
if(StringUtil.isNotEmpty(enableSerialNumber) && "1".equals(enableSerialNumber)) {
m.setEnableSerialNumber("1");
} else {
m.setEnableSerialNumber("0");
}
if(StringUtil.isNotEmpty(enableBatchNumber) && "1".equals(enableBatchNumber)) {
m.setEnableBatchNumber("1");
} else {
m.setEnableBatchNumber("0");
}
if("1".equals(enableSerialNumber) && "1".equals(enableBatchNumber)) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_ENABLE_MUST_ONE_CODE,
String.format(ExceptionConstants.MATERIAL_ENABLE_MUST_ONE_MSG, barCode));
}
m.setStockMap(getStockMapCache(src, depotCount, depotMap, i));
mList.add(m);
} }
Long mId = 0L; List<Long> deleteStockMaterialIdList = new ArrayList<>();
List<MaterialCurrentStock> insertCurrentStockMaterialList = new ArrayList<>();
List<MaterialInitialStock> insertInitialStockMaterialList = new ArrayList<>();
for(MaterialWithInitStock m: mList) { for(MaterialWithInitStock m: mList) {
Long mId = 0L;
//判断该商品是否存在,如果不存在就新增,如果存在就更新 //判断该商品是否存在,如果不存在就新增,如果存在就更新
String basicBarCode = getBasicBarCode(m); String basicBarCode = getBasicBarCode(m);
List<Material> materials = getMaterialListByParam(m.getName(),m.getModel(),m.getColor(),m.getStandard(),m.getUnit(),m.getUnitId(), basicBarCode); List<Material> materials = getMaterialListByParam(m.getName(),m.getStandard(),m.getModel(),m.getColor(),m.getUnit(),m.getUnitId(), basicBarCode);
if(materials.size()<=0) { if(materials.size() == 0) {
materialMapper.insertSelective(m); materialMapperEx.insertSelectiveEx(m);
List<Material> newList = getMaterialListByParam(m.getName(),m.getModel(),m.getColor(),m.getStandard(),m.getUnit(),m.getUnitId(), basicBarCode); mId = m.getId();
if(newList.size()>0) {
mId = newList.get(0).getId();
}
} else { } else {
mId = materials.get(0).getId(); mId = materials.get(0).getId();
String materialJson = JSON.toJSONString(m); String materialJson = JSON.toJSONString(m);
@@ -603,54 +619,49 @@ public class MaterialService {
material.setId(mId); material.setId(mId);
materialMapper.updateByPrimaryKeySelective(material); materialMapper.updateByPrimaryKeySelective(material);
} }
//给商品新增条码与价格相关信息 //给商品新增或更新条码与价格相关信息
User user = userService.getCurrentUser();
JSONObject materialExObj = m.getMaterialExObj(); JSONObject materialExObj = m.getMaterialExObj();
if(StringUtil.isExist(materialExObj.get("basic"))){ insertOrUpdateMaterialExtend(materialExObj, "basic", "1", mId, user);
String basicStr = materialExObj.getString("basic"); insertOrUpdateMaterialExtend(materialExObj, "other", "0", mId, user);
MaterialExtend basicMaterialExtend = JSONObject.parseObject(basicStr, MaterialExtend.class); //给商品更新库存
basicMaterialExtend.setMaterialId(mId); deleteStockMaterialIdList.add(mId);
basicMaterialExtend.setDefaultFlag("1");
basicMaterialExtend.setCreateTime(new Date());
basicMaterialExtend.setUpdateTime(System.currentTimeMillis());
basicMaterialExtend.setCreateSerial(user.getLoginName());
basicMaterialExtend.setUpdateSerial(user.getLoginName());
Long meId = materialExtendService.selectIdByMaterialIdAndDefaultFlag(mId, "1");
changeMaterialExtend(mId, basicMaterialExtend, meId);
}
if(StringUtil.isExist(materialExObj.get("other"))) {
String otherStr = materialExObj.getString("other");
MaterialExtend otherMaterialExtend = JSONObject.parseObject(otherStr, MaterialExtend.class);
otherMaterialExtend.setMaterialId(mId);
otherMaterialExtend.setDefaultFlag("0");
otherMaterialExtend.setCreateTime(new Date());
otherMaterialExtend.setUpdateTime(System.currentTimeMillis());
otherMaterialExtend.setCreateSerial(user.getLoginName());
otherMaterialExtend.setUpdateSerial(user.getLoginName());
Long meId = materialExtendService.selectIdByMaterialIdAndDefaultFlag(mId, "0");
changeMaterialExtend(mId, otherMaterialExtend, meId);
}
//给商品初始化库存getAllListWithStock
Map<Long, BigDecimal> stockMap = m.getStockMap(); Map<Long, BigDecimal> stockMap = m.getStockMap();
Long depotId = null;
for(Depot depot: depotList){ for(Depot depot: depotList){
depotId = depot.getId(); Long depotId = depot.getId();
BigDecimal stock = stockMap.get(depot.getId()); BigDecimal stock = stockMap.get(depot.getId());
//初始库存-先清除再插入 //新增初始库存
MaterialInitialStockExample example = new MaterialInitialStockExample();
example.createCriteria().andMaterialIdEqualTo(mId).andDepotIdEqualTo(depot.getId());
materialInitialStockMapper.deleteByExample(example);
if(stock!=null && stock.compareTo(BigDecimal.ZERO)!=0) { if(stock!=null && stock.compareTo(BigDecimal.ZERO)!=0) {
//新增初始库存 MaterialInitialStock materialInitialStock = new MaterialInitialStock();
insertInitialStockByMaterialAndDepot(depotId, mId, stock, null, null); materialInitialStock.setMaterialId(mId);
materialInitialStock.setDepotId(depotId);
materialInitialStock.setNumber(stock);
insertInitialStockMaterialList.add(materialInitialStock);
} }
//新增或更新当前库存 //新增或更新当前库存
insertOrUpdateCurrentStockByMaterialAndDepot(depotId, mId, stock); Long billCount = depotItemService.getCountByMaterialAndDepot(mId, depotId);
if(billCount == 0) {
if(stock!=null && stock.compareTo(BigDecimal.ZERO)!=0) {
MaterialCurrentStock materialCurrentStock = new MaterialCurrentStock();
materialCurrentStock.setMaterialId(mId);
materialCurrentStock.setDepotId(depotId);
materialCurrentStock.setCurrentNumber(stock);
insertCurrentStockMaterialList.add(materialCurrentStock);
}
} else {
depotItemService.updateCurrentStockFun(mId, depotId);
}
} }
} }
//批量更新库存
batchDeleteInitialStockByMaterialList(deleteStockMaterialIdList);
materialInitialStockMapperEx.batchInsert(insertInitialStockMaterialList);
batchDeleteCurrentStockByMaterialList(deleteStockMaterialIdList);
materialCurrentStockMapperEx.batchInsert(insertCurrentStockMaterialList);
logService.insertLog("商品", logService.insertLog("商品",
new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_IMPORT).append(mList.size()).append(BusinessConstants.LOG_DATA_UNIT).toString(), new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_IMPORT).append(mList.size()).append(BusinessConstants.LOG_DATA_UNIT).toString(),
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
Long endTime = System.currentTimeMillis();
logger.info("导入耗时:{}", endTime-beginTime);
info.code = 200; info.code = 200;
info.data = "导入成功"; info.data = "导入成功";
} catch (BusinessRunTimeException e) { } catch (BusinessRunTimeException e) {
@@ -664,25 +675,69 @@ public class MaterialService {
return info; return info;
} }
private Map<String, Long> parseDepotToMap(List<Depot> depotList) {
Map<String, Long> map = new HashMap<>();
for(Depot depot: depotList) {
map.put(depot.getName(), depot.getId());
}
return map;
}
/**
* 缓存各个仓库的库存信息
* @param src
* @param depotCount
* @param depotMap
* @param i
* @return
* @throws Exception
*/
private Map<Long, BigDecimal> getStockMapCache(Sheet src, int depotCount, Map<String, Long> depotMap, int i) throws Exception {
Map<Long, BigDecimal> stockMap = new HashMap<>();
for(int j = 1; j<= depotCount; j++) {
int col = 18+j;
if(col < src.getColumns()){
String depotName = ExcelUtils.getContent(src, 1, col); //获取仓库名称
if(StringUtil.isNotEmpty(depotName)) {
Long depotId = depotMap.get(depotName);
if(depotId!=0L){
String stockStr = ExcelUtils.getContent(src, i, col);
if(StringUtil.isNotEmpty(stockStr)) {
stockMap.put(depotId, parseBigDecimalEx(stockStr));
}
}
}
}
}
return stockMap;
}
/**
* 给商品新增或更新条码与价格相关信息
* @param materialExObj
* @param type
* @param defaultFlag
* @param mId
* @param user
*/
@Transactional(value = "transactionManager", rollbackFor = Exception.class) @Transactional(value = "transactionManager", rollbackFor = Exception.class)
public void changeMaterialExtend(Long mId, MaterialExtend materialExtend, Long meId) { public void insertOrUpdateMaterialExtend(JSONObject materialExObj, String type, String defaultFlag, Long mId, User user) {
if(meId==0L){ if(StringUtil.isExist(materialExObj.get(type))){
//校验条码是否存在 String basicStr = materialExObj.getString(type);
List<MaterialVo4Unit> materialList = getMaterialByBarCode(materialExtend.getBarCode()); MaterialExtend materialExtend = JSONObject.parseObject(basicStr, MaterialExtend.class);
if(materialList!=null && materialList.size()>0) { materialExtend.setMaterialId(mId);
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_EXISTS_CODE, materialExtend.setDefaultFlag(defaultFlag);
String.format(ExceptionConstants.MATERIAL_BARCODE_EXISTS_MSG, materialExtend.getBarCode())); materialExtend.setCreateTime(new Date());
materialExtend.setUpdateTime(System.currentTimeMillis());
materialExtend.setCreateSerial(user.getLoginName());
materialExtend.setUpdateSerial(user.getLoginName());
Long meId = materialExtendService.selectIdByMaterialIdAndDefaultFlag(mId, defaultFlag);
if(meId==0L){
materialExtendMapper.insertSelective(materialExtend);
} else {
materialExtend.setId(meId);
materialExtendMapper.updateByPrimaryKeySelective(materialExtend);
} }
materialExtendMapper.insertSelective(materialExtend);
} else {
//校验条码是否存在:检查除此商品之外是否还有这个条码,有则返回列表
List<MaterialVo4Unit> materialList = getMaterialByBarCodeAndWithOutMId(materialExtend.getBarCode(), mId);
if(materialList!=null && materialList.size()>0) {
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_EXISTS_CODE,
String.format(ExceptionConstants.MATERIAL_BARCODE_EXISTS_MSG, materialExtend.getBarCode()));
}
materialExtend.setId(meId);
materialExtendMapper.updateByPrimaryKeySelective(materialExtend);
} }
} }
@@ -700,14 +755,14 @@ public class MaterialService {
/** /**
* 根据条件返回产品列表 * 根据条件返回产品列表
* @param name * @param name
* @param standard
* @param model * @param model
* @param color * @param color
* @param standard
* @param unit * @param unit
* @param unitId * @param unitId
* @return * @return
*/ */
private List<Material> getMaterialListByParam(String name, String model, String color, String standard, String unit, Long unitId, String basicBarCode) throws Exception { private List<Material> getMaterialListByParam(String name, String standard, String model, String color, String unit, Long unitId, String basicBarCode) throws Exception {
List<Material> list = new ArrayList<>(); List<Material> list = new ArrayList<>();
MaterialExample example = new MaterialExample(); MaterialExample example = new MaterialExample();
MaterialExample.Criteria criteria = example.createCriteria(); MaterialExample.Criteria criteria = example.createCriteria();
@@ -730,10 +785,11 @@ public class MaterialService {
criteria.andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); criteria.andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
list = materialMapper.selectByExample(example); list = materialMapper.selectByExample(example);
if(list.size()==0) { if(list.size()==0) {
//如果通过组合条件没有查到商品,则通过条码再查一次 //如果通过组合条件没有查到商品,则通过条码再查一次
MaterialExtend materialExtend = materialExtendService.getInfoByBarCode(basicBarCode); MaterialExtend materialExtend = materialExtendService.getInfoByBarCode(basicBarCode);
if(materialExtend != null && materialExtend.getMaterialId()!=null) { if(materialExtend != null && materialExtend.getMaterialId()!=null) {
Material material = getMaterial(materialExtend.getMaterialId()); Material material = new Material();
material.setId(materialExtend.getMaterialId());
list.add(material); list.add(material);
} }
} }
@@ -762,19 +818,6 @@ public class MaterialService {
materialInitialStockMapper.insertSelective(materialInitialStock); //存入初始库存 materialInitialStockMapper.insertSelective(materialInitialStock); //存入初始库存
} }
/**
* 删除当前库存
* @param depotId
* @param mId
*/
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public void deleteCurrentStockByMaterialAndDepot(Long depotId, Long mId){
MaterialCurrentStockExample example = new MaterialCurrentStockExample();
example.createCriteria().andDepotIdEqualTo(depotId).andMaterialIdEqualTo(mId)
.andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
materialCurrentStockMapper.deleteByExample(example);
}
/** /**
* 写入当前库存 * 写入当前库存
* @param depotId * @param depotId
@@ -791,22 +834,25 @@ public class MaterialService {
} }
/** /**
* 新增或更新当前库存 * 批量删除初始库存
* @param depotId * @param mIdList
* @param mId
* @param stock
*/ */
@Transactional(value = "transactionManager", rollbackFor = Exception.class) @Transactional(value = "transactionManager", rollbackFor = Exception.class)
public void insertOrUpdateCurrentStockByMaterialAndDepot(Long depotId, Long mId, BigDecimal stock){ public void batchDeleteInitialStockByMaterialList(List<Long> mIdList){
Long billCount = depotItemService.getCountByMaterialAndDepot(mId, depotId); MaterialInitialStockExample example = new MaterialInitialStockExample();
if(billCount == 0) { example.createCriteria().andMaterialIdIn(mIdList);
deleteCurrentStockByMaterialAndDepot(depotId, mId); materialInitialStockMapper.deleteByExample(example);
if(stock!=null && stock.compareTo(BigDecimal.ZERO)!=0) { }
insertCurrentStockByMaterialAndDepot(depotId, mId, stock);
} /**
} else { * 批量删除当前库存
depotItemService.updateCurrentStockFun(mId, depotId); * @param mIdList
} */
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public void batchDeleteCurrentStockByMaterialList(List<Long> mIdList){
MaterialCurrentStockExample example = new MaterialCurrentStockExample();
example.createCriteria().andMaterialIdIn(mIdList);
materialCurrentStockMapper.deleteByExample(example);
} }
public List<MaterialVo4Unit> getMaterialEnableSerialNumberList(String q, Integer offset, Integer rows)throws Exception { public List<MaterialVo4Unit> getMaterialEnableSerialNumberList(String q, Integer offset, Integer rows)throws Exception {
@@ -898,7 +944,7 @@ public class MaterialService {
* @param depotId * @param depotId
* @return * @return
*/ */
public BigDecimal getCurrentStock(Long materialId, Long depotId) { public BigDecimal getCurrentStockByMaterialIdAndDepotId(Long materialId, Long depotId) {
BigDecimal stock = BigDecimal.ZERO; BigDecimal stock = BigDecimal.ZERO;
MaterialCurrentStockExample example = new MaterialCurrentStockExample(); MaterialCurrentStockExample example = new MaterialCurrentStockExample();
example.createCriteria().andMaterialIdEqualTo(materialId).andDepotIdEqualTo(depotId) example.createCriteria().andMaterialIdEqualTo(materialId).andDepotIdEqualTo(depotId)
@@ -912,6 +958,24 @@ public class MaterialService {
return stock; return stock;
} }
/**
* 根据商品列表获取当前库存Map
* @param list
* @return
*/
public Map<Long,BigDecimal> getCurrentStockMapByMaterialList(List<MaterialVo4Unit> list) {
Map<Long,BigDecimal> map = new HashMap<>();
List<Long> materialIdList = new ArrayList<>();
for(MaterialVo4Unit materialVo4Unit: list) {
materialIdList.add(materialVo4Unit.getId());
}
List<MaterialCurrentStock> mcsList = materialCurrentStockMapperEx.getCurrentStockMapByIdList(materialIdList);
for(MaterialCurrentStock materialCurrentStock: mcsList) {
map.put(materialCurrentStock.getMaterialId(), materialCurrentStock.getCurrentNumber());
}
return map;
}
/** /**
* 根据商品和仓库获取安全库存信息 * 根据商品和仓库获取安全库存信息
* @param materialId * @param materialId

View File

@@ -347,7 +347,7 @@ public class MaterialExtendService {
} }
@Transactional(value = "transactionManager", rollbackFor = Exception.class) @Transactional(value = "transactionManager", rollbackFor = Exception.class)
public Long selectIdByMaterialIdAndDefaultFlag(Long materialId, String defaultFlag)throws Exception { public Long selectIdByMaterialIdAndDefaultFlag(Long materialId, String defaultFlag) {
Long id = 0L; Long id = 0L;
MaterialExtendExample example = new MaterialExtendExample(); MaterialExtendExample example = new MaterialExtendExample();
example.createCriteria().andMaterialIdEqualTo(materialId).andDefaultFlagEqualTo(defaultFlag) example.createCriteria().andMaterialIdEqualTo(materialId).andDefaultFlagEqualTo(defaultFlag)

View File

@@ -8,6 +8,7 @@ import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.regex.Pattern;
/** /**
* @author jishenghua qq752718920 2018-10-7 15:26:27 * @author jishenghua qq752718920 2018-10-7 15:26:27
@@ -316,6 +317,24 @@ public class StringUtil {
} }
} }
/**
* 判断对象是否为数字(含小数)
* @param str
* @return
*/
public static boolean isPositiveBigDecimal(String str){
Pattern pattern = Pattern.compile("[0-9]*");
if(str.indexOf(".")>0){//判断是否有小数点
if(str.indexOf(".")==str.lastIndexOf(".") && str.split("\\.").length==2){ //判断是否只有一个小数点
return pattern.matcher(str.replace(".","")).matches();
}else {
return false;
}
}else {
return pattern.matcher(str).matches();
}
}
/** /**
* sql注入过滤保障sql的安全执行 * sql注入过滤保障sql的安全执行
* @param originStr * @param originStr

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jsh.erp.datasource.mappers.MaterialCurrentStockMapperEx">
<insert id="batchInsert" parameterType="java.util.List">
insert into jsh_material_current_stock (material_id, depot_id, current_number)
values
<foreach collection="list" item="item" separator=",">
(#{item.materialId,jdbcType=BIGINT}, #{item.depotId,jdbcType=BIGINT},#{item.currentNumber,jdbcType=DECIMAL})
</foreach >
</insert>
<select id="getCurrentStockMapByIdList" resultType="com.jsh.erp.datasource.entities.MaterialCurrentStock">
select material_id, sum(current_number) current_number from jsh_material_current_stock
where 1=1
and ifnull(delete_flag,'0') !='1'
and material_id in
<foreach collection="materialIdList" item="materialId" index="index" separator="," open="(" close=")">
#{materialId}
</foreach>
group by material_id
</select>
</mapper>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jsh.erp.datasource.mappers.MaterialInitialStockMapperEx">
<insert id="batchInsert" parameterType="java.util.List">
insert into jsh_material_initial_stock (material_id, depot_id, number)
values
<foreach collection="list" item="item" separator=",">
(#{item.materialId,jdbcType=BIGINT}, #{item.depotId,jdbcType=BIGINT},#{item.number,jdbcType=DECIMAL})
</foreach >
</insert>
</mapper>

View File

@@ -39,21 +39,9 @@
left JOIN jsh_material_category mc on m.category_id = mc.id and ifnull(mc.delete_Flag,'0') !='1' left JOIN jsh_material_category mc on m.category_id = mc.id and ifnull(mc.delete_Flag,'0') !='1'
where 1=1 where 1=1
and me.default_flag=1 and me.default_flag=1
<if test="barCode != null and barCode !=''"> <if test="materialParam != null and materialParam !=''">
<bind name="bindBarCode" value="'%'+barCode+'%'"/> <bind name="bindKey" value="'%'+materialParam+'%'"/>
and me.bar_code like #{bindBarCode} and (me.bar_code like #{bindKey} or m.name like #{bindKey} or m.standard like #{bindKey} or m.model like #{bindKey})
</if>
<if test="name != null and name !=''">
<bind name="bindName" value="'%'+name+'%'"/>
and m.name like #{bindName}
</if>
<if test="standard != null and standard !=''">
<bind name="bindStandard" value="'%'+standard+'%'"/>
and m.standard like #{bindStandard}
</if>
<if test="model != null and model !=''">
<bind name="bindModel" value="'%'+model+'%'"/>
and m.model like #{bindModel}
</if> </if>
<if test="color != null and color !=''"> <if test="color != null and color !=''">
<bind name="bindColor" value="'%'+color+'%'"/> <bind name="bindColor" value="'%'+color+'%'"/>
@@ -71,6 +59,9 @@
<if test="enableBatchNumber != null and enableBatchNumber !=''"> <if test="enableBatchNumber != null and enableBatchNumber !=''">
and m.enable_batch_number = #{enableBatchNumber} and m.enable_batch_number = #{enableBatchNumber}
</if> </if>
<if test="enabled != null">
and m.enabled = #{enabled}
</if>
<if test="remark != null and remark !=''"> <if test="remark != null and remark !=''">
<bind name="bindRemark" value="'%'+remark+'%'"/> <bind name="bindRemark" value="'%'+remark+'%'"/>
and m.remark like #{bindRemark} and m.remark like #{bindRemark}
@@ -97,21 +88,9 @@
left JOIN jsh_material_category mc on m.category_id = mc.id and ifnull(mc.delete_Flag,'0') !='1' left JOIN jsh_material_category mc on m.category_id = mc.id and ifnull(mc.delete_Flag,'0') !='1'
WHERE 1=1 WHERE 1=1
and me.default_flag=1 and me.default_flag=1
<if test="barCode != null and barCode !=''"> <if test="materialParam != null and materialParam !=''">
<bind name="bindBarCode" value="'%'+barCode+'%'"/> <bind name="bindKey" value="'%'+materialParam+'%'"/>
and me.bar_code like #{bindBarCode} and (me.bar_code like #{bindKey} or m.name like #{bindKey} or m.standard like #{bindKey} or m.model like #{bindKey})
</if>
<if test="name != null and name !=''">
<bind name="bindName" value="'%'+name+'%'"/>
and m.name like #{bindName}
</if>
<if test="standard != null and standard !=''">
<bind name="bindStandard" value="'%'+standard+'%'"/>
and m.standard like #{bindStandard}
</if>
<if test="model != null and model !=''">
<bind name="bindModel" value="'%'+model+'%'"/>
and m.model like #{bindModel}
</if> </if>
<if test="color != null and color !=''"> <if test="color != null and color !=''">
<bind name="bindColor" value="'%'+color+'%'"/> <bind name="bindColor" value="'%'+color+'%'"/>
@@ -129,6 +108,9 @@
<if test="enableBatchNumber != null and enableBatchNumber !=''"> <if test="enableBatchNumber != null and enableBatchNumber !=''">
and m.enable_batch_number = #{enableBatchNumber} and m.enable_batch_number = #{enableBatchNumber}
</if> </if>
<if test="enabled != null and enabled !=''">
and m.enabled = #{enabled}
</if>
<if test="remark != null and remark !=''"> <if test="remark != null and remark !=''">
<bind name="bindRemark" value="'%'+remark+'%'"/> <bind name="bindRemark" value="'%'+remark+'%'"/>
and m.remark like #{bindRemark} and m.remark like #{bindRemark}
@@ -142,6 +124,140 @@
and ifnull(m.delete_flag,'0') !='1' and ifnull(m.delete_flag,'0') !='1'
</select> </select>
<insert id="insertSelectiveEx" parameterType="com.jsh.erp.datasource.entities.Material" useGeneratedKeys="true" keyProperty="id">
insert into jsh_material
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="categoryId != null">
category_id,
</if>
<if test="name != null">
name,
</if>
<if test="mfrs != null">
mfrs,
</if>
<if test="model != null">
model,
</if>
<if test="standard != null">
standard,
</if>
<if test="color != null">
color,
</if>
<if test="unit != null">
unit,
</if>
<if test="remark != null">
remark,
</if>
<if test="imgName != null">
img_name,
</if>
<if test="unitId != null">
unit_id,
</if>
<if test="expiryNum != null">
expiry_num,
</if>
<if test="weight != null">
weight,
</if>
<if test="enabled != null">
enabled,
</if>
<if test="otherField1 != null">
other_field1,
</if>
<if test="otherField2 != null">
other_field2,
</if>
<if test="otherField3 != null">
other_field3,
</if>
<if test="enableSerialNumber != null">
enable_serial_number,
</if>
<if test="enableBatchNumber != null">
enable_batch_number,
</if>
<if test="tenantId != null">
tenant_id,
</if>
<if test="deleteFlag != null">
delete_flag,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=BIGINT},
</if>
<if test="categoryId != null">
#{categoryId,jdbcType=BIGINT},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="mfrs != null">
#{mfrs,jdbcType=VARCHAR},
</if>
<if test="model != null">
#{model,jdbcType=VARCHAR},
</if>
<if test="standard != null">
#{standard,jdbcType=VARCHAR},
</if>
<if test="color != null">
#{color,jdbcType=VARCHAR},
</if>
<if test="unit != null">
#{unit,jdbcType=VARCHAR},
</if>
<if test="remark != null">
#{remark,jdbcType=VARCHAR},
</if>
<if test="imgName != null">
#{imgName,jdbcType=VARCHAR},
</if>
<if test="unitId != null">
#{unitId,jdbcType=BIGINT},
</if>
<if test="expiryNum != null">
#{expiryNum,jdbcType=INTEGER},
</if>
<if test="weight != null">
#{weight,jdbcType=DECIMAL},
</if>
<if test="enabled != null">
#{enabled,jdbcType=BIT},
</if>
<if test="otherField1 != null">
#{otherField1,jdbcType=VARCHAR},
</if>
<if test="otherField2 != null">
#{otherField2,jdbcType=VARCHAR},
</if>
<if test="otherField3 != null">
#{otherField3,jdbcType=VARCHAR},
</if>
<if test="enableSerialNumber != null">
#{enableSerialNumber,jdbcType=VARCHAR},
</if>
<if test="enableBatchNumber != null">
#{enableBatchNumber,jdbcType=VARCHAR},
</if>
<if test="tenantId != null">
#{tenantId,jdbcType=BIGINT},
</if>
<if test="deleteFlag != null">
#{deleteFlag,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<select id="findUnitList" resultType="com.jsh.erp.datasource.entities.Unit"> <select id="findUnitList" resultType="com.jsh.erp.datasource.entities.Unit">
select u.* from jsh_unit u select u.* from jsh_unit u
left join jsh_material m on m.unit_id=u.id and ifnull(m.delete_flag,'0') !='1' left join jsh_material m on m.unit_id=u.id and ifnull(m.delete_flag,'0') !='1'