Browse Source

促销管理经销商授权增加导入功能

hu 1 year ago
parent
commit
654198cc39

+ 8 - 0
src/custom/restcontroller/R.java

@@ -5589,6 +5589,14 @@ public class R {
         public static class v1 {
         }
     }
+    public static class ID20240828102803 {
+        public static class v1 {
+        }
+    }
+    public static class ID20240828102903 {
+        public static class v1 {
+        }
+    }
 
 }
 

+ 259 - 0
src/custom/restcontroller/webmanage/sale/promotion/ExportAuthExcel.java

@@ -0,0 +1,259 @@
+package restcontroller.webmanage.sale.promotion;
+
+
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.*;
+
+import java.awt.*;
+
+public class ExportAuthExcel {
+    /**
+     * 设置标题单元样式
+     *
+     * @param workbook
+     * @return
+     */
+    public static XSSFCellStyle createTitleCellStyle1(XSSFWorkbook workbook) {
+        XSSFCellStyle cellStyle = workbook.createCellStyle();
+        XSSFFont font = workbook.createFont();
+        font.setFontHeightInPoints((short) 12);
+        font.setColor(IndexedColors.RED.getIndex());
+        font.setFontName("微软雅黑");// 设置标题字体
+        cellStyle.setFont(font);
+        cellStyle.setWrapText(true);  //自动换行
+        cellStyle = workbook.createCellStyle();
+        cellStyle.setFont(font);// 设置列标题样式
+        XSSFColor colorGrey = new XSSFColor(new Color(217, 225, 242));
+        cellStyle.setFillForegroundColor(colorGrey);
+        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        cellStyle.setAlignment(HorizontalAlignment.LEFT); // 居左
+        return cellStyle;
+    }
+
+    /**
+     * 设置中文提示信息样式
+     *
+     * @param workbook
+     * @return
+     */
+    public static XSSFCellStyle createTitleCellStyle2(XSSFWorkbook workbook) {
+        XSSFCellStyle cellStyle = workbook.createCellStyle();
+        XSSFFont font = workbook.createFont();
+        font.setFontHeightInPoints((short) 12);
+        font.setColor(IndexedColors.WHITE.getIndex());
+        font.setFontName("微软雅黑");// 设置标题字体
+        cellStyle.setFont(font);
+        cellStyle.setWrapText(true);  //自动换行
+        cellStyle = workbook.createCellStyle();
+        cellStyle.setFont(font);// 设置列标题样式
+        XSSFColor colorBlue = new XSSFColor(new Color(48, 84, 150));
+        cellStyle.setFillForegroundColor(colorBlue);
+        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        cellStyle.setAlignment(HorizontalAlignment.LEFT); // 居左
+        return cellStyle;
+    }
+
+    /**
+     * 设置中文提示信息样式
+     *
+     * @param workbook
+     * @return
+     */
+    public static XSSFCellStyle createTitleCellStyle3(XSSFWorkbook workbook) {
+        XSSFCellStyle cellStyle = workbook.createCellStyle();
+        XSSFFont font = workbook.createFont();
+        font.setFontHeightInPoints((short) 12);
+        font.setColor(IndexedColors.WHITE.getIndex());
+        font.setFontName("微软雅黑");// 设置标题字体
+        cellStyle.setFont(font);
+        cellStyle.setWrapText(true);  //自动换行
+        cellStyle = workbook.createCellStyle();
+        cellStyle.setFont(font);// 设置列标题样式
+        XSSFColor colorBlue = new XSSFColor(new Color(48, 84, 150));
+        cellStyle.setFillForegroundColor(colorBlue);
+        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        cellStyle.setAlignment(HorizontalAlignment.CENTER); // 居左
+        return cellStyle;
+    }
+
+    /**
+     * 设置正文单元样式
+     *
+     * @param workbook
+     * @return
+     */
+    public static XSSFCellStyle createBodyCellStyle(XSSFWorkbook workbook) {
+        XSSFCellStyle cellStyle = workbook.createCellStyle();
+        XSSFFont font = workbook.createFont();
+        font.setFontHeightInPoints((short) 12);
+        font.setFontName("微软雅黑");// 设置标题字体
+        // font.setFontName(HSSFFont.FONT_ARIAL);// 设置标题字体
+        cellStyle.setFont(font);
+        cellStyle = workbook.createCellStyle();
+        cellStyle.setAlignment(HorizontalAlignment.LEFT); // 居左
+        return cellStyle;
+    }
+
+    /**
+     * 2022-07-14 17:41:39
+     * 设置表格宽度(导入模板)
+     **/
+    public static void setBatchDetailSheetColumn1(XSSFSheet sheet) {
+        sheet.setDefaultRowHeight((short) 600);
+        sheet.setColumnWidth((short) 0, (short) 5500);
+        sheet.setColumnWidth((short) 1, (short) 5500);
+        sheet.setColumnWidth((short) 2, (short) 5500);
+
+    }
+
+
+    /**
+     * 2022-07-14 17:41:39
+     * 设置表格宽度(返回错误Excel的样式)
+     **/
+    public static void setBatchDetailSheetColumn2(XSSFSheet sheet) {
+        sheet.setDefaultRowHeight((short) 600);
+        sheet.setColumnWidth((short) 0, (short) 5500);
+        sheet.setColumnWidth((short) 1, (short) 5500);
+        sheet.setColumnWidth((short) 2, (short) 5500);
+        sheet.setColumnWidth((short) 3, (short) 5500);
+    }
+
+    /**
+     * 2022-07-14 17:42:03
+     * 设置表头
+     * cellStyle1 中文提示信息样式
+     * cellStyle2 标题提示信息样式
+     * cellStyle3 正文提示信息样式
+     **/
+    public static void batchDetail(XSSFSheet sheet, XSSFCellStyle cellStyle1, XSSFCellStyle cellStyle2, XSSFCellStyle cellStyle3, XSSFCellStyle cellStyle4, XSSFWorkbook workbook) {
+
+        XSSFRow row = null;
+        XSSFCell cell = null;
+
+        cellStyle1.setBorderBottom(BorderStyle.THIN); //下边框
+        cellStyle1.setBorderLeft(BorderStyle.THIN);//左边框
+        cellStyle1.setBorderTop(BorderStyle.THIN);//上边框
+        cellStyle1.setBorderRight(BorderStyle.THIN);//右边框
+        cellStyle1.setWrapText(true);
+
+        cellStyle2.setBorderBottom(BorderStyle.THIN); //下边框
+        cellStyle2.setBorderLeft(BorderStyle.THIN);//左边框
+        cellStyle2.setBorderTop(BorderStyle.THIN);//上边框
+        cellStyle2.setBorderRight(BorderStyle.THIN);//右边框
+        cellStyle2.setWrapText(true);
+
+        /*第一行*/
+        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
+
+        /*第一行塞值*/
+        row = sheet.createRow(0);
+        cell = row.createCell(0);// ID
+        cell.setCellStyle(cellStyle4);
+        cell.setCellValue("促销经销商导入");
+        /*第二行*/
+        sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 2));
+        /*第二行塞值*/
+        row = sheet.createRow(1);
+        cell = row.createCell(0);// ID
+        cell.setCellStyle(cellStyle1);
+        cell.setCellValue("注意:①请按照以下示例填写促销经销商;②经销商最多不超过5000行;③经销商导入前,请记得删除示例行!");
+        /*第三行塞值*/
+        row = sheet.createRow(2);
+
+        cell = row.createCell(0);
+        cell.setCellStyle(cellStyle2);
+        cell.setCellValue("经销商编码(必填)");
+
+        cell = row.createCell(1);
+        cell.setCellStyle(cellStyle2);
+        cell.setCellValue("是否限购(注:限购填1非限购填0)");
+
+        cell = row.createCell(2);
+        cell.setCellStyle(cellStyle2);
+        cell.setCellValue("限购金额(注:限购时必填)");
+
+
+        /*第四行塞值*/
+        row = sheet.createRow(3);
+
+        cell = row.createCell(0);
+        cell.setCellStyle(cellStyle3);
+        cell.setCellValue("12345");
+
+        cell = row.createCell(1);
+        cell.setCellStyle(cellStyle3);
+        cell.setCellValue("0");
+
+        cell = row.createCell(2);
+        cell.setCellStyle(cellStyle3);
+        cell.setCellValue("0");
+
+
+    }
+
+
+    /**
+     * 2022-07-14 17:42:03
+     * 设置表头
+     **/
+    public static void batchDetailErr(XSSFSheet sheet, XSSFCellStyle cellStyle1, XSSFCellStyle cellStyle2, XSSFCellStyle cellStyle3, XSSFWorkbook workbook) {
+//        HSSFCellStyle bcs = ExportExcel.createTitleCellStyle1(workbook);
+//        bcs.setBorderBottom(BorderStyle.THIN); //下边框
+//        bcs.setBorderLeft(BorderStyle.THIN);//左边框
+//        bcs.setBorderTop(BorderStyle.THIN);//上边框
+//        bcs.setBorderRight(BorderStyle.THIN);//右边框
+//        bcs.setWrapText(true);
+
+
+        XSSFRow row = null;
+        XSSFCell cell = null;
+
+        cellStyle1.setBorderBottom(BorderStyle.THIN); //下边框
+        cellStyle1.setBorderLeft(BorderStyle.THIN);//左边框
+        cellStyle1.setBorderTop(BorderStyle.THIN);//上边框
+        cellStyle1.setBorderRight(BorderStyle.THIN);//右边框
+        cellStyle1.setWrapText(true);
+
+
+
+        /*第一行*/
+        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
+
+        /*第一行塞值*/
+        row = sheet.createRow(0);
+        cell = row.createCell(0);// ID
+        cell.setCellStyle(cellStyle3);
+        cell.setCellValue("促销经销商导入");
+        /*第二行*/
+        sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 3));
+        /*第二行塞值*/
+        row = sheet.createRow(1);
+        cell = row.createCell(0);// ID
+        cell.setCellStyle(cellStyle1);
+        cell.setCellValue("注意:①请按照以下示例填写经销商;②经销商最多不超过5000行;③经销商导入前,请记得删除示例行!");
+        /*第三行塞值*/
+        row = sheet.createRow(2);
+
+        cell = row.createCell(0);
+        cell.setCellStyle(cellStyle2);
+        cell.setCellValue("产品编码(必填)");
+
+        cell = row.createCell(1);
+        cell.setCellStyle(cellStyle2);
+        cell.setCellValue("是否限购(注:限购填1非限购填0)");
+
+        cell = row.createCell(2);
+        cell.setCellStyle(cellStyle2);
+        cell.setCellValue("限购金额(注:限购时必填)");
+
+        cell = row.createCell(3);
+        cell.setCellStyle(cellStyle2);
+        cell.setCellValue("错误信息");
+
+    }
+}

