From 2930dba1ab0484c7b85ae463e7af68a2a73f0723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A3=E5=9C=A3=E5=8D=8E?= <752718920@qq.com> Date: Sun, 21 May 2023 23:33:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E5=BE=97=E5=AF=BC=E5=85=A5=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=92=8C=E5=A4=9A=E5=B1=9E=E6=80=A7=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/controller/MaterialController.java | 6 +- .../datasource/mappers/MaterialMapperEx.java | 1 + .../erp/service/material/MaterialService.java | 99 +++++++++++++------ .../materialExtend/MaterialExtendService.java | 21 ++++ .../resources/mapper_xml/MaterialMapperEx.xml | 11 ++- 5 files changed, 104 insertions(+), 34 deletions(-) diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java index 6b7aacd8..8d01f939 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java @@ -339,6 +339,7 @@ public class MaterialController { public void exportExcel(@RequestParam(value = "categoryId", required = false) String categoryId, @RequestParam(value = "materialParam", required = false) String materialParam, @RequestParam(value = "color", required = false) String color, + @RequestParam(value = "materialOther", required = false) String materialOther, @RequestParam(value = "weight", required = false) String weight, @RequestParam(value = "expiryNum", required = false) String expiryNum, @RequestParam(value = "enabled", required = false) String enabled, @@ -348,9 +349,10 @@ public class MaterialController { @RequestParam(value = "mpList", required = false) String mpList, HttpServletRequest request, HttpServletResponse response) { try { - materialService.exportExcel(StringUtil.toNull(categoryId), StringUtil.toNull(materialParam), StringUtil.toNull(color), StringUtil.toNull(weight), + materialService.exportExcel(StringUtil.toNull(categoryId), StringUtil.toNull(materialParam), StringUtil.toNull(color), + StringUtil.toNull(materialOther), StringUtil.toNull(weight), StringUtil.toNull(expiryNum), StringUtil.toNull(enabled), StringUtil.toNull(enableSerialNumber), - StringUtil.toNull(enableBatchNumber), StringUtil.toNull(remark), mpList, response); + StringUtil.toNull(enableBatchNumber), StringUtil.toNull(remark), response); } catch (Exception e) { e.printStackTrace(); } diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java index 6e602bc5..16575f56 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java @@ -70,6 +70,7 @@ public interface MaterialMapperEx { List exportExcel( @Param("materialParam") String materialParam, @Param("color") String color, + @Param("materialOther") String materialOther, @Param("weight") String weight, @Param("expiryNum") String expiryNum, @Param("enabled") String enabled, diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialService.java index c0597fc0..67b8c493 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialService.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialService.java @@ -7,6 +7,7 @@ import com.jsh.erp.constants.BusinessConstants; import com.jsh.erp.constants.ExceptionConstants; import com.jsh.erp.datasource.entities.*; import com.jsh.erp.datasource.mappers.*; +import com.jsh.erp.datasource.vo.MaterialExtendVo4List; import com.jsh.erp.datasource.vo.MaterialVoSearch; import com.jsh.erp.exception.BusinessRunTimeException; import com.jsh.erp.exception.JshException; @@ -461,15 +462,15 @@ public class MaterialService { return result; } - public void exportExcel(String categoryId, String materialParam, String color, String weight, + public void exportExcel(String categoryId, String materialParam, String color, String materialOther, String weight, String expiryNum, String enabled, String enableSerialNumber, String enableBatchNumber, - String remark, String mpList, HttpServletResponse response)throws Exception { + String remark, HttpServletResponse response)throws Exception { List idList = new ArrayList<>(); if(StringUtil.isNotEmpty(categoryId)){ idList = getListByParentId(Long.parseLong(categoryId)); } //查询商品主条码相关列表 - List dataList = materialMapperEx.exportExcel(materialParam, color, weight, expiryNum, enabled, enableSerialNumber, + List dataList = materialMapperEx.exportExcel(materialParam, color, materialOther, weight, expiryNum, enabled, enableSerialNumber, enableBatchNumber, remark, idList); //查询商品副条码相关列表 Map otherMaterialMap = new HashMap<>(); @@ -477,7 +478,8 @@ public class MaterialService { for(MaterialExtend me: otherDataList) { otherMaterialMap.put(me.getMaterialId(), me); } - String nameStr = "名称*,规格,型号,颜色,类别,基础重量(kg),保质期(天),基本单位*,副单位,基本条码*,副条码,比例,采购价,零售价,销售价,最低售价,状态*,序列号,批号,备注"; + String nameStr = "名称*,规格,型号,颜色,类别,基础重量(kg),保质期(天),基本单位*,副单位,基本条码*,副条码,比例,多属性," + + "采购价,零售价,销售价,最低售价,状态*,序列号,批号,仓位货架,制造商,自定义1,自定义2,自定义3,备注"; List nameList = StringUtil.strToStringList(nameStr); //仓库列表 List depotList = depotService.getAllList(); @@ -512,16 +514,22 @@ public class MaterialService { objs[9] = m.getmBarCode(); objs[10] = otherMaterialMap.get(m.getId()) == null ? "" : otherMaterialMap.get(m.getId()).getBarCode(); objs[11] = m.getRatio() == null ? "" : m.getRatio().toString(); - objs[12] = m.getPurchaseDecimal() == null ? "" : m.getPurchaseDecimal().setScale(2, BigDecimal.ROUND_HALF_UP).toString(); - objs[13] = m.getCommodityDecimal() == null ? "" : m.getCommodityDecimal().setScale(2, BigDecimal.ROUND_HALF_UP).toString(); - objs[14] = m.getWholesaleDecimal() == null ? "" : m.getWholesaleDecimal().setScale(2, BigDecimal.ROUND_HALF_UP).toString(); - objs[15] = m.getLowDecimal() == null ? "" : m.getLowDecimal().setScale(2, BigDecimal.ROUND_HALF_UP).toString(); - objs[16] = m.getEnabled() ? "1" : "0"; - objs[17] = m.getEnableSerialNumber(); - objs[18] = m.getEnableBatchNumber(); - objs[19] = m.getRemark(); + objs[12] = m.getSku(); + objs[13] = m.getPurchaseDecimal() == null ? "" : m.getPurchaseDecimal().setScale(2, BigDecimal.ROUND_HALF_UP).toString(); + objs[14] = m.getCommodityDecimal() == null ? "" : m.getCommodityDecimal().setScale(2, BigDecimal.ROUND_HALF_UP).toString(); + objs[15] = m.getWholesaleDecimal() == null ? "" : m.getWholesaleDecimal().setScale(2, BigDecimal.ROUND_HALF_UP).toString(); + objs[16] = m.getLowDecimal() == null ? "" : m.getLowDecimal().setScale(2, BigDecimal.ROUND_HALF_UP).toString(); + objs[17] = m.getEnabled() ? "1" : "0"; + objs[18] = m.getEnableSerialNumber(); + objs[19] = m.getEnableBatchNumber(); + objs[20] = m.getPosition(); + objs[21] = m.getMfrs(); + objs[22] = m.getOtherField1(); + objs[23] = m.getOtherField2(); + objs[24] = m.getOtherField3(); + objs[25] = m.getRemark(); //仓库期初库存 - int i = 20; + int i = 26; for(Depot depot: depotList) { BigDecimal number = misMap.get(m.getId() + "_" + depot.getId()); objs[i] = number == null ? "0" : number.setScale(2, BigDecimal.ROUND_HALF_UP).toString(); @@ -596,8 +604,6 @@ public class MaterialService { throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_UNIT_EMPTY_CODE, String.format(ExceptionConstants.MATERIAL_UNIT_EMPTY_MSG, i+1)); } - // 批量校验excel中有无重复商品,是指名称、规格、型号、颜色、单位 - batchCheckExistMaterialListByParam(mList, name, standard, model, color, unit); MaterialWithInitStock m = new MaterialWithInitStock(); m.setName(name); m.setStandard(standard); @@ -627,14 +633,25 @@ public class MaterialService { 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); //批号 - String remark = ExcelUtils.getContent(src, i, 19); //备注 + String sku = ExcelUtils.getContent(src, i, 12); //多属性 + String purchaseDecimal = ExcelUtils.getContent(src, i, 13); //采购价 + String commodityDecimal = ExcelUtils.getContent(src, i, 14); //零售价 + String wholesaleDecimal = ExcelUtils.getContent(src, i, 15); //销售价 + String lowDecimal = ExcelUtils.getContent(src, i, 16); //最低售价 + String enabled = ExcelUtils.getContent(src, i, 17); //状态 + String enableSerialNumber = ExcelUtils.getContent(src, i, 18); //序列号 + String enableBatchNumber = ExcelUtils.getContent(src, i, 19); //批号 + String position = ExcelUtils.getContent(src, i, 20); //仓位货架 + String mfrs = ExcelUtils.getContent(src, i, 21); //制造商 + String otherField1 = ExcelUtils.getContent(src, i, 22); //自定义1 + String otherField2 = ExcelUtils.getContent(src, i, 23); //自定义2 + String otherField3 = ExcelUtils.getContent(src, i, 24); //自定义3 + String remark = ExcelUtils.getContent(src, i, 25); //备注 + m.setPosition(StringUtil.isNotEmpty(position)?position:null); + m.setMfrs(StringUtil.isNotEmpty(mfrs)?mfrs:null); + m.setOtherField1(StringUtil.isNotEmpty(otherField1)?otherField1:null); + m.setOtherField2(StringUtil.isNotEmpty(otherField2)?otherField2:null); + m.setOtherField3(StringUtil.isNotEmpty(otherField3)?otherField3:null); m.setRemark(remark); //状态格式错误 if(!"1".equals(enabled) && !"0".equals(enabled)) { @@ -651,12 +668,15 @@ public class MaterialService { throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_LENGTH_ERROR_CODE, String.format(ExceptionConstants.MATERIAL_BARCODE_LENGTH_ERROR_MSG, manyBarCode)); } + // 批量校验excel中有无重复商品,是指名称、规格、型号、颜色、单位、多属性 + batchCheckExistMaterialListByParam(mList, name, standard, model, color, unit, sku); //批量校验excel中有无重复条码 batchCheckExistBarCodeByParam(mList, barCode, manyBarCode); JSONObject materialExObj = new JSONObject(); JSONObject basicObj = new JSONObject(); basicObj.put("barCode", barCode); basicObj.put("commodityUnit", unit); + basicObj.put("sku", sku); basicObj.put("purchaseDecimal", purchaseDecimal); basicObj.put("commodityDecimal", commodityDecimal); basicObj.put("wholesaleDecimal", wholesaleDecimal); @@ -816,7 +836,7 @@ public class MaterialService { private Map getStockMapCache(Sheet src, int depotCount, Map depotMap, int i) throws Exception { Map stockMap = new HashMap<>(); for(int j = 1; j<= depotCount; j++) { - int col = 19 + j; + int col = 25 + j; if(col < src.getColumns()){ String depotName = ExcelUtils.getContent(src, 1, col); //获取仓库名称 if(StringUtil.isNotEmpty(depotName)) { @@ -838,14 +858,23 @@ public class MaterialService { * @param mList */ public void batchCheckExistMaterialListByParam(List mList, String name, String standard, - String model, String color, String unit) { + String model, String color, String unit, String sku) { for(MaterialWithInitStock material: mList){ + String materialSku = ""; + JSONObject materialExObj = material.getMaterialExObj(); + if(materialExObj!=null && materialExObj.get("basic")!=null) { + JSONObject basicObj = materialExObj.getJSONObject("basic"); + if(basicObj!=null && materialExObj.get("sku")!=null) { + materialSku = basicObj.getString("sku"); + } + } if(name.equals(material.getName()) && standard.equals(material.getStandard()) && model.equals(material.getModel()) && color.equals(material.getColor()) && - unit.equals(material.getUnit())){ - String info = name + "-" + standard + "-" + model + "-" + color + "-" + unit; + unit.equals(material.getUnit()) && + sku.equals(materialSku)) { + String info = name + "-" + standard + "-" + model + "-" + color + "-" + unit + "-" + sku; throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_EXCEL_IMPORT_EXIST_CODE, String.format(ExceptionConstants.MATERIAL_EXCEL_IMPORT_EXIST_MSG, info)); } @@ -892,7 +921,7 @@ public class MaterialService { * @param user */ @Transactional(value = "transactionManager", rollbackFor = Exception.class) - public void insertOrUpdateMaterialExtend(JSONObject materialExObj, String type, String defaultFlag, Long mId, User user) { + public void insertOrUpdateMaterialExtend(JSONObject materialExObj, String type, String defaultFlag, Long mId, User user) throws Exception { if(StringUtil.isExist(materialExObj.get(type))){ String basicStr = materialExObj.getString(type); MaterialExtend materialExtend = JSONObject.parseObject(basicStr, MaterialExtend.class); @@ -902,7 +931,19 @@ public class MaterialService { materialExtend.setUpdateTime(System.currentTimeMillis()); materialExtend.setCreateSerial(user.getLoginName()); materialExtend.setUpdateSerial(user.getLoginName()); - Long meId = materialExtendService.selectIdByMaterialIdAndDefaultFlag(mId, defaultFlag); + Long meId = 0L; + if(StringUtil.isNotEmpty(materialExtend.getSku())){ + //含sku的商品,特殊逻辑 + meId = materialExtendService.selectIdByMaterialIdAndBarCode(mId, materialExtend.getBarCode()); + List meList = materialExtendService.getListByMaterialIdAndDefaultFlagAndBarCode(mId, "1", materialExtend.getBarCode()); + if(meList.size() == 0) { + materialExtend.setDefaultFlag("1"); + } else { + materialExtend.setDefaultFlag("0"); + } + } else { + meId = materialExtendService.selectIdByMaterialIdAndDefaultFlag(mId, defaultFlag); + } if(meId==0L){ materialExtendMapper.insertSelective(materialExtend); } else { diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendService.java index a09907f5..073a1a03 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendService.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendService.java @@ -354,6 +354,27 @@ public class MaterialExtendService { return id; } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public Long selectIdByMaterialIdAndBarCode(Long materialId, String barCode) { + Long id = 0L; + MaterialExtendExample example = new MaterialExtendExample(); + example.createCriteria().andMaterialIdEqualTo(materialId).andBarCodeEqualTo(barCode) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialExtendMapper.selectByExample(example); + if(list!=null && list.size()>0) { + id = list.get(0).getId(); + } + return id; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public List getListByMaterialIdAndDefaultFlagAndBarCode(Long materialId, String defaultFlag, String barCode) { + MaterialExtendExample example = new MaterialExtendExample(); + example.createCriteria().andMaterialIdEqualTo(materialId).andDefaultFlagEqualTo(defaultFlag).andBarCodeNotEqualTo(barCode) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + return materialExtendMapper.selectByExample(example); + } + public MaterialExtend getInfoByBarCode(String barCode)throws Exception { MaterialExtend materialExtend = new MaterialExtend(); MaterialExtendExample example = new MaterialExtendExample(); diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml index 35abedcb..4b17add5 100644 --- a/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml @@ -368,13 +368,13 @@