From a3f1040a2053d6331eed54ca3d04adcbcd5b51e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A3=E5=9C=A3=E5=8D=8E?= <752718920@qq.com> Date: Fri, 12 May 2023 00:47:49 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=E5=8D=95=E6=8D=AE=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9AExcel=E5=AF=BC=E5=85=A5=E6=98=8E?= =?UTF-8?q?=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/controller/DepotItemController.java | 84 +++++++++++++++++-- .../datasource/mappers/DepotItemMapperEx.java | 7 ++ .../service/depotItem/DepotItemService.java | 68 ++++++++++++++- .../mapper_xml/DepotItemMapperEx.xml | 27 ++++++ 4 files changed, 178 insertions(+), 8 deletions(-) diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java index d15510bf..24e546c9 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java @@ -10,31 +10,31 @@ import com.jsh.erp.datasource.vo.DepotItemVoBatchNumberList; import com.jsh.erp.exception.BusinessRunTimeException; import com.jsh.erp.service.depot.DepotService; import com.jsh.erp.service.depotHead.DepotHeadService; -import com.jsh.erp.service.materialExtend.MaterialExtendService; import com.jsh.erp.service.depotItem.DepotItemService; import com.jsh.erp.service.material.MaterialService; -import com.jsh.erp.service.redis.RedisService; import com.jsh.erp.service.role.RoleService; import com.jsh.erp.service.systemConfig.SystemConfigService; import com.jsh.erp.service.unit.UnitService; import com.jsh.erp.utils.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import jxl.Sheet; +import jxl.Workbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.File; import java.math.BigDecimal; -import java.text.DecimalFormat; -import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; -import static com.jsh.erp.utils.Tools.getCenternTime; /** * @author ji-sheng-hua 华夏erp @@ -860,4 +860,74 @@ public class DepotItemController { } return res; } + + /** + * Excel导入明细 + * @param file + * @param request + * @param response + * @return + */ + @PostMapping(value = "/importItemExcel") + public BaseResponseInfo importItemExcel(MultipartFile file, + @RequestParam(required = false, value = "prefixNo") String prefixNo, + HttpServletRequest request, HttpServletResponse response) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + Map data = new HashMap<>(); + String message = ""; + try { + String barCodes = ""; + Map> barCodeNumMap = new HashMap<>(); + //文件合法性校验 + Sheet src = null; + try { + Workbook workbook = Workbook.getWorkbook(file.getInputStream()); + src = workbook.getSheet(0); + } catch (Exception e) { + message = "导入文件不合法,请检查"; + data.put("message", message); + res.code = 400; + res.data = data; + } + int length = src.getRows(); + if(length>1000) { + message = "导入失败,明细不能超出1000条"; + res.code = 500; + data.put("message", message); + res.data = data; + } else { + for (int i = 2; i < length; i++) { + String barCode = ExcelUtils.getContent(src, i, 0); + String num = ExcelUtils.getContent(src, i, 2); + String unitPrice = ExcelUtils.getContent(src, i, 3); + String taxRate = ExcelUtils.getContent(src, i, 4); + String remark = ExcelUtils.getContent(src, i, 5); + Map materialMap = new HashMap<>(); + materialMap.put("num", num); + materialMap.put("unitPrice", unitPrice); + materialMap.put("taxRate", taxRate); + materialMap.put("remark", remark); + barCodeNumMap.put(barCode, materialMap); + barCodes += barCode + ","; + } + if (StringUtil.isNotEmpty(barCodes)) { + barCodes = barCodes.substring(0, barCodes.length() - 1); + } + JSONObject map = depotItemService.parseMapByExcelData(barCodes, barCodeNumMap, prefixNo); + if (map != null) { + res.code = 200; + } else { + res.code = 500; + } + res.data = map; + } + } catch (Exception e) { + e.printStackTrace(); + message = "导入失败,请检查表格内容"; + res.code = 500; + data.put("message", message); + res.data = data; + } + return res; + } } diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java index ff1aff3d..556542de 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java @@ -217,4 +217,11 @@ public interface DepotItemMapperEx { List getDepotItemByBatchNumber( @Param("batchNumber") String batchNumber); + + List getBillItemByParam( + @Param("barCodes") String barCodes); + + BigDecimal getCurrentStockByParam( + @Param("depotId") Long depotId, + @Param("mId") Long mId); } diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java index 7cf150a5..898ddad6 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java @@ -16,7 +16,6 @@ import com.jsh.erp.service.depotHead.DepotHeadService; import com.jsh.erp.service.log.LogService; import com.jsh.erp.service.material.MaterialService; import com.jsh.erp.service.materialExtend.MaterialExtendService; -import com.jsh.erp.service.role.RoleService; import com.jsh.erp.service.serialNumber.SerialNumberService; import com.jsh.erp.service.systemConfig.SystemConfigService; import com.jsh.erp.service.unit.UnitService; @@ -1114,4 +1113,71 @@ public class DepotItemService { public Long getCountByMaterialAndDepot(Long mId, Long depotId) { return depotItemMapperEx.getCountByMaterialAndDepot(mId, depotId); } + + public JSONObject parseMapByExcelData(String barCodes, Map> barCodeNumMap, String prefixNo) { + JSONObject map = new JSONObject(); + try { + JSONArray arr = new JSONArray(); + List list = depotItemMapperEx.getBillItemByParam(barCodes); + for (MaterialVo4Unit m: list) { + JSONObject item = new JSONObject(); + item.put("barCode", m.getmBarCode()); + item.put("name", m.getName()); + item.put("standard", m.getStandard()); + if(StringUtil.isNotEmpty(m.getModel())) { + item.put("model", m.getModel()); + } + if(StringUtil.isNotEmpty(m.getColor())) { + item.put("color", m.getColor()); + } + if(StringUtil.isNotEmpty(m.getSku())) { + item.put("sku", m.getSku()); + } + BigDecimal stock = depotItemMapperEx.getCurrentStockByParam(null, m.getId()); + item.put("stock", stock); + item.put("unit", m.getCommodityUnit()); + Map materialMap = barCodeNumMap.get(m.getmBarCode()); + BigDecimal operNumber = BigDecimal.ZERO; + BigDecimal unitPrice = BigDecimal.ZERO; + BigDecimal taxRate = BigDecimal.ZERO; + if(materialMap.get("num")!=null) { + operNumber = new BigDecimal(materialMap.get("num")); + } + if(StringUtil.isNotEmpty(materialMap.get("unitPrice"))) { + unitPrice = new BigDecimal(materialMap.get("unitPrice")); + } else { + if("CGDD".equals(prefixNo)) { + unitPrice = m.getPurchaseDecimal(); + } else if("XSDD".equals(prefixNo)) { + unitPrice = m.getWholesaleDecimal(); + } + } + if(materialMap.get("taxRate")!=null) { + taxRate = new BigDecimal(materialMap.get("taxRate")); + } + String remark = materialMap.get("remark"); + item.put("operNumber", operNumber); + item.put("unitPrice", unitPrice); + BigDecimal allPrice = BigDecimal.ZERO; + if(unitPrice!=null && unitPrice.compareTo(BigDecimal.ZERO)!=0) { + allPrice = unitPrice.multiply(operNumber); + } + BigDecimal taxMoney = BigDecimal.ZERO; + if(taxRate.compareTo(BigDecimal.ZERO) != 0) { + taxMoney = taxRate.multiply(allPrice).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP); + } + BigDecimal taxLastMoney = allPrice.add(taxMoney); + item.put("allPrice", allPrice); + item.put("taxRate", taxRate); + item.put("taxMoney", taxMoney); + item.put("taxLastMoney", taxLastMoney); + item.put("remark", remark); + arr.add(item); + } + map.put("rows", arr); + } catch (Exception e) { + e.printStackTrace(); + } + return map; + } } diff --git a/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml index 5117a63d..1614a743 100644 --- a/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml +++ b/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml @@ -924,4 +924,31 @@ and di.batch_number = #{batchNumber} and dh.type = '入库' + + + +