+ 233 - 3
src/custom/restcontroller/webmanage/sale/promotion/promotionAuth.java

@@ -1,6 +1,7 @@
 package restcontroller.webmanage.sale.promotion;
 
 import beans.data.BatchDeleteErr;
+import beans.datacontrllog.DataContrlLog;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import common.Controller;
@@ -8,13 +9,17 @@ import common.YosException;
 import common.annotation.API;
 import common.annotation.CACHEING;
 import common.annotation.CACHEING_CLEAN;
-import common.data.Rows;
-import common.data.RowsMap;
-import common.data.SQLFactory;
+import common.data.*;
+import org.apache.commons.lang.StringUtils;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.DataFormat;
+import org.apache.poi.xssf.usermodel.*;
 import restcontroller.R;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 
 public class promotionAuth extends Controller {
 
@@ -161,4 +166,229 @@ public class promotionAuth extends Controller {
         return batchDeleteErr.getReturnObject().toString();
     }
 
+    @API(title = "促销经销商导入模板",apiversion = R.ID20240828102803.v1.class)
+    public String downloadPromotionExcel() throws YosException {
+        ExcelFactory excelFactory = new ExcelFactory("促销经销商导入");
+
+        XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
+        XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
+
+        CellStyle style = xssfFWorkbook.createCellStyle();
+        // 设置为文本格式,防止身份证号变成科学计数法
+        DataFormat format = xssfFWorkbook.createDataFormat();
+        style.setDataFormat(format.getFormat("@"));
+        // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
+        sheet.setDefaultColumnStyle(0, style);
+        ExportAuthExcel.setBatchDetailSheetColumn1(sheet);// 设置工作薄列宽
+        XSSFCellStyle titleCellStyle1 = ExportAuthExcel.createTitleCellStyle1(xssfFWorkbook);
+        XSSFCellStyle titleCellStyle2 = ExportAuthExcel.createTitleCellStyle2(xssfFWorkbook);
+        XSSFCellStyle titleCellStyle3 = ExportAuthExcel.createBodyCellStyle(xssfFWorkbook);
+        XSSFCellStyle titleCellStyle4 = ExportAuthExcel.createTitleCellStyle3(xssfFWorkbook);
+        ExportAuthExcel.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3,titleCellStyle4, xssfFWorkbook);// 写入标题
+
+        Rows aa = uploadExcelToObs(excelFactory);
+        String url = "";
+        if (!aa.isEmpty()) {
+            url = aa.get(0).getString("url");
+        }
+        return getSucReturnObject().setData(url).toString();
+    }
+
+    @API(title = "促销活动授权经销商导入",apiversion = R.ID20240828102903.v1.class)
+    @CACHEING_CLEAN(apiversions = {promotionAuth.class})
+    public String uploadPromotionAuth() throws YosException {
+
+        Long sa_promotionid = content.getLong("sa_promotionid");
+        Rows promotion = dbConnect.runSqlQuery("select status from sa_promotion where siteid='" + siteid + "' and sa_promotionid=" + sa_promotionid);
+        if (promotion.isEmpty()) {
+            return getErrReturnObject().setErrMsg("无效促销活动").toString();
+        } else if (!promotion.get(0).getString("status").equals("新建")) {
+            return getErrReturnObject().setErrMsg("非新建状态促销活动无法导入").toString();
+        }
+
+        ExcelFactory e;
+        try {
+
+            // 华为云
+            e = getPostExcelFactory(content.getLong("attachmentid"));
+            // 本地
+            //e = getPostExcelFactory();
+
+            ArrayList<String> keys = new ArrayList<>();
+            ArrayList<String> sqllist = new ArrayList<>();
+            keys.add("agentnum");
+            keys.add("islimit");
+            keys.add("limitamount");
+            HashMap<String, CellType> cellMap = new HashMap<>();
+            cellMap.put("agentnum", CellType.STRING);
+            cellMap.put("islimit", CellType.STRING);
+            cellMap.put("limitamount", CellType.STRING);
+
+            int i = 0;
+            Rows rows = e.getSheetRows(0, keys,cellMap, 3);
+
+            boolean iserr = false;
+            Rows rowserr = new Rows();
+            Rows rowssuc = new Rows();
+            ArrayList<String> agentList = rows.toArrayList("agentnum");
+            SQLFactory sqlFactory = new SQLFactory(this, "经销商合作企业查询");
+            sqlFactory.addParameter("siteid", siteid);
+            sqlFactory.addParameter("sa_promotionid", 0);
+            sqlFactory.addParameter_SQL("where", " 1=1 ");
+            RowsMap agentRowsMap = dbConnect.runSqlQuery(sqlFactory.getSQL()).toRowsMap("agentnum");
+            ArrayList<String> inAgentList = dbConnect.runSqlQuery("select t2.agentnum from sa_promotion_auth t1 inner join sa_agents t2 on t1.siteid=t2.siteid and t1.sys_enterpriseid=t2.sys_enterpriseid where t1.siteid='" + siteid + "' and t1.sa_promotionid=" + sa_promotionid).toArrayList("agentnum");
+            for (Row row : rows) {
+                String agentnum = row.getString("agentnum");
+                String islimit = row.getString("islimit");
+                String limitamount = row.getString("limitamount");
+                if (StringUtils.isEmpty(agentnum)) {
+                    iserr = true;
+                    row.put("msg", "经销商编码不能为空");
+                    rowserr.add(row);
+                    continue;
+                }
+                if (!agentRowsMap.containsKey(agentnum)) {
+                    iserr = true;
+                    row.put("msg", "经销商不存在");
+                    rowserr.add(row);
+                    continue;
+                }
+                if(inAgentList.contains(agentnum)){
+                    iserr = true;
+                    row.put("msg", "经销商已存在促销活动授权范围内");
+                    rowserr.add(row);
+                    continue;
+                }
+                if(!isNumeric(limitamount) && StringUtils.isNotBlank(limitamount)){
+                    iserr = true;
+                    row.put("msg", "限购金额不为数字格式,请检查");
+                    rowserr.add(row);
+                    continue;
+                }
+                if(!isNumeric(islimit)){
+                    iserr = true;
+                    row.put("msg", "是否限购不为数字格式,请检查");
+                    rowserr.add(row);
+                    continue;
+                }else{
+                    if(islimit.equals("1")){
+                        if(Double.valueOf(StringUtils.isNotBlank(limitamount)?limitamount:"0")<=0){
+                            iserr = true;
+                            row.put("msg", "限购的情况下限购金额必填,请检查");
+                            rowserr.add(row);
+                            continue;
+                        }
+                    }
+                }
+                Row agent = agentRowsMap.get(agentnum).get(0);
+                row.put("sys_enterpriseid", agent.getLong("sys_enterpriseid"));
+                rowssuc.add(row);
+            }
+            long[] sa_promotion_authids = createTableID("sa_promotion_auth", rowssuc.size());
+            if (!rowssuc.isEmpty()) {
+                for (Row row : rowssuc) {
+                    long sa_promotion_authid = sa_promotion_authids[i];
+                    SQLFactory saleFactory = new SQLFactory(this, "促销方案参与授权范围新增");
+                    saleFactory.addParameter("siteid", siteid);
+                    saleFactory.addParameter("sa_promotion_authid", sa_promotion_authid);
+                    saleFactory.addParameter("sa_promotionid", sa_promotionid);
+                    saleFactory.addParameter("sys_enterpriseid", row.getLong("sys_enterpriseid"));
+                    saleFactory.addParameter("islimit", row.getLong("islimit"));
+                    saleFactory.addParameter("limitamount", StringUtils.isNotBlank(row.getString("limitamount"))?row.getString("limitamount"):"0");
+                    saleFactory.addParameter("limitgroupqty",0);
+                    saleFactory.addParameter("limitordercount", 0);
+                    saleFactory.addParameter("username", username);
+                    sqllist.add(saleFactory.getSQL());
+                    i++;
+                }
+            }
+            if (!sqllist.isEmpty()) {
+                sqllist.add(DataContrlLog.createLog(this, "sa_promotion", sa_promotionid, "导入", "促销活动授权范围导入成功").getSQL());
+                dbConnect.runSqlUpdate(sqllist);
+            }
+            if (iserr) {
+                ExcelFactory excelFactory = new ExcelFactory("促销活动导入错误信息");
+                HashMap<String, String> map = new HashMap<String, String>();
+                map.put("agentnum", "经销商编码");
+                map.put("islimit", "是否限购");
+                map.put("limitamount", "限购金额");
+                map.put("msg", "错误信息");
+                ArrayList<String> colNameList = new ArrayList<String>();
+                HashMap<String, Class> keytypemap = new HashMap<String, Class>();
+                colNameList.add("agentnum");
+                colNameList.add("islimit");
+                colNameList.add("limitamount");;
+                colNameList.add("msg");
+                keytypemap.put("agentnum", String.class);
+                keytypemap.put("islimit", String.class);
+                keytypemap.put("limitamount", String.class);
+                keytypemap.put("msg", String.class);
+                rowserr.setFieldList(colNameList);
+                rowserr.setFieldTypeMap(keytypemap);
+                addSheet(excelFactory, "Sheet1", rowserr, map);
+
+                Rows aa = uploadExcelToObs(excelFactory);
+                String url = "";
+                if (!aa.isEmpty()) {
+                    url = aa.get(0).getString("url");
+                }
+                return getSucReturnObject().setData(url).toString();
+            }
+
+        } catch (Exception e1) {
+            e1.printStackTrace();
+            return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
+        }
+        return getSucReturnObject().toString();
+    }
+
+    public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows, HashMap<String, String> titlemap) {
+        ArrayList<String> keylist = datarows.getFieldList();
+        XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
+        XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
+
+        XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
+        XSSFFont font = xssfFWorkbook.createFont();
+
+        font.setColor((short) 0xa);
+        font.setFontHeightInPoints((short) 12);
+        font.setBold(true);
+        xssfCellStyle1.setFont(font);
+
+        ExportAuthExcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
+        XSSFCellStyle titleCellStyle1 = ExportAuthExcel.createTitleCellStyle1(xssfFWorkbook);
+        XSSFCellStyle titleCellStyle2 = ExportAuthExcel.createTitleCellStyle2(xssfFWorkbook);
+        XSSFCellStyle titleCellStyle3 = ExportAuthExcel.createTitleCellStyle3(xssfFWorkbook);
+        ExportAuthExcel.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook);// 写入标题
+
+        for (int n = 0; n < datarows.size(); n++) {
+            Row row = datarows.get(n);
+            XSSFRow datarow = sheet.createRow(n + 3);
+            for (int i1 = 0; i1 < keylist.size(); i1++) {
+                Class fieldclazztype = datarows.getFieldMeta(keylist.get(i1)).getFieldtype();
+                if (fieldclazztype == Integer.class) {
+                    datarow.createCell(i1).setCellValue(row.getInteger((String) keylist.get(i1)).intValue());
+                } else if (fieldclazztype == Long.class) {
+                    datarow.createCell(i1).setCellValue(row.getLong((String) keylist.get(i1)));
+                } else if (fieldclazztype == Float.class) {
+                    datarow.createCell(i1).setCellValue(row.getFloat((String) keylist.get(i1)));
+                } else if (fieldclazztype == Double.class) {
+                    datarow.createCell(i1).setCellValue(row.getDouble((String) keylist.get(i1)));
+                } else {
+                    datarow.createCell(i1).setCellValue(row.getString((String) keylist.get(i1)));
+                }
+                if (i1 == 3) {
+                    datarow.getCell(i1).setCellStyle(xssfCellStyle1);
+                }
+            }
+        }
+        return sheet;
+    }
+    public static boolean isNumeric(String strNum) {
+        if (strNum == null) {
+            return false;
+        }
+        return strNum.matches("-?\\d+(\\.\\d+)?");
+    }
+
 }