|
@@ -1,6 +1,7 @@
|
|
|
package restcontroller.webmanage.sale.aftersalesbom;
|
|
|
|
|
|
import beans.data.BatchDeleteErr;
|
|
|
+import camundajar.impl.fastparse.internal.Msgs;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import common.Controller;
|
|
@@ -10,10 +11,15 @@ import common.annotation.CACHEING;
|
|
|
import common.annotation.CACHEING_CLEAN;
|
|
|
import common.data.*;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
+import org.apache.poi.ss.usermodel.CellStyle;
|
|
|
+import org.apache.poi.ss.usermodel.DataFormat;
|
|
|
+import org.apache.poi.xssf.usermodel.*;
|
|
|
import restcontroller.R;
|
|
|
import restcontroller.webmanage.sale.aftersalesbom.aftersalesbom;
|
|
|
+import restcontroller.webmanage.sale.aftersalesbom.ExportExcel;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
|
|
|
public class aftersalesbom_pjs extends Controller {
|
|
|
public aftersalesbom_pjs(JSONObject content) throws YosException {
|
|
@@ -53,7 +59,7 @@ public class aftersalesbom_pjs extends Controller {
|
|
|
|
|
|
|
|
|
@API(title = "售后bom配件明细新增更新", apiversion = R.ID2025071411252903.v1.class)
|
|
|
- @CACHEING_CLEAN(apiClass = {aftersalesbom.class, aftersalesbom_items.class})
|
|
|
+ @CACHEING_CLEAN(apiClass = {aftersalesbom.class, aftersalesbom_pjs.class})
|
|
|
public String insertormodify_aftersalesbompjs() throws YosException {
|
|
|
Long sa_aftersalesbomid = content.getLong("sa_aftersalesbomid");
|
|
|
JSONArray iteminfos = content.getJSONArray("iteminfos");
|
|
@@ -155,7 +161,7 @@ public class aftersalesbom_pjs extends Controller {
|
|
|
}
|
|
|
|
|
|
@API(title = "删除配件明细", apiversion = R.ID2025071411255003.v1.class)
|
|
|
- @CACHEING_CLEAN(apiClass = {aftersalesbom.class, aftersalesbom_items.class})
|
|
|
+ @CACHEING_CLEAN(apiClass = {aftersalesbom.class, aftersalesbom_pjs.class})
|
|
|
public String deletemx() throws YosException {
|
|
|
|
|
|
JSONArray sa_aftersalesbom_pjsids = content.getJSONArray("sa_aftersalesbom_pjsids");
|
|
@@ -180,4 +186,283 @@ public class aftersalesbom_pjs extends Controller {
|
|
|
|
|
|
return batchDeleteErr.getReturnObject().toString();
|
|
|
}
|
|
|
+
|
|
|
+ @API(title = "下载导入模板", apiversion = R.ID2025071415152103.v1.class)
|
|
|
+ public String downloadExcel() throws YosException {
|
|
|
+ ExcelFactory excelFactory = new ExcelFactory("售后bom产品清单导入模板");
|
|
|
+
|
|
|
+ XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
|
|
|
+ XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
|
|
|
+ CellStyle style = xssfFWorkbook.createCellStyle();
|
|
|
+
|
|
|
+ DataFormat format = xssfFWorkbook.createDataFormat();
|
|
|
+ style.setDataFormat(format.getFormat("@"));
|
|
|
+ // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
|
|
|
+ for (int i = 0; i <= 20; i++) {
|
|
|
+ sheet.setDefaultColumnStyle(i, style);
|
|
|
+ }
|
|
|
+ // 设置工作薄列宽
|
|
|
+ restcontroller.webmanage.sale.aftersalesbom.ExportExcel_pj.setBatchDetailSheetColumn1(sheet);// 设置工作薄列宽
|
|
|
+ XSSFCellStyle titleCellStyle1 = restcontroller.webmanage.sale.aftersalesbom.ExportExcel.createTitleCellStyle1(xssfFWorkbook);
|
|
|
+ XSSFCellStyle titleCellStyle2 = restcontroller.webmanage.sale.aftersalesbom.ExportExcel.createTitleCellStyle2(xssfFWorkbook);
|
|
|
+ XSSFCellStyle titleCellStyle3 = restcontroller.webmanage.sale.aftersalesbom.ExportExcel.createTitleCellStyle3(xssfFWorkbook);
|
|
|
+ XSSFCellStyle titleCellStyle4 = restcontroller.webmanage.sale.aftersalesbom.ExportExcel.createBodyCellStyle4(xssfFWorkbook);
|
|
|
+
|
|
|
+ String productcategories= content.getStringValue("productcategories");
|
|
|
+ if(StringUtils.isBlank(productcategories)){
|
|
|
+ return getErrReturnObject().setErrMsg("产品大类为空,无法下载导入模板").toString();
|
|
|
+ }
|
|
|
+ Rows rows = dbConnect.runSqlQuery("select t1.bomname,t2.bomname module,t3.bomname component,t4.bomname accessorie from plm_bom t1 left join plm_bom t2 on t1.plm_bomid=t2.parentid and t1.siteid=t2.siteid left join plm_bom t3 on t2.plm_bomid=t3.parentid and t2.siteid=t3.siteid left join plm_bom t4 on t3.plm_bomid=t4.parentid and t3.siteid=t4.siteid where t1.bomname='"+productcategories+"' order by t2.bomname,t3.bomname,t4.bomname");
|
|
|
+ if(rows.isEmpty()){
|
|
|
+ return getErrReturnObject().setErrMsg("产品大类下不存在bom数据,无法下载导入模板").toString();
|
|
|
+ }
|
|
|
+ restcontroller.webmanage.sale.aftersalesbom.ExportExcel_pj.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook,rows);
|
|
|
+
|
|
|
+ Rows aa = uploadExcelToObs(excelFactory);
|
|
|
+ String url = "";
|
|
|
+ if (!aa.isEmpty()) {
|
|
|
+ url = aa.get(0).getString("url");
|
|
|
+ }
|
|
|
+ return getSucReturnObject().setData(url).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @API(title = "售后bom配件导入", apiversion = R.ID2025071415153103.v1.class)
|
|
|
+ @CACHEING_CLEAN(apiClass = {aftersalesbom.class, aftersalesbom_items.class})
|
|
|
+ public String importItems() throws YosException {
|
|
|
+ Long sa_aftersalesbomid = content.getLong("sa_aftersalesbomid");
|
|
|
+ Rows aftersalesbom = dbConnect.runSqlQuery("select status,productcategories from sa_aftersalesbom where siteid='" + siteid + "' and sa_aftersalesbomid=" + sa_aftersalesbomid);
|
|
|
+ if (aftersalesbom.isEmpty()) {
|
|
|
+ return getErrReturnObject().setErrMsg("该售后bom不存在").toString();
|
|
|
+ }
|
|
|
+ if (!aftersalesbom.get(0).getString("status").equals("新建")) {
|
|
|
+ return getErrReturnObject().setErrMsg("非新建状态不能导入").toString();
|
|
|
+ }
|
|
|
+ Rows bomrows = dbConnect.runSqlQuery("select t1.bomname,t2.bomname module,t3.bomname component,t4.bomname accessorie from plm_bom t1 left join plm_bom t2 on t1.plm_bomid=t2.parentid and t1.siteid=t2.siteid left join plm_bom t3 on t2.plm_bomid=t3.parentid and t2.siteid=t3.siteid left join plm_bom t4 on t3.plm_bomid=t4.parentid and t3.siteid=t4.siteid where t1.bomname='"+aftersalesbom.get(0).getString("productcategories")+"' order by t2.bomname,t3.bomname,t4.bomname");
|
|
|
+ ArrayList<String> sqlList = new ArrayList<>();
|
|
|
+ ExcelFactory e;
|
|
|
+ try {
|
|
|
+
|
|
|
+ // 华为云
|
|
|
+ e = getPostExcelFactory(content.getLong("attachmentid"));
|
|
|
+ // 本地
|
|
|
+ //e = getPostExcelFactory();
|
|
|
+
|
|
|
+ ArrayList<String> keys = new ArrayList<>();
|
|
|
+ keys.add("bomname");
|
|
|
+ keys.add("module");
|
|
|
+ keys.add("component");
|
|
|
+ keys.add("accessorie");
|
|
|
+ keys.add("itemno1");
|
|
|
+ keys.add("begindate1");
|
|
|
+ keys.add("enddate1");
|
|
|
+ keys.add("itemno2");
|
|
|
+ keys.add("begindate2");
|
|
|
+ keys.add("enddate2");
|
|
|
+ keys.add("itemno3");
|
|
|
+ keys.add("begindate3");
|
|
|
+ keys.add("enddate3");
|
|
|
+ keys.add("itemno4");
|
|
|
+ keys.add("begindate4");
|
|
|
+ keys.add("enddate4");
|
|
|
+ keys.add("itemno5");
|
|
|
+ keys.add("begindate5");
|
|
|
+ keys.add("enddate5");
|
|
|
+
|
|
|
+
|
|
|
+ Rows rows = e.getSheetRows(0, keys, 3);
|
|
|
+ boolean iserr = false;
|
|
|
+ Rows rowserr = new Rows();
|
|
|
+ Rows rowssuc = new Rows();
|
|
|
+
|
|
|
+ RowsMap itemRowsMap = dbConnect.runSqlQuery("select itemid,itemno,itemname from plm_item where siteid='" + siteid + "'").toRowsMap("itemno");
|
|
|
+ ArrayList<Long> itemidList = dbConnect.runSqlQuery("select itemid from sa_aftersalesbom_items t1 inner join sa_aftersalesbom t2 on t1.siteid=t2.siteid and t1.sa_aftersalesbomid=t2.sa_aftersalesbomid").toArrayList("itemid", new ArrayList<>());
|
|
|
+
|
|
|
+ for (Row row : rows) {
|
|
|
+ String msg="错误信息:";
|
|
|
+ for (int i = 1; i < 6; i++) {
|
|
|
+ if(!StringUtils.isBlank(row.getString("itemno"+i))){
|
|
|
+ if (!itemRowsMap.containsKey(row.getString("itemno"+i))) {
|
|
|
+ msg = msg +row.getString("itemno"+i)+"商品不存在;";
|
|
|
+ } else {
|
|
|
+ row.put("itemid"+i, itemRowsMap.get(row.getString("itemno"+i)).get(0).getLong("itemid"));
|
|
|
+ row.put("itemname"+i, itemRowsMap.get(row.getString("itemno"+i)).get(0).getString("itemname"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if(msg.contains("商品不存在")){
|
|
|
+ iserr=true;
|
|
|
+ row.put("msg", msg);
|
|
|
+ rowserr.add(row);
|
|
|
+ }else{
|
|
|
+ rowssuc.add(row);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if (iserr) {
|
|
|
+ ExcelFactory excelFactory = new ExcelFactory("商品明细导入错误信息");
|
|
|
+ HashMap<String, String> map = new HashMap<String, String>();
|
|
|
+ map.put("bomname","bom名称");
|
|
|
+ map.put("module","层级");
|
|
|
+ map.put("component","层级");
|
|
|
+ map.put("accessorie","层级");
|
|
|
+ map.put("itemno1","物料号1");
|
|
|
+ map.put("begindate1","启用时间1");
|
|
|
+ map.put("enddate1","停用时间1");
|
|
|
+ map.put("itemno2","物料号2");
|
|
|
+ map.put("begindate2","启用时间2");
|
|
|
+ map.put("enddate2","停用时间2");
|
|
|
+ map.put("itemno3","物料号3");
|
|
|
+ map.put("begindate3","启用时间3");
|
|
|
+ map.put("enddate3","停用时间3");
|
|
|
+ map.put("itemno4","物料号4");
|
|
|
+ map.put("begindate4","启用时间4");
|
|
|
+ map.put("enddate4","停用时间4");
|
|
|
+ map.put("itemno5","物料号5");
|
|
|
+ map.put("begindate5","启用时间5");
|
|
|
+ map.put("enddate5","停用时间5");
|
|
|
+ map.put("msg", "错误信息");
|
|
|
+ ArrayList<String> colNameList = new ArrayList<String>();
|
|
|
+ HashMap<String, Class> keytypemap = new HashMap<String, Class>();
|
|
|
+ colNameList.add("bomname");
|
|
|
+ colNameList.add("module");
|
|
|
+ colNameList.add("component");
|
|
|
+ colNameList.add("accessorie");
|
|
|
+ colNameList.add("itemno1");
|
|
|
+ colNameList.add("begindate1");
|
|
|
+ colNameList.add("enddate1");
|
|
|
+ colNameList.add("itemno2");
|
|
|
+ colNameList.add("begindate2");
|
|
|
+ colNameList.add("enddate2");
|
|
|
+ colNameList.add("itemno3");
|
|
|
+ colNameList.add("begindate3");
|
|
|
+ colNameList.add("enddate3");
|
|
|
+ colNameList.add("itemno4");
|
|
|
+ colNameList.add("begindate4");
|
|
|
+ colNameList.add("enddate4");
|
|
|
+ colNameList.add("itemno5");
|
|
|
+ colNameList.add("begindate5");
|
|
|
+ colNameList.add("enddate5");
|
|
|
+ colNameList.add("msg");
|
|
|
+ keytypemap.put("bomname",String.class);
|
|
|
+ keytypemap.put("module",String.class);
|
|
|
+ keytypemap.put("component",String.class);
|
|
|
+ keytypemap.put("accessorie",String.class);
|
|
|
+ keytypemap.put("itemno1",String.class);
|
|
|
+ keytypemap.put("begindate1",String.class);
|
|
|
+ keytypemap.put("enddate1",String.class);
|
|
|
+ keytypemap.put("itemno2",String.class);
|
|
|
+ keytypemap.put("begindate2",String.class);
|
|
|
+ keytypemap.put("enddate2",String.class);
|
|
|
+ keytypemap.put("itemno3",String.class);
|
|
|
+ keytypemap.put("begindate3",String.class);
|
|
|
+ keytypemap.put("enddate3",String.class);
|
|
|
+ keytypemap.put("itemno4",String.class);
|
|
|
+ keytypemap.put("begindate4",String.class);
|
|
|
+ keytypemap.put("enddate4",String.class);
|
|
|
+ keytypemap.put("itemno5",String.class);
|
|
|
+ keytypemap.put("begindate5",String.class);
|
|
|
+ keytypemap.put("enddate5",String.class);
|
|
|
+ keytypemap.put("msg", 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();
|
|
|
+ }
|
|
|
+
|
|
|
+ dbConnect.runSqlUpdate("delete from sa_aftersalesbom_pjs where sa_aftersalesbomid="+sa_aftersalesbomid);
|
|
|
+
|
|
|
+ if (!rowssuc.isEmpty()) {
|
|
|
+ for (Row row : rowssuc) {
|
|
|
+ for (int i = 1; i < 6; i++) {
|
|
|
+ if(row.containsKey("itemid"+i)){
|
|
|
+ InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_aftersalesbom_pjs");
|
|
|
+ insertSQL.setUniqueid(createTableID("sa_aftersalesbom_pjs"));
|
|
|
+ insertSQL.setSiteid(siteid);
|
|
|
+ insertSQL.setValue("sa_aftersalesbomid", sa_aftersalesbomid);
|
|
|
+ insertSQL.setValue("module", row.getString("module"));
|
|
|
+ insertSQL.setValue("component", row.getString("component"));
|
|
|
+ insertSQL.setValue("accessorie", row.getString("accessorie"));
|
|
|
+ insertSQL.setValue("itemid", row.getString("itemid"+i));
|
|
|
+ insertSQL.setValue("itemname", row.getString("itemname"+i));
|
|
|
+ insertSQL.setValue("itemno", row.getString("itemno"+i));
|
|
|
+ insertSQL.setValue("begindate", StringUtils.isBlank(row.getString("begindate"+i)) ?"null":row.getString("begindate"+i));
|
|
|
+ insertSQL.setValue("enddate", StringUtils.isBlank(row.getString("enddate"+i)) ?"null":row.getString("enddate"+i));
|
|
|
+ sqlList.add(insertSQL.getSQL());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!sqlList.isEmpty()) {
|
|
|
+ dbConnect.runSqlUpdate(sqlList);
|
|
|
+ }
|
|
|
+ } 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);
|
|
|
+
|
|
|
+ CellStyle style = xssfFWorkbook.createCellStyle();
|
|
|
+ DataFormat format = xssfFWorkbook.createDataFormat();
|
|
|
+ style.setDataFormat(format.getFormat("@"));
|
|
|
+ // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
|
|
|
+ for (int i = 0; i <= 3; i++) {
|
|
|
+ sheet.setDefaultColumnStyle(i, style);
|
|
|
+ }
|
|
|
+ restcontroller.webmanage.sale.aftersalesbom.ExportExcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
|
|
|
+ XSSFCellStyle titleCellStyle1 = restcontroller.webmanage.sale.aftersalesbom.ExportExcel.createTitleCellStyle1(xssfFWorkbook);
|
|
|
+ XSSFCellStyle titleCellStyle2 = restcontroller.webmanage.sale.aftersalesbom.ExportExcel.createTitleCellStyle2(xssfFWorkbook);
|
|
|
+ XSSFCellStyle titleCellStyle3 = restcontroller.webmanage.sale.aftersalesbom.ExportExcel.createTitleCellStyle3(xssfFWorkbook);
|
|
|
+ ExportExcel_pj.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, 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)));
|
|
|
+ } 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 == 19) {
|
|
|
+ datarow.getCell(i1).setCellStyle(xssfCellStyle1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sheet;
|
|
|
+ }
|
|
|
}
|