Item.java 109 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070
  1. package restcontroller.webmanage.sale.item;
  2. import beans.brand.Brand;
  3. import beans.datacontrllog.DataContrlLog;
  4. import beans.datatag.DataTag;
  5. import beans.itemclass.ItemClass;
  6. import beans.parameter.Parameter;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONArray;
  9. import com.alibaba.fastjson.JSONObject;
  10. import common.Controller;
  11. import common.YosException;
  12. import common.annotation.API;
  13. import common.annotation.CACHEING;
  14. import common.annotation.CACHEING_CLEAN;
  15. import common.data.*;
  16. import org.apache.commons.lang.StringUtils;
  17. import org.apache.poi.ss.usermodel.CellStyle;
  18. import org.apache.poi.ss.usermodel.CellType;
  19. import org.apache.poi.ss.usermodel.DataFormat;
  20. import org.apache.poi.xssf.usermodel.*;
  21. import restcontroller.R;
  22. import restcontroller.webmanage.executorService.Executor;
  23. import restcontroller.webmanage.sale.itempriceadjust.Itempriceadjust;
  24. import java.math.BigDecimal;
  25. import java.math.RoundingMode;
  26. import java.util.ArrayList;
  27. import java.util.HashMap;
  28. import java.util.List;
  29. @API(title = "货品档案管理")
  30. public class Item extends Controller {
  31. /**
  32. * 构造函数
  33. *
  34. * @param content
  35. */
  36. public Item(JSONObject content) throws YosException {
  37. super(content);
  38. }
  39. @API(title = "货品档案新增", apiversion = R.ID20220923141502.v1.class)
  40. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.class})
  41. public String insertOrUpdate() throws YosException {
  42. Long itemid = content.getLong("itemid");
  43. String itemno = content.getString("itemno").trim();
  44. boolean isauxunit = content.getBoolean("isauxunit");
  45. String itemname = content.getString("itemname");
  46. Long plm_itemextendid = content.getLongValue("plm_itemextendid");
  47. Rows rows = dbConnect.runSqlQuery("SELECT * from plm_item WHERE (itemtype='成品' or isshow=1 ) and itemno='" + itemno + "' and siteid='" + siteid + "'");
  48. if (rows.isNotEmpty()) {
  49. long tempitemid = rows.get(0).getLong("itemid");
  50. if (itemid > 0 && itemid != tempitemid) {
  51. return getErrReturnObject().setErrMsg("当前料号已存在").toString();
  52. }
  53. itemid = tempitemid;
  54. Rows itemextendrows = dbConnect.runSqlQuery("select * from plm_itemextend WHERE itemid='" + itemid + "' and siteid='" + siteid + "'");
  55. if (itemextendrows.isNotEmpty()) {
  56. plm_itemextendid = itemextendrows.get(0).getLong("plm_itemextendid");
  57. }
  58. }
  59. ArrayList<String> sqlList = new ArrayList<>();
  60. SQLFactory sqlFactory = new SQLFactory(this, "货品档案新增");
  61. if (itemid <= 0) {
  62. if (dbConnect.runSqlQuery("SELECT 1 from plm_item WHERE itemno='" + itemno + "' and siteid='" + siteid + "' and (itemtype='成品' or isshow=1 )").isNotEmpty()) {
  63. return getErrReturnObject().setErrMsg("商品编号已存在").toString();
  64. }
  65. itemid = createTableID("plm_item");
  66. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "新增", "新建商品:" + itemname).getSQL());
  67. } else {
  68. if (dbConnect.runSqlQuery("SELECT 1 from plm_item WHERE itemid=" + itemid + " and siteid ='" + siteid + "' and (itemtype='成品' or isshow=1 )")
  69. .isEmpty()) {
  70. return getReturnObject().setCode("0132", new String[0]).toString();//数据不存在
  71. }
  72. sqlFactory = new SQLFactory(this, "货品档案更新");
  73. String remarks = getLogRemarks(content);
  74. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "编辑", remarks).getSQL());
  75. }
  76. sqlFactory.addParameter("siteid", siteid);
  77. sqlFactory.addParameter("itemid", itemid);
  78. sqlFactory.addParameter("username", username);
  79. sqlFactory.addParameter("userid", userid);
  80. sqlFactory.addParameter("itemno", itemno);
  81. sqlFactory.addParameter("unitid", content.getLongValue("unitid"));
  82. sqlFactory.addParameter("isauxunit", isauxunit);
  83. sqlFactory.addParameter("unitgroupid", isauxunit ? content.getString("unitgroupid") : "null");
  84. sqlFactory.addParameter("itemname", itemname);
  85. sqlFactory.addParameter("isonsale", 0);
  86. sqlFactory.addParameter("model", content.getString("model"));
  87. sqlFactory.addParameter("spec", content.getString("spec"));
  88. // 订单起订量
  89. sqlFactory.addParameter("orderminqty", content.getBigDecimalValue("orderminqty"));
  90. // 订单增量
  91. sqlFactory.addParameter("orderaddqty", content.getBigDecimalValue("orderaddqty"));
  92. // 订单起订量控制单位(0:主单位;1:辅助单位)
  93. sqlFactory.addParameter("orderminqty_auxunit", content.getString("orderminqty_auxunit"));
  94. // 订单增量控制单位(0:主单位;1:辅助单位)
  95. sqlFactory.addParameter("orderaddqty_auxunit", content.getString("orderaddqty_auxunit"));
  96. // 说明
  97. sqlFactory.addParameter("remarks", content.getStringValue("remarks"));
  98. // 商品条形码
  99. sqlFactory.addParameter("barcode", content.getStringValue("barcode"));
  100. // 是否单品管理
  101. sqlFactory.addParameter("skucontrol", content.getBooleanValue("skucontrol"));
  102. // 是否批次管理
  103. sqlFactory.addParameter("batchcontrol", content.getBooleanValue("batchcontrol"));
  104. // 毛重(g)
  105. sqlFactory.addParameter("grossweight", content.getBigDecimalValue("grossweight"));
  106. // 净重(g)
  107. sqlFactory.addParameter("weight", content.getBigDecimalValue("weight"));
  108. // 高度(mm)
  109. sqlFactory.addParameter("height", content.getBigDecimalValue("height"));
  110. // 宽度(mm)
  111. sqlFactory.addParameter("width", content.getBigDecimalValue("width"));
  112. // 长度(mm)
  113. sqlFactory.addParameter("length", content.getBigDecimalValue("length"));
  114. // 交期
  115. sqlFactory.addParameter("delivery", content.getLongValue("delivery"));
  116. // 牌价
  117. sqlFactory.addParameter("marketprice", content.getBigDecimalValue("marketprice"));
  118. // 是否工具
  119. sqlFactory.addParameter("istool", content.getBooleanValue("istool"));
  120. // 产品标准
  121. sqlFactory.addParameter("standards", content.getStringValue("standards"));
  122. // 产品标准明细
  123. sqlFactory.addParameter("standardsmx", content.getStringValue("standardsmx"));
  124. // 库存缺货标准
  125. sqlFactory.addParameter("stockstatus2", content.getIntValue("stockstatus2"));
  126. // 库存充足标准
  127. sqlFactory.addParameter("stockstatus1", content.getIntValue("stockstatus1"));
  128. // 保修期(年)
  129. sqlFactory.addParameter("warrantyday", content.getIntValue("warrantyday"));
  130. // 是否营销物料
  131. sqlFactory.addParameter("iswuliao", content.getBooleanValue("iswuliao"));
  132. // 是否服务物料
  133. sqlFactory.addParameter("isservice", content.getBooleanValue("isservice"));
  134. sqlFactory.addParameter("packqty", content.getBigDecimalValue("packqty", 1));
  135. sqlList.add(sqlFactory.getSQL());
  136. // 货品档案扩展属性字段表
  137. sqlFactory = new SQLFactory(this, "货品档案-扩展新增");
  138. if (plm_itemextendid <= 0) {
  139. plm_itemextendid = createTableID("plm_itemextend");
  140. } else {
  141. sqlFactory = new SQLFactory(this, "货品档案-扩展更新");
  142. }
  143. sqlFactory.addParameter("siteid", siteid);
  144. sqlFactory.addParameter("userid", userid);
  145. sqlFactory.addParameter("username", username);
  146. sqlFactory.addParameter("plm_itemextendid", plm_itemextendid);
  147. sqlFactory.addParameter("itemid", itemid);
  148. sqlFactory.addParameter("material", content.getStringValue("material"));
  149. sqlFactory.addParameter("pressure", content.getStringValue("pressure"));
  150. JSONArray nominalpressure = new JSONArray();
  151. if (content.containsKey("nominalpressure")) {
  152. if (!StringUtils.isBlank(content.getStringValue("nominalpressure"))) {
  153. nominalpressure = content.getJSONArray("nominalpressure");
  154. }
  155. }
  156. sqlFactory.addParameter("caliber", content.getStringValue("caliber"));
  157. sqlFactory.addParameter("nominalpressure", nominalpressure);
  158. sqlFactory.addParameter("butterflyplatedrive", content.getStringValue("butterflyplatedrive"));
  159. sqlFactory.addParameter("connection", content.getStringValue("connection"));
  160. sqlFactory.addParameter("actuatordrivetype", content.getStringValue("actuatordrivetype"));
  161. sqlFactory.addParameter("valveplatematerial", content.getStringValue("valveplatematerial"));
  162. sqlFactory.addParameter("bodymaterial", content.getStringValue("bodymaterial"));
  163. sqlFactory.addParameter("actuatortype", content.getStringValue("actuatortype"));
  164. sqlFactory.addParameter("actuatorbrand", content.getStringValue("actuatorbrand"));
  165. sqlFactory.addParameter("isbutterfly", content.getBooleanValue("isbutterfly"));
  166. sqlFactory.addParameter("erpitemno", content.getStringValue("erpitemno"));
  167. sqlFactory.addParameter("erpitemname", content.getStringValue("erpitemname"));
  168. sqlFactory.addParameter("specalnote", content.getStringValue("specalnote"));
  169. sqlFactory.addParameter("prodline", content.getStringValue("prodline"));
  170. sqlFactory.addParameter("device", content.getStringValue("device"));
  171. sqlFactory.addParameter("categories", content.getStringValue("categories"));
  172. sqlFactory.addParameter("goodstype", content.getStringValue("goodstype"));
  173. sqlFactory.addParameter("explains", content.getStringValue("explains"));
  174. sqlFactory.addParameter("assistance", content.getStringValue("assistance"));
  175. sqlList.add(sqlFactory.getSQL());
  176. dbConnect.runSqlUpdate(sqlList);
  177. content.put("itemid", itemid);
  178. Rows itemrows = dbConnect.runSqlQuery("SELECT * FROM plm_item WHERE siteid='" + siteid + "' AND itemtype='成品' AND itemid='" + itemid + "'");
  179. if (itemrows.isNotEmpty()) {
  180. BigDecimal marketprice = content.getBigDecimalValue("marketprice");
  181. if (marketprice.compareTo(itemrows.get(0).getBigDecimal("marketprice")) != 0) {
  182. content.put("price", marketprice);
  183. String json = "[{\"pricegrade\":\"1\",\"price\":" + marketprice + "}]";
  184. content.put("itempriceadjust", json);
  185. content.put("adjustremarks", "来源【商品管理】一键调价");
  186. new Itempriceadjust(content).updatePrice();
  187. }
  188. JSONObject extradata = new JSONObject();
  189. extradata.put("extraUserList", new ArrayList<>());
  190. Executor.sendEml_controller(this, "itemchange", itemid, extradata);
  191. }
  192. return queryDetail();
  193. }
  194. public String getLogRemarks(JSONObject content) throws YosException {
  195. StringBuffer remarks = new StringBuffer("");
  196. Long itemid = content.getLong("itemid");
  197. Long plm_itemextendid = content.getLongValue("plm_itemextendid");
  198. Rows itemRows = dbConnect.runSqlQuery("SELECT * from plm_item WHERE itemid=" + itemid + " and siteid='" + siteid + "'");
  199. Rows itemextendRows = dbConnect.runSqlQuery("SELECT * from plm_itemextend WHERE plm_itemextendid=" + plm_itemextendid + " and siteid='" + siteid + "'");
  200. Rows itemkeyRows = dbConnect.runSqlQuery("SELECT column_name,column_title,column_type from sys_objectcols WHERE table_name='plm_item'");
  201. Rows itemextendkeyRows = dbConnect.runSqlQuery("SELECT column_name,column_title,column_type from sys_objectcols WHERE table_name='plm_itemextend'");
  202. try {
  203. remarks = remarks(remarks, itemRows, itemkeyRows, content);
  204. remarks = remarks(remarks, itemextendRows, itemextendkeyRows, content);
  205. } catch (Exception e) {
  206. e.printStackTrace();
  207. remarks.append("操作记录已丢失");
  208. }
  209. if (remarks.toString().equals("")) {
  210. return "无";
  211. }
  212. return remarks.toString();
  213. }
  214. public StringBuffer remarks(StringBuffer remarks, Rows rows, Rows keyRows, JSONObject content) throws YosException {
  215. if (rows.isNotEmpty()) {
  216. for (Row itemextendkeyRow : keyRows) {
  217. String key = itemextendkeyRow.getString("column_name");
  218. String type = itemextendkeyRow.getString("column_type");
  219. if (content.containsKey(key)) {
  220. if (key.equals("changeby")) {
  221. continue;
  222. }
  223. Object obj1 = rows.get(0).get(key) == null ? "null" : rows.get(0).get(key).toString();
  224. Object obj2 = content.get(key);
  225. if (key.equals("nominalpressure")) {
  226. System.err.println(obj1);
  227. System.err.println(obj2);
  228. }
  229. switch (type) {
  230. case "decimal":
  231. if (StringUtils.isNotEmpty(obj2.toString())) {
  232. System.err.println(key);
  233. BigDecimal decimal1 = rows.get(0).getBigDecimal(key);
  234. BigDecimal decimal2 = content.getBigDecimal(key);
  235. if (decimal1.compareTo(decimal2) == 0) {
  236. continue;
  237. } else {
  238. remarks.append(itemextendkeyRow.getString("column_title") + "原值【" + rows.get(0).get(key) + "】,改为新值【" + content.get(key) + "】;");
  239. }
  240. }
  241. break;
  242. default:
  243. System.err.println(key);
  244. if (obj1.equals(content.get(obj2)) || obj1.toString().equals(obj2.toString())) {
  245. continue;
  246. } else {
  247. remarks.append(itemextendkeyRow.getString("column_title") + "原值【" + rows.get(0).get(key) + "】,改为新值【" + content.get(key) + "】;");
  248. }
  249. }
  250. }
  251. }
  252. }
  253. return remarks;
  254. }
  255. @API(title = "货品档案详情", apiversion = R.ID20220923155302.v1.class)
  256. public String queryDetail() throws YosException {
  257. Long itemid = content.getLong("itemid");
  258. ArrayList<Long> itemids = new ArrayList<>();
  259. itemids.add(itemid);
  260. SQLFactory sqlFactory = new SQLFactory(this, "货品档案详情");
  261. sqlFactory.addParameter("siteid", siteid);
  262. sqlFactory.addParameter("itemid", itemid);
  263. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL(false));
  264. // 默认商品图片
  265. Rows defaultImageRows = beans.Item.Item.getItemdefaultImage(this);
  266. // 品牌
  267. RowsMap brandRowsMap = Brand.getBrandRowsMap(this, itemids);
  268. // 营销类别
  269. RowsMap itemClassRowsMap = ItemClass.getAllItemClassRowsMap(this, itemids);
  270. // 附件
  271. RowsMap attRowsMap = getAttachmentUrl("plm_item", itemids);
  272. for (Row row : rows) {
  273. if (attRowsMap.getOrDefault(row.getString("itemid"), new Rows()).isEmpty()) {
  274. row.put("attinfos", defaultImageRows);
  275. } else {
  276. row.put("attinfos", attRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  277. }
  278. row.put("brand", brandRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  279. row.put("itemclass", itemClassRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  280. }
  281. return getSucReturnObject().setData(rows.isNotEmpty() ? rows.get(0) : new Row()).toString();
  282. }
  283. @API(title = "货品档案列表", apiversion = R.ID20220923140602.v1.class)
  284. @CACHEING
  285. public String queryList() throws YosException {
  286. StringBuffer where = new StringBuffer(" 1=1 ");
  287. if (content.containsKey("where")) {
  288. JSONObject whereObject = content.getJSONObject("where");
  289. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  290. where.append(" and(");
  291. where.append("t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  292. where.append("or t1.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  293. where.append("or t1.model like'%").append(whereObject.getString("condition")).append("%' ");
  294. where.append("or t1.spec like'%").append(whereObject.getString("condition")).append("%' ");
  295. where.append("or t3.erpitemname like'%").append(whereObject.getString("condition")).append("%' ");
  296. where.append("or t3.erpitemno like'%").append(whereObject.getString("condition")).append("%' ");
  297. where.append(")");
  298. }
  299. if (whereObject.containsKey("isonsale") && !"".equals(whereObject.getString("isonsale"))) {
  300. where.append(" and(");
  301. where.append("t1.isonsale ='").append(whereObject.getString("isonsale")).append("' ");
  302. where.append(")");
  303. }
  304. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  305. where.append(" and(");
  306. where.append("t1.status ='").append(whereObject.getString("status")).append("' ");
  307. where.append(")");
  308. }
  309. if (whereObject.containsKey("model") && !"".equals(whereObject.getString("model"))) {
  310. where.append(" and(");
  311. where.append("t1.model like'%").append(whereObject.getString("model")).append("%' ");
  312. where.append(")");
  313. }
  314. if (whereObject.containsKey("spec") && !"".equals(whereObject.getString("spec"))) {
  315. where.append(" and(");
  316. where.append("t1.spec like'%").append(whereObject.getString("spec")).append("%' ");
  317. where.append(")");
  318. }
  319. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  320. where.append(" and t1.onsaledate >='").append(whereObject.getString("begindate")).append("' ");
  321. }
  322. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  323. where.append(" and t1.onsaledate <='").append(whereObject.getString("enddate")).append("' ");
  324. }
  325. }
  326. SQLFactory sqlFactory = new SQLFactory(this, "货品档案列表", pageSize, pageNumber, pageSorting);
  327. sqlFactory.addParameter("siteid", siteid);
  328. sqlFactory.addParameter_SQL("where", where);
  329. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  330. // 默认商品图片
  331. Rows defaultImageRows = beans.Item.Item.getItemdefaultImage(this);
  332. // 附件
  333. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  334. RowsMap attRowsMap = getAttachmentUrl("plm_item", ids);
  335. // 商品领域
  336. RowsMap tradefieldRowsMap = beans.Item.Item.getTradefieldRowsMap(this, ids);
  337. // 商品品牌
  338. RowsMap brandRowsMap = Brand.getBrandRowsMap(this, ids);
  339. RowsMap itemclassRowsMap = ItemClass.getAllItemClassRowsMap(this, ids);
  340. for (Row row : rows) {
  341. if (attRowsMap.getOrDefault(row.getString("itemid"), new Rows()).isEmpty()) {
  342. row.put("attinfos", defaultImageRows);
  343. } else {
  344. row.put("attinfos", attRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  345. }
  346. row.put("brand", brandRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  347. row.put("itemclass", itemclassRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  348. }
  349. return getSucReturnObject().setData(rows).toString();
  350. }
  351. @API(title = "货品档案删除", apiversion = R.ID20220923152202.v1.class)
  352. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.v1.class})
  353. public String delete() throws YosException {
  354. JSONArray jsonArray = content.getJSONArray("itemids");
  355. String sql = " SELECT 1 from plm_item WHERE itemid in " + jsonArray + " and `status` ='审核' and siteid ='"
  356. + siteid + "'";
  357. sql = sql.replace("[", "(").replace("]", ")");
  358. if (dbConnect.runSqlQuery(sql).isNotEmpty()) {
  359. return getReturnObject().setCode("0154", new String[0]).toString();//存在已审核的数据,无法删除。
  360. }
  361. for (Object object : jsonArray) {
  362. long itemid = Long.parseLong(object.toString());
  363. if (dbConnect.runSqlQuery("SELECT 1 FROM plm_item WHERE siteid='" + siteid + "' AND itemtype='成品' AND itemid='" + itemid + "'").isNotEmpty()) {
  364. JSONObject extradata = new JSONObject();
  365. extradata.put("extraUserList", new ArrayList<>());
  366. Executor.sendEml_controller(this, "itemchange", itemid, extradata);
  367. }
  368. }
  369. SQLFactory sqlFactory = new SQLFactory(this, "货品档案删除");
  370. sqlFactory.addParameter_in("itemid", jsonArray.toArray());
  371. sqlFactory.addParameter("siteid", siteid);
  372. dbConnect.runSqlUpdate(sqlFactory);
  373. DeleteSQL deleteSQL = SQLFactory.createDeleteSQL(this, "plm_item_parts");
  374. deleteSQL.setSiteid(siteid);
  375. deleteSQL.setWhere("itemid", jsonArray.toArray());
  376. deleteSQL.delete();
  377. return getSucReturnObject().toString();
  378. }
  379. @API(title = "货品档案审核", apiversion = R.ID20220923153902.v1.class)
  380. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.v1.class})
  381. public String audit() throws YosException {
  382. JSONArray jsonArray = content.getJSONArray("itemids");
  383. String status = content.getString("status");
  384. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "plm_item", "itemid", "itemname");
  385. querySQL.setSiteid(siteid);
  386. querySQL.setWhere("itemid", jsonArray.toArray());
  387. Rows query = querySQL.query();
  388. ArrayList<String> sqlList = new ArrayList<>();
  389. for (Row row : query) {
  390. long itemid = row.getLong("itemid");
  391. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "plm_item");
  392. updateSQL.setSiteid(siteid);
  393. updateSQL.setWhere("itemid", itemid);
  394. updateSQL.setValue("status", status.equals("0") ? "新建" : "审核");
  395. updateSQL.setValue("isonsale", 0);
  396. updateSQL.setValue("checkby", username);
  397. updateSQL.setValue("onsaledate", "null");
  398. if (status.equals("0")) {
  399. updateSQL.setValue("checkdate", "null");
  400. } else {
  401. updateSQL.setDateValue("checkdate");
  402. }
  403. sqlList.add(updateSQL.getSQL());
  404. // SQLFactory sqlFactory = new SQLFactory(this, "货品档案审核");
  405. // sqlFactory.addParameter("itemid", itemid);
  406. // sqlFactory.addParameter("siteid", siteid);
  407. // sqlFactory.addParameter("username", username);
  408. // sqlFactory.addParameter("status", status.equals("0") ? "新建" : "审核");
  409. // sqlFactory.addParameter("isonsale", 0);
  410. // sqlList.add(sqlFactory.getSQL());
  411. String s = status.equals("0") ? "反审核" : "审核";
  412. if (status.equals("0")) {
  413. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "下架", "下架商品:" + row.getString("itemname")).getSQL());
  414. }
  415. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, s, s + "商品:" + row.getString("itemname")).getSQL());
  416. }
  417. dbConnect.runSqlUpdate(sqlList);
  418. return getSucReturnObject().toString();
  419. }
  420. @API(title = "货品档案上架", apiversion = R.ID20220923154802.v1.class)
  421. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.v1.class})
  422. public String onsale() throws YosException {
  423. JSONArray jsonArray = content.getJSONArray("itemids");
  424. String isonsale = content.getString("isonsale");
  425. if (isonsale.equals("1")) {
  426. String sql = "SELECT DISTINCT itemid from sa_itemsaleclass WHERE itemid in " + jsonArray + " and siteid='" + siteid + "'";
  427. sql = sql.replace("[", "(").replace("]", ")");
  428. if (dbConnect.runSqlQuery(sql).size() < jsonArray.size()) {
  429. return getReturnObject().setCode("0155", new String[0]).toString();//存在没有营销类别的商品,无法上架!
  430. }
  431. SQLFactory isHas = new SQLFactory(this, "查询是否存在新建货品");
  432. isHas.addParameter_in("itemid", jsonArray.toArray());
  433. isHas.addParameter("siteid", siteid);
  434. Rows hasRows = dbConnect.runSqlQuery(isHas.getSQL(false));
  435. if (hasRows.isNotEmpty()) {
  436. return getReturnObject().setCode("0156", new String[0]).toString();//存在未审核的商品,无法上架!
  437. }
  438. SQLFactory isHasPrice = new SQLFactory(this, "查询是否存在未维护价格的商品");
  439. isHasPrice.addParameter_in("itemid", jsonArray.toArray());
  440. isHasPrice.addParameter("siteid", siteid);
  441. Rows hasPriceRows = dbConnect.runSqlQuery(isHasPrice.getSQL(false));
  442. if (hasPriceRows.isNotEmpty()) {
  443. return getReturnObject().setCode("0157", new String[0]).toString();//存在未维护价格的商品,无法上架!
  444. }
  445. }
  446. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "plm_item", "itemid", "itemname");
  447. querySQL.setSiteid(siteid);
  448. querySQL.setWhere("itemid", jsonArray.toArray());
  449. Rows query = querySQL.query();
  450. ArrayList<String> sqlList = new ArrayList<>();
  451. for (Row row : query) {
  452. Long id = row.getLong("itemid");
  453. // SQLFactory sqlFactory = new SQLFactory(this, "货品档案上架");
  454. // if (isonsale.equals("0")) {
  455. // sqlFactory = new SQLFactory(this, "货品档案下架");
  456. //
  457. // }
  458. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "plm_item");
  459. updateSQL.setSiteid(siteid);
  460. updateSQL.setWhere("itemid", id);
  461. updateSQL.setValue("isonsale", isonsale);
  462. updateSQL.setValue("onsaleby", username);
  463. if (isonsale.equals("0")) {
  464. updateSQL.setValue("onsaledate", "null");
  465. } else {
  466. updateSQL.setDateValue("onsaledate");
  467. updateSQL.setWhere("status", "审核");
  468. }
  469. sqlList.add(updateSQL.getSQL());
  470. // sqlFactory.addParameter("itemid", id);
  471. // sqlFactory.addParameter("siteid", siteid);
  472. // sqlFactory.addParameter("username", username);
  473. // sqlFactory.addParameter("isonsale", isonsale);
  474. // sqlList.add(sqlFactory.getSQL(false));
  475. String s = isonsale.equals("0") ? "下架" : "上架";
  476. sqlList.add(DataContrlLog.createLog(this, "plm_item", id, s, s + "商品:" + row.getString("itemname")).getSQL());
  477. }
  478. dbConnect.runSqlUpdate(sqlList);
  479. return getSucReturnObject().toString();
  480. }
  481. @API(title = "查询商品组", apiversion = R.ID20221216102302.v1.class)
  482. public String selectItemGroup() throws YosException {
  483. Long itemid = content.getLong("itemid");
  484. Boolean isexist = content.getBooleanValue("isexist");
  485. StringBuffer where = new StringBuffer(" 1=1 ");
  486. if (content.containsKey("where")) {
  487. JSONObject whereObject = content.getJSONObject("where");
  488. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  489. where.append(" and(");
  490. where.append("t1.groupname like'%").append(whereObject.getString("condition")).append("%' ");
  491. where.append(")");
  492. }
  493. }
  494. if (isexist) {
  495. ArrayList<Long> ids = new ArrayList<>();
  496. ids.add(itemid);
  497. Rows brandRows = Brand.getBrandRows(this, ids);
  498. ArrayList<String> sa_brandid = brandRows.toArrayList("sa_brandid");
  499. sa_brandid.add("0");
  500. String replace = sa_brandid.toString().replace("[", "(").replace("]", ")");
  501. where.append(" and t1.sa_itemgroupid not in (select sa_itemgroupid from sa_itemgroupmx where siteid='");
  502. where.append(siteid).append("' and itemid =").append(itemid).append(") and t1.sa_brandid in ").append(replace);
  503. } else {
  504. where.append(" and t2.itemid =").append(itemid);
  505. }
  506. SQLFactory sqlFactory = new SQLFactory(this, "查询商品组", pageSize, pageNumber, pageSorting);
  507. sqlFactory.addParameter("siteid", siteid);
  508. sqlFactory.addParameter_SQL("where", where);
  509. String sql = sqlFactory.getSQL();
  510. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  511. return getSucReturnObject().setData(rows).toString();
  512. }
  513. @API(title = "查询商品资料", apiversion = R.ID20221216105402.v1.class)
  514. public String selectTechnicalinfo() throws YosException {
  515. Long itemid = content.getLong("itemid");
  516. StringBuffer where = new StringBuffer(" 1=1 ");
  517. if (content.containsKey("where")) {
  518. JSONObject whereObject = content.getJSONObject("where");
  519. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  520. where.append(" and(");
  521. where.append("t1.type like'%").append(whereObject.getString("condition")).append("%' ");
  522. where.append("or t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  523. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  524. where.append(")");
  525. }
  526. }
  527. SQLFactory sqlFactory = new SQLFactory(this, "查询产品资料", pageSize, pageNumber, pageSorting);
  528. sqlFactory.addParameter("siteid", siteid);
  529. sqlFactory.addParameter("itemid", itemid);
  530. sqlFactory.addParameter_SQL("where", where);
  531. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  532. ArrayList<Long> ids = rows.toArrayList("plm_technicalinfoid", new ArrayList<>());
  533. // 默认商品图片
  534. Rows defaultImageRows = beans.Item.Item.getItemdefaultImage(this);
  535. // 封面cover
  536. RowsMap coverRowsMap = getAttachmentUrl("plm_technicalinfo", ids, "cover");
  537. // 附件
  538. RowsMap attRowsMap = getAttachmentUrl("plm_technicalinfo", ids);
  539. for (Row row : rows) {
  540. Rows coverRows = coverRowsMap.get(row.getString("plm_technicalinfoid"));
  541. if (coverRows.isEmpty()) {
  542. if (!defaultImageRows.isEmpty()) {
  543. row.put("cover", defaultImageRows.get(0).getString("url"));
  544. } else {
  545. row.put("cover", "");
  546. }
  547. } else {
  548. row.put("cover", coverRows.get(0).getString("url"));
  549. }
  550. row.put("attinfos", attRowsMap.getOrDefault(row.getString("plm_technicalinfoid"), new Rows()));
  551. }
  552. return getSucReturnObject().setData(rows).toString();
  553. }
  554. @API(title = "查询商品价格", apiversion = R.ID20221216134102.v1.class)
  555. public String selectItemPrice() throws YosException {
  556. Long itemid = content.getLong("itemid");
  557. StringBuffer where = new StringBuffer(" 1=1 ");
  558. if (content.containsKey("where")) {
  559. JSONObject whereObject = content.getJSONObject("where");
  560. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  561. where.append(" and(");
  562. where.append("t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  563. where.append("or t1.pricegrade like'%").append(whereObject.getString("condition")).append("%' ");
  564. where.append(")");
  565. }
  566. }
  567. SQLFactory sqlFactory = new SQLFactory(this, "查询商品价格", pageSize, pageNumber, pageSorting);
  568. sqlFactory.addParameter("siteid", siteid);
  569. sqlFactory.addParameter("itemid", itemid);
  570. sqlFactory.addParameter_SQL("where", where);
  571. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  572. return getSucReturnObject().setData(rows).toString();
  573. }
  574. @API(title = "货品档案导入模板", apiversion = R.ID20230311102404.v1.class)
  575. public String downloadExcel() throws YosException {
  576. boolean isInsert = true;
  577. if (content.containsKey("isInsert")) {
  578. isInsert = content.getBoolean("isInsert");
  579. }
  580. ExcelFactory excelFactory = new ExcelFactory("货品档案导入模板");
  581. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
  582. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  583. CellStyle style = xssfFWorkbook.createCellStyle();
  584. DataFormat format = xssfFWorkbook.createDataFormat();
  585. style.setDataFormat(format.getFormat("@"));
  586. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  587. for (int i = 0; i <= 32; i++) {
  588. if (siteid.equals("HY")) {
  589. if (i == 9 || i == 10 || i == 14 || i == 16 || i == 13) {
  590. continue;
  591. }
  592. } else {
  593. if (i == 9 || i == 10 || i == 13 || i == 15 || i == 12) {
  594. continue;
  595. }
  596. }
  597. sheet.setDefaultColumnStyle(i, style);
  598. }
  599. // 设置工作薄列宽
  600. ExportExcel.setBatchDetailSheetColumn1(sheet);// 设置工作薄列宽
  601. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  602. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  603. XSSFCellStyle titleCellStyle3 = ExportExcel.createTitleCellStyle3(xssfFWorkbook);
  604. XSSFCellStyle titleCellStyle4 = ExportExcel.createBodyCellStyle4(xssfFWorkbook);
  605. ExportExcel.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, titleCellStyle4, xssfFWorkbook, isInsert, siteid);
  606. Rows aa = uploadExcelToObs(excelFactory);
  607. String url = "";
  608. if (!aa.isEmpty()) {
  609. url = aa.get(0).getString("url");
  610. }
  611. return getSucReturnObject().setData(url).toString();
  612. }
  613. @API(title = "货品档案新增导入", apiversion = R.ID20230311111404.v1.class)
  614. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.class})
  615. public String importItems() throws YosException {
  616. ArrayList<String> sqlList = new ArrayList<>();
  617. ExcelFactory e;
  618. try {
  619. // 华为云
  620. e = getPostExcelFactory(content.getLong("attachmentid"));
  621. // 本地
  622. //e = getPostExcelFactory();
  623. ArrayList<String> keys = new ArrayList<>();
  624. keys.add("itemno");
  625. keys.add("itemname");
  626. keys.add("spec");
  627. keys.add("caliber");
  628. keys.add("nominalpressure");
  629. keys.add("model");
  630. keys.add("categories");
  631. keys.add("unitname");
  632. keys.add("erpitemname");
  633. keys.add("erpitemno");
  634. keys.add("standards");
  635. keys.add("standardsmx");
  636. keys.add("orderminqty");
  637. keys.add("orderaddqty");
  638. keys.add("material");
  639. keys.add("stockstatus1");
  640. keys.add("stockstatus2");
  641. keys.add("tradefield");
  642. keys.add("delivery");
  643. keys.add("prodline");
  644. keys.add("device");
  645. keys.add("specalnote");
  646. keys.add("isservice");
  647. keys.add("pressure");
  648. keys.add("butterflyplatedrive");
  649. keys.add("connection");
  650. keys.add("valveplatematerial");
  651. keys.add("bodymaterial");
  652. keys.add("actuatortype");
  653. keys.add("actuatorbrand");
  654. keys.add("isbutterfly");
  655. keys.add("brandname");
  656. keys.add("itemclassnum");
  657. keys.add("groupnum");
  658. HashMap<String, CellType> cellmap = new HashMap<>();
  659. for (String key : keys) {
  660. cellmap.put(key, CellType.STRING);
  661. }
  662. Rows rows = e.getSheetRows(0, keys, cellmap, 3);
  663. for (Row row : rows) {
  664. row.put("itemno", row.getString("itemno").trim());
  665. }
  666. Rows rowserr = new Rows();
  667. Rows rowssuc = new Rows();
  668. Boolean iserr = verify(rows, rowserr, rowssuc, true);
  669. if (!rowssuc.isEmpty()) {
  670. for (Row row : rowssuc) {
  671. String orderminqty = row.getString("orderminqty");
  672. String orderaddqty = row.getString("orderaddqty");
  673. String delivery = row.getString("delivery");
  674. String stockstatus2 = row.getString("stockstatus2");
  675. String stockstatus1 = row.getString("stockstatus1");
  676. Long itemid = createTableID("plm_item");
  677. SQLFactory sqlFactory = new SQLFactory(this, "货品档案新增");
  678. sqlFactory.addParameter("siteid", siteid);
  679. sqlFactory.addParameter("itemid", itemid);
  680. sqlFactory.addParameter("username", username);
  681. sqlFactory.addParameter("userid", userid);
  682. sqlFactory.addParameter("itemno", row.getString("itemno").trim());
  683. sqlFactory.addParameter("unitid", row.getLong("unitid"));
  684. sqlFactory.addParameter("isauxunit", 0);
  685. sqlFactory.addParameter("unitgroupid", "null");
  686. sqlFactory.addParameter("itemname", row.getString("itemname"));
  687. sqlFactory.addParameter("isonsale", 0);
  688. sqlFactory.addParameter("model", row.getString("model"));
  689. sqlFactory.addParameter("spec", row.getString("spec"));
  690. // 订单起订量
  691. sqlFactory.addParameter("orderminqty", StringUtils.isEmpty(orderminqty) ? "null" : orderminqty);
  692. // 订单增量
  693. sqlFactory.addParameter("orderaddqty", StringUtils.isEmpty(orderaddqty) ? "null" : orderaddqty);
  694. // 订单起订量控制单位(0:主单位;1:辅助单位)
  695. sqlFactory.addParameter("orderminqty_auxunit", 0);
  696. // 订单增量控制单位(0:主单位;1:辅助单位)
  697. sqlFactory.addParameter("orderaddqty_auxunit", 0);
  698. // 说明
  699. sqlFactory.addParameter("remarks", "null");
  700. // 商品条形码
  701. sqlFactory.addParameter("barcode", "null");
  702. // 是否单品管理
  703. sqlFactory.addParameter("skucontrol", 0);
  704. // 是否批次管理
  705. sqlFactory.addParameter("batchcontrol", 0);
  706. // 毛重(g)
  707. sqlFactory.addParameter("grossweight", "null");
  708. // 净重(g)
  709. sqlFactory.addParameter("weight", "null");
  710. // 高度(mm)
  711. sqlFactory.addParameter("height", "null");
  712. // 宽度(mm)
  713. sqlFactory.addParameter("width", "null");
  714. // 长度(mm)
  715. sqlFactory.addParameter("length", "null");
  716. // 交期
  717. sqlFactory.addParameter("delivery", StringUtils.isEmpty(delivery) ? "null" : delivery);
  718. // 牌价
  719. sqlFactory.addParameter("marketprice", 0);
  720. // 是否工具
  721. sqlFactory.addParameter("istool", 0);
  722. // 产品标准
  723. sqlFactory.addParameter("standards", row.getString("standards"));
  724. // 产品标准明细
  725. sqlFactory.addParameter("standardsmx", row.getString("standardsmx"));
  726. // 库存缺货标准
  727. sqlFactory.addParameter("stockstatus2", StringUtils.isEmpty(stockstatus2) ? "null" : stockstatus2);
  728. // 库存充足标准
  729. sqlFactory.addParameter("stockstatus1", StringUtils.isEmpty(stockstatus1) ? "null" : stockstatus1);
  730. // 保修期(年)
  731. sqlFactory.addParameter("warrantyday", "null");
  732. // 是否营销物料
  733. sqlFactory.addParameter("iswuliao", 0);
  734. // 是否服务物料
  735. sqlFactory.addParameter("isservice", row.getString("isservice"));
  736. sqlFactory.addParameter("packqty", "1");
  737. sqlFactory.addParameter("explains", "");
  738. sqlFactory.addParameter("goodstype", "");
  739. sqlFactory.addParameter("assistance", "");
  740. sqlList.add(sqlFactory.getSQL());
  741. // 货品档案扩展属性字段表
  742. sqlFactory = new SQLFactory(this, "货品档案-扩展新增");
  743. Long plm_itemextendid = createTableID("plm_itemextend");
  744. sqlFactory.addParameter("siteid", siteid);
  745. sqlFactory.addParameter("userid", userid);
  746. sqlFactory.addParameter("username", username);
  747. sqlFactory.addParameter("plm_itemextendid", plm_itemextendid);
  748. sqlFactory.addParameter("itemid", itemid);
  749. sqlFactory.addParameter("material", row.getString("material"));
  750. sqlFactory.addParameter("pressure", row.getString("pressure"));
  751. sqlFactory.addParameter("butterflyplatedrive", row.getString("butterflyplatedrive"));
  752. sqlFactory.addParameter("connection", row.getString("connection"));
  753. sqlFactory.addParameter("valveplatematerial", row.getString("valveplatematerial"));
  754. sqlFactory.addParameter("bodymaterial", row.getString("bodymaterial"));
  755. sqlFactory.addParameter("actuatortype", row.getString("actuatortype"));
  756. sqlFactory.addParameter("actuatorbrand", row.getString("actuatorbrand"));
  757. sqlFactory.addParameter("isbutterfly", row.getString("isbutterfly"));
  758. sqlFactory.addParameter("erpitemno", row.getString("erpitemno"));
  759. sqlFactory.addParameter("erpitemname", row.getString("erpitemname"));
  760. sqlFactory.addParameter("specalnote", row.getString("specalnote"));
  761. sqlFactory.addParameter("prodline", row.getString("prodline"));
  762. sqlFactory.addParameter("device", row.getString("device"));
  763. sqlFactory.addParameter("actuatordrivetype", "null");
  764. sqlFactory.addParameter("categories", row.getString("categories"));
  765. if (siteid.equals("HY")) {
  766. sqlFactory.addParameter("caliber", row.getString("caliber"));
  767. JSONArray jsonArray = new JSONArray();
  768. jsonArray.add(row.getString("nominalpressure"));
  769. Object value = row.get("nominalpressure");
  770. String[] nominalpressure = value.toString().split("/");
  771. if (value.toString().contains("\n")) {
  772. nominalpressure = value.toString().split("\n");
  773. }
  774. JSONArray nominalpressureJsonArray = JSONArray.parseArray(JSON.toJSONString(nominalpressure));
  775. sqlFactory.addParameter("nominalpressure", nominalpressureJsonArray.toJSONString());
  776. } else {
  777. sqlFactory.addParameter("caliber", "null");
  778. sqlFactory.addParameter("nominalpressure", "[]");
  779. }
  780. sqlList.add(sqlFactory.getSQL());
  781. Long plm_item_tradefieldid = createTableID("plm_item_tradefield");
  782. sqlFactory = new SQLFactory(this, "新增领域");
  783. sqlFactory.addParameter("siteid", siteid);
  784. sqlFactory.addParameter("plm_item_tradefieldid", plm_item_tradefieldid);
  785. sqlFactory.addParameter("tradefield", row.getString("tradefield"));
  786. sqlFactory.addParameter("userid", userid);
  787. sqlFactory.addParameter("itemid", itemid);
  788. sqlList.add(sqlFactory.getSQL());
  789. JSONArray itemclassids = row.getJSONArray("itemclassid");
  790. if (itemclassids.size() > 0) {
  791. for (Object id : itemclassids) {
  792. Long sa_itemsaleclassid = createTableID("sa_itemsaleclass");
  793. sqlFactory = new SQLFactory(this, "新增营销类别");
  794. sqlFactory.addParameter("siteid", siteid);
  795. sqlFactory.addParameter("sa_itemsaleclassid", sa_itemsaleclassid);
  796. sqlFactory.addParameter("itemclassid", id);
  797. sqlFactory.addParameter("itemno", row.getString("itemno"));
  798. sqlFactory.addParameter("itemid", itemid);
  799. sqlList.add(sqlFactory.getSQL());
  800. sqlList.add(DataContrlLog.createLog(this, "sa_itemsaleclass", sa_itemsaleclassid, "新增", "货品档案导入").getSQL());
  801. }
  802. }
  803. JSONArray sa_itemgroupids = row.getJSONArray("sa_itemgroupids");
  804. if (sa_itemgroupids.size() > 0) {
  805. sqlList.add("DELETE FROM sa_itemgroupmx WHERE siteid='" + siteid + "' AND itemid=" + itemid);
  806. }
  807. for (Object obj : sa_itemgroupids) {
  808. long sa_itemgroupid = Long.parseLong(obj.toString());
  809. Long sa_itemgroupmxid = createTableID("sa_itemgroupmx");
  810. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_itemgroupmx");
  811. insertSQL.setSiteid(siteid);
  812. insertSQL.setUniqueid(sa_itemgroupmxid);
  813. insertSQL.setValue("sa_itemgroupid", sa_itemgroupid);
  814. insertSQL.setValue("itemid", itemid);
  815. insertSQL.setValue("itemno", row.getString("itemno"));
  816. insertSQL.setWhere(" not exists (select * from sa_itemgroupmx where itemid='" + itemid + "' and sa_itemgroupid=" + sa_itemgroupid + " and siteid='" + siteid + "')");
  817. sqlList.add(insertSQL.getSQL());
  818. sqlList.add(DataContrlLog.createLog(this, "sa_itemgroup", sa_itemgroupid, "新增", "货品档案导入").getSQL());
  819. }
  820. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "新增", "货品档案导入").getSQL());
  821. sqlList.add(DataContrlLog.createLog(this, "plm_itemextend", plm_itemextendid, "新增", "货品档案导入").getSQL());
  822. sqlList.add(DataContrlLog.createLog(this, "plm_item_tradefield", plm_item_tradefieldid, "新增", "货品档案导入").getSQL());
  823. }
  824. }
  825. if (!sqlList.isEmpty()) {
  826. dbConnect.runSqlUpdate(sqlList);
  827. ArrayList<String> sqlList2 = new ArrayList<>();
  828. for (Row row : rowssuc) {
  829. JSONArray sa_itemgroupids = row.getJSONArray("sa_itemgroupids");
  830. for (Object obj : sa_itemgroupids) {
  831. long sa_itemgroupid = Long.parseLong(obj.toString());
  832. Rows mxrows = dbConnect.runSqlQuery("SELECT itemid,itemno FROM sa_itemgroupmx WHERE sa_itemgroupid=" + sa_itemgroupid + " ORDER BY sa_itemgroupmxid LIMIT 1");
  833. if (mxrows.isNotEmpty()) {
  834. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_itemgroup");
  835. updateSQL.setUniqueid(sa_itemgroupid);
  836. updateSQL.setSiteid(siteid);
  837. updateSQL.setValue("itemid", mxrows.getRow(0).getLong("itemid"));
  838. updateSQL.setValue("itemno", mxrows.getRow(0).getString("itemno"));
  839. sqlList2.add(updateSQL.getSQL());
  840. }
  841. }
  842. }
  843. dbConnect.runSqlUpdate(sqlList2);
  844. }
  845. if (iserr) {
  846. String url = errImport(rowserr, true);
  847. return getErrReturnObject().setErrMsg(url).toString();
  848. }
  849. } catch (Exception e1) {
  850. e1.printStackTrace();
  851. return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
  852. }
  853. return getSucReturnObject().toString();
  854. }
  855. public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows,
  856. HashMap<String, String> titlemap, Boolean isInsert) {
  857. ArrayList<String> keylist = datarows.getFieldList();
  858. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
  859. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  860. XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
  861. XSSFFont font = xssfFWorkbook.createFont();
  862. font.setColor((short) 0xa);
  863. font.setFontHeightInPoints((short) 12);
  864. font.setBold(true);
  865. xssfCellStyle1.setFont(font);
  866. CellStyle style = xssfFWorkbook.createCellStyle();
  867. DataFormat format = xssfFWorkbook.createDataFormat();
  868. style.setDataFormat(format.getFormat("@"));
  869. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  870. for (int i = 0; i <= 34; i++) {
  871. if (siteid.equals("HY")) {
  872. if (i == 9 || i == 10 || i == 14 || i == 16 || i == 13) {
  873. continue;
  874. }
  875. } else {
  876. if (i == 9 || i == 10 || i == 13 || i == 15 || i == 12) {
  877. continue;
  878. }
  879. }
  880. sheet.setDefaultColumnStyle(i, style);
  881. }
  882. ExportExcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
  883. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  884. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  885. XSSFCellStyle titleCellStyle3 = ExportExcel.createTitleCellStyle3(xssfFWorkbook);
  886. ExportExcel.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook, isInsert, siteid);// 写入标题
  887. for (int n = 0; n < datarows.size(); n++) {
  888. Row row = datarows.get(n);
  889. XSSFRow datarow = sheet.createRow(n + 3);
  890. for (int i1 = 0; i1 < keylist.size(); i1++) {
  891. Class fieldclazztype = datarows.getFieldMeta(keylist.get(i1)).getFieldtype();
  892. if (fieldclazztype == Integer.class) {
  893. datarow.createCell(i1).setCellValue(row.getInteger((String) keylist.get(i1)));
  894. } else if (fieldclazztype == Long.class) {
  895. datarow.createCell(i1).setCellValue(row.getLong((String) keylist.get(i1)));
  896. } else if (fieldclazztype == Float.class) {
  897. datarow.createCell(i1).setCellValue(row.getFloat((String) keylist.get(i1)));
  898. } else if (fieldclazztype == Double.class) {
  899. datarow.createCell(i1).setCellValue(row.getDouble((String) keylist.get(i1)));
  900. } else {
  901. datarow.createCell(i1).setCellValue(row.getString((String) keylist.get(i1)));
  902. }
  903. if (i1 == 34) {
  904. datarow.getCell(i1).setCellStyle(xssfCellStyle1);
  905. }
  906. }
  907. }
  908. return sheet;
  909. }
  910. @API(title = "添加商品组", apiversion = R.ID20230331094304.v1.class)
  911. @CACHEING_CLEAN(apiversions = {R.ID20220922164403.v1.class, R.ID20220923101603.v1.class})
  912. public String insertitemgroup() throws YosException {
  913. ArrayList<String> sqlList = new ArrayList<>();
  914. Long itemid = content.getLong("itemid");
  915. String itemno = content.getString("itemno");
  916. Long sa_itemgroupid = content.getLong("sa_itemgroupid");
  917. String groupname;
  918. String groupnum;
  919. if (sa_itemgroupid <= 0 || dbConnect.runSqlQuery("select 1 from sa_itemgroup where siteid='" + siteid + "' and sa_itemgroupid=" + sa_itemgroupid).isEmpty()) {
  920. sa_itemgroupid = createTableID("sa_itemgroup");
  921. long sa_brandid = content.getLong("sa_brandid");
  922. groupname = content.getString("groupname");
  923. long sequence = content.getLongValue("sequence", 0L);
  924. Rows rows = dbConnect.runSqlQuery("select sequence from sa_itemgroup where siteid = '" + siteid + "' order by sequence asc");
  925. if (rows.isNotEmpty() && rows.toArrayList("sequence").contains(Long.toString(sequence))) {
  926. if (sequence <= rows.getLastRow().getLong("sequence")) {
  927. sqlList.add("update sa_itemgroup set sequence = sequence+1 where siteid = '" + siteid + "' and sequence >= " + sequence);
  928. }
  929. }
  930. SQLFactory sqlAddFactory = new SQLFactory(this, "商品组新增");
  931. groupnum = createBillCode("itemgroup");
  932. sqlAddFactory.addParameter("sa_itemgroupid", sa_itemgroupid);
  933. sqlAddFactory.addParameter("siteid", siteid);
  934. sqlAddFactory.addParameter("groupname", groupname);
  935. sqlAddFactory.addParameter("itemno", itemno);
  936. sqlAddFactory.addParameter("username", username);
  937. sqlAddFactory.addParameter("groupnum", groupnum);
  938. sqlAddFactory.addParameter("tradefield", "");
  939. sqlAddFactory.addParameter("sa_brandid", sa_brandid);
  940. sqlAddFactory.addParameter("sequence", sequence);
  941. sqlAddFactory.addParameter("itemid", itemid);
  942. sqlList.add(sqlAddFactory.getSQL());
  943. } else {
  944. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_itemgroup", "groupnum", "groupname");
  945. querySQL.setTableAlias("t1");
  946. querySQL.setSiteid(siteid);
  947. querySQL.setWhere("sa_itemgroupid", sa_itemgroupid);
  948. Rows query = querySQL.query();
  949. groupnum = query.get(0).getString("groupnum");
  950. groupname = query.get(0).getString("groupname");
  951. }
  952. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "添加商品组", "添加商品组:" + groupnum + "-" + groupname).getSQL());
  953. Rows itemgroupmxsequence = dbConnect.runSqlQuery("select sequence from sa_itemgroupmx where siteid='" + siteid + "' and sa_itemgroupid=" + sa_itemgroupid);
  954. long sequence = 1L;
  955. if (itemgroupmxsequence.isNotEmpty()) {
  956. sequence = itemgroupmxsequence.getLastRow().getLong("sequence") + 1;
  957. }
  958. SQLFactory saleFactory = new SQLFactory(this, "商品组商品明细新增");
  959. saleFactory.addParameter("siteid", siteid);
  960. saleFactory.addParameter("sequence", sequence);
  961. saleFactory.addParameter("sa_itemgroupmxid", createTableID("sa_itemgroupmx"));
  962. saleFactory.addParameter("itemid", itemid);
  963. saleFactory.addParameter("itemno", itemno);
  964. saleFactory.addParameter("sa_itemgroupid", sa_itemgroupid);
  965. sqlList.add(saleFactory.getSQL());
  966. dbConnect.runSqlUpdate(sqlList);
  967. Rows itemtradefield = dbConnect.runSqlQuery("select distinct t2.tradefield from sa_itemgroupmx t1 inner join plm_item_tradefield t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where sa_itemgroupid=" + sa_itemgroupid);
  968. StringBuilder stringBuilder = new StringBuilder();
  969. if (!itemtradefield.isEmpty()) {
  970. for (String tradefield : itemtradefield.toArrayList("tradefield")) {
  971. stringBuilder.append(tradefield).append(",");
  972. }
  973. if (stringBuilder.length() > 0) {
  974. stringBuilder.deleteCharAt(stringBuilder.length() - 1);
  975. }
  976. }
  977. dbConnect.runSqlUpdate("update sa_itemgroup set tradefield='" + stringBuilder + "' where sa_itemgroupid=" + sa_itemgroupid);
  978. return getSucReturnObject().toString();
  979. }
  980. @API(title = "商品组删除指定商品", apiversion = R.ID20230404111404.v1.class)
  981. @CACHEING_CLEAN(apiversions = {R.ID20220922164403.v1.class, R.ID20220923101603.v1.class})
  982. public String deleteitemgroupmx() throws YosException {
  983. ArrayList<String> sqlList = new ArrayList<>();
  984. Long itemid = content.getLong("itemid");
  985. Long sa_itemgroupid = content.getLong("sa_itemgroupid");
  986. String sql = "DELETE FROM sa_itemgroupmx WHERE sa_itemgroupid =" + sa_itemgroupid + " and itemid=" + itemid;
  987. sqlList.add(sql);
  988. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_itemgroup", "groupnum", "groupname");
  989. querySQL.setTableAlias("t1");
  990. querySQL.setSiteid(siteid);
  991. querySQL.setWhere("sa_itemgroupid", sa_itemgroupid);
  992. Rows query = querySQL.query();
  993. for (Row row : query) {
  994. String groupnum = row.getString("groupnum");
  995. String groupname = row.getString("groupname");
  996. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "删除商品组", "删除商品组:" + groupnum + "-" + groupname).getSQL());
  997. }
  998. dbConnect.runSqlUpdate(sqlList);
  999. Rows itemtradefield = dbConnect.runSqlQuery("select distinct t2.tradefield from sa_itemgroupmx t1 inner join plm_item_tradefield t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where sa_itemgroupid=" + sa_itemgroupid);
  1000. StringBuilder stringBuilder = new StringBuilder();
  1001. if (!itemtradefield.isEmpty()) {
  1002. for (String tradefield : itemtradefield.toArrayList("tradefield")) {
  1003. stringBuilder.append(tradefield).append(",");
  1004. }
  1005. if (stringBuilder.length() > 0) {
  1006. stringBuilder.deleteCharAt(stringBuilder.length() - 1);
  1007. }
  1008. }
  1009. dbConnect.runSqlUpdate("update sa_itemgroup set tradefield='" + stringBuilder + "' where sa_itemgroupid=" + sa_itemgroupid);
  1010. return getSucReturnObject().toString();
  1011. }
  1012. @API(title = "设置商品大类提成方案", apiversion = R.ID20240311150704.v1.class)
  1013. public String setitemcategoriesreward() throws YosException {
  1014. // true 新增 false 编辑
  1015. boolean action = content.getBooleanValue("action");
  1016. String type = content.getString("type");
  1017. String value = content.getString("value");
  1018. List<JSONObject> valuereward = content.getJSONArray("valuereward").toJavaList(JSONObject.class);
  1019. if (action && dbConnect.runSqlQuery("select 1 from plm_item_categories_reward where siteid='" + siteid + "' and type='" + type + "' and value='" + value + "'").isNotEmpty()) {
  1020. if (type.equals("领域")) {
  1021. return getReturnObject().setCode("0158", new String[0]).toString();//该领域提成方案已存在
  1022. } else if (type.equals("商品大类")) {
  1023. return getReturnObject().setCode("0159", new String[0]).toString();//该商品大类提成方案已存在
  1024. } else {
  1025. return getErrReturnObject().toString();
  1026. }
  1027. }
  1028. if (valuereward.isEmpty()) {
  1029. return getReturnObject().setCode("0160", new String[0]).toString();//提成方案不能为空
  1030. }
  1031. valuereward.sort((o1, o2) -> {
  1032. try {
  1033. String rewardstart1 = o1.getString("rewardstart");
  1034. String rewardend1 = o1.getString("rewardend");
  1035. String rewardstart2 = o2.getString("rewardstart");
  1036. String rewardend2 = o2.getString("rewardend");
  1037. if (StringUtils.isEmpty(rewardstart1)) {
  1038. return -1;
  1039. } else if (StringUtils.isEmpty(rewardend1)) {
  1040. return 1;
  1041. } else if (StringUtils.isEmpty(rewardstart2)) {
  1042. return 1;
  1043. } else if (StringUtils.isEmpty(rewardend2)) {
  1044. return -1;
  1045. }
  1046. return rewardstart1.compareTo(rewardstart2);
  1047. } catch (YosException e) {
  1048. throw new RuntimeException(e);
  1049. }
  1050. });
  1051. for (int i = 0; i < valuereward.size(); i++) {
  1052. if (i == valuereward.size() - 1) {
  1053. break;
  1054. }
  1055. JSONObject row = valuereward.get(i);
  1056. JSONObject row1 = valuereward.get(i + 1);
  1057. String rewardend = row.getString("rewardend");
  1058. Boolean includerewardend = row.getBooleanValue("includerewardend");
  1059. String rewardstart = row1.getString("rewardstart");
  1060. Boolean includerewardstart = row1.getBooleanValue("includerewardstart");
  1061. if (rewardend.compareTo(rewardstart) > 0 || StringUtils.isEmpty(rewardend)) {
  1062. return getReturnObject().setCode("0161", new String[]{(StringUtils.isNotEmpty(rewardstart) ? new BigDecimal(rewardstart).multiply(BigDecimal.valueOf(100)) + "%" : rewardstart), (StringUtils.isNotEmpty(rewardend) ? new BigDecimal(rewardend).multiply(BigDecimal.valueOf(100)) + "%" : rewardend)}).toString();//存在重复折扣区间【"(StringUtils.isNotEmpty(rewardstart) ? new BigDecimal(rewardstart).multiply(BigDecimal.valueOf(100)) + "%" : rewardstart) + "~" + (StringUtils.isNotEmpty(rewardend) ? new BigDecimal(rewardend).multiply(BigDecimal.valueOf(100)) + "%" : rewardend)+ "】"
  1063. }
  1064. if (rewardend.compareTo(rewardstart) == 0 && includerewardend && includerewardstart) {
  1065. return getReturnObject().setCode("0162", new String[]{String.valueOf(new BigDecimal(rewardstart).multiply(BigDecimal.valueOf(100)))}).toString();//多个区间包含此折扣值【"+ new BigDecimal(rewardstart).multiply(BigDecimal.valueOf(100)) + "%】
  1066. }
  1067. }
  1068. ArrayList<String> sqlList = new ArrayList<>();
  1069. sqlList.add("delete from plm_item_categories_reward where siteid='" + siteid + "' and type='" + type + "' and value='" + value + "'");
  1070. for (JSONObject row : valuereward) {
  1071. SQLFactory sqlFactory = new SQLFactory(this, "商品提成方案新增");
  1072. sqlFactory.addParameter("siteid", siteid);
  1073. sqlFactory.addParameter("plm_item_categories_rewardid", createTableID("plm_item_categories_reward"));
  1074. sqlFactory.addParameter("userid", userid);
  1075. sqlFactory.addParameter("username", username);
  1076. sqlFactory.addParameter("value", value);
  1077. sqlFactory.addParameter("type", type);
  1078. sqlFactory.addParameter("reward_rate", row.getBigDecimalValue("reward_rate"));
  1079. sqlFactory.addParameter("rewardtype", row.getStringValue("rewardtype"));
  1080. sqlFactory.addParameter("rewardstart", StringUtils.isEmpty(row.getString("rewardstart")) ? "null" : row.getString("rewardstart"));
  1081. sqlFactory.addParameter("includerewardstart", row.getString("includerewardstart"));
  1082. sqlFactory.addParameter("rewardend", StringUtils.isEmpty(row.getString("rewardend")) ? "null" : row.getString("rewardend"));
  1083. sqlFactory.addParameter("includerewardend", row.getString("includerewardend"));
  1084. sqlList.add(sqlFactory.getSQL());
  1085. }
  1086. if (action) {
  1087. sqlList.add(DataContrlLog.createLog(this, "plm_item_categories_reward", 0L, "新增", "新增【" + type + "】的【" + value + "】大类提成方案【" + valuereward + "】").getSQL());
  1088. } else {
  1089. sqlList.add(DataContrlLog.createLog(this, "plm_item_categories_reward", 0L, "编辑", "编辑【" + type + "】的【" + value + "】大类提成方案【" + valuereward + "】").getSQL());
  1090. }
  1091. dbConnect.runSqlUpdate(sqlList);
  1092. return getSucReturnObject().toString();
  1093. }
  1094. @API(title = "查询商品大类提成方案", apiversion = R.ID20240311150804.v1.class)
  1095. public String queryitemcategoriesreward() throws YosException {
  1096. String type = content.getString("type");
  1097. SQLFactory sqlFactory = new SQLFactory(this, "商品提成方案查询");
  1098. sqlFactory.addParameter("siteid", siteid);
  1099. sqlFactory.addParameter("type", type);
  1100. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  1101. for (Row row : rows) {
  1102. String rewardstart = row.getString("rewardstart");
  1103. String rewardend = row.getString("rewardend");
  1104. Boolean includerewardstart = row.getBoolean("includerewardstart");
  1105. Boolean includerewardend = row.getBoolean("includerewardend");
  1106. String reward_rate = (row.getBigDecimal("reward_rate").multiply(BigDecimal.valueOf(100))).setScale(2, RoundingMode.HALF_UP).toPlainString() + "%";
  1107. String remarksend = ",提成比例为" + reward_rate;
  1108. boolean iscategories = type.equals("商品大类");
  1109. if (StringUtils.isEmpty(rewardstart) && StringUtils.isEmpty(rewardend)) {
  1110. row.put("remarks", iscategories ? remarksend : "");
  1111. } else if (StringUtils.isNotEmpty(rewardstart) && StringUtils.isNotEmpty(rewardend)) {
  1112. rewardstart = new BigDecimal(rewardstart).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
  1113. rewardend = new BigDecimal(rewardend).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
  1114. if (includerewardstart && includerewardend) {
  1115. row.put("remarks", "当牌价的" + rewardstart + "%<=产品售价折扣<=" + rewardend + "%" + (iscategories ? remarksend : ""));
  1116. } else if (includerewardstart) {
  1117. row.put("remarks", "当牌价的" + rewardstart + "%<=产品售价折扣<" + rewardend + "%" + (iscategories ? remarksend : ""));
  1118. } else if (includerewardend) {
  1119. row.put("remarks", "当牌价的" + rewardstart + "%<产品售价折扣<=" + rewardend + "%" + (iscategories ? remarksend : ""));
  1120. } else {
  1121. row.put("remarks", "当牌价的" + rewardstart + "%<产品售价折扣<" + rewardend + "%" + (iscategories ? remarksend : ""));
  1122. }
  1123. } else if (StringUtils.isEmpty(rewardstart)) {
  1124. rewardend = new BigDecimal(rewardend).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
  1125. if (includerewardend) {
  1126. row.put("remarks", "当产品售价折扣<=" + rewardend + "%" + (iscategories ? remarksend : ""));
  1127. } else {
  1128. row.put("remarks", "当产品售价折扣<" + rewardend + "%" + (iscategories ? remarksend : ""));
  1129. }
  1130. } else {
  1131. rewardstart = new BigDecimal(rewardstart).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
  1132. if (includerewardstart) {
  1133. row.put("remarks", "当牌价的" + rewardstart + "%<=产品售价折扣" + (iscategories ? remarksend : ""));
  1134. } else {
  1135. row.put("remarks", "当牌价的" + rewardstart + "%<产品售价折扣" + (iscategories ? remarksend : ""));
  1136. }
  1137. }
  1138. }
  1139. return getSucReturnObject().setData(rows).toString();
  1140. }
  1141. @API(title = "查询商品大类提成方案明细", apiversion = R.ID20240313164004.v1.class)
  1142. public String querymxitemcategoriesreward() throws YosException {
  1143. String value = content.getString("value");
  1144. String type = content.getString("type");
  1145. Rows rows = dbConnect.runSqlQuery("select * from plm_item_categories_reward where siteid='" + siteid + "' and type='" + type + "' and value='" + value + "'");
  1146. return getSucReturnObject().setData(rows).toString();
  1147. }
  1148. @API(title = "删除商品大类提成方案", apiversion = R.ID20240313133204.v1.class)
  1149. public String deleteitemcategoriesreward() throws YosException {
  1150. String value = content.getString("value");
  1151. String type = content.getString("type");
  1152. dbConnect.runSqlUpdate("delete from plm_item_categories_reward where siteid='" + siteid + "' and type='" + type + "' and value='" + value + "'");
  1153. DataContrlLog.createLog(this, "plm_item_categories_reward", 0L, "删除", "删除【" + type + "】提成方案【" + value + "】").insert();
  1154. return getSucReturnObject().toString();
  1155. }
  1156. @API(title = "图片导入", apiversion = R.ID20230407164004.v1.class)
  1157. public String attionfosDownloadExcel() throws YosException {
  1158. ExcelFactory excelFactory = new ExcelFactory("货品图片导入模板");
  1159. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
  1160. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  1161. CellStyle style = xssfFWorkbook.createCellStyle();
  1162. DataFormat format = xssfFWorkbook.createDataFormat();
  1163. style.setDataFormat(format.getFormat("@"));
  1164. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  1165. for (int i = 0; i <= 1; i++) {
  1166. sheet.setDefaultColumnStyle(i, style);
  1167. }
  1168. // 设置工作薄列宽
  1169. ExportExcel.setBatchDetailSheetColumn1(sheet);// 设置工作薄列宽
  1170. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  1171. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  1172. XSSFCellStyle titleCellStyle3 = ExportExcel.createTitleCellStyle3(xssfFWorkbook);
  1173. XSSFCellStyle titleCellStyle4 = ExportExcel.createBodyCellStyle4(xssfFWorkbook);
  1174. ExportExcel.attionfosBatchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, titleCellStyle4, xssfFWorkbook);
  1175. Rows aa = uploadExcelToObs(excelFactory);
  1176. String url = "";
  1177. if (!aa.isEmpty()) {
  1178. url = aa.get(0).getString("url");
  1179. }
  1180. return getSucReturnObject().setData(url).toString();
  1181. }
  1182. @API(title = "货品图片导入", apiversion = R.ID20230407164104.v1.class)
  1183. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.class})
  1184. public String importItemsAttionfos() throws YosException {
  1185. ArrayList<String> sqlList = new ArrayList<>();
  1186. ExcelFactory e;
  1187. try {
  1188. // 华为云
  1189. e = getPostExcelFactory(content.getLong("attachmentid"));
  1190. // 本地
  1191. //e = getPostExcelFactory();
  1192. ArrayList<String> keys = new ArrayList<>();
  1193. keys.add("itemno");
  1194. keys.add("attionfosName");
  1195. HashMap<String, CellType> cellmap = new HashMap<>();
  1196. cellmap.put("itemno", CellType.STRING);
  1197. cellmap.put("attionfosName", CellType.STRING);
  1198. Rows rows = e.getSheetRows(0, keys, 3);
  1199. boolean iserr = false;
  1200. Rows rowserr = new Rows();
  1201. Rows rowssuc = new Rows();
  1202. String str = "select itemno,itemid from plm_item where isshow=1 and siteid='" + siteid + "' and itemno in " + rows.toJsonArray("itemno");
  1203. str = str.replace("[", "(").replace("]", ")");
  1204. RowsMap itemRowsMap = dbConnect.runSqlQuery(str).toRowsMap("itemno");
  1205. String postfix = "'xbm','tif','pjp','svgz','jpg','jpeg ','ico','tiff','gif','svg','jfif','webp','png','bmp','pjpeg','avif'";
  1206. str = "select attachmentid,document from sys_attachment where siteid='" + siteid + "' and type='sourcefile' and isfolder=0 and postfix in (" + postfix + ") and document in " + rows.toJsonArray("attionfosName");
  1207. str = str.replace("[", "(").replace("]", ")");
  1208. RowsMap attionfosRowsMap = dbConnect.runSqlQuery(str).toRowsMap("document");
  1209. for (Row row : rows) {
  1210. String itemno = row.getString("itemno");
  1211. String attionfosName = row.getString("attionfosName");
  1212. if (StringUtils.isEmpty(itemno) || StringUtils.isEmpty(attionfosName)) {
  1213. iserr = true;
  1214. row.put("msg", "错误信息:产品编号/图片名称不能为空");
  1215. rowserr.add(row);
  1216. continue;
  1217. }
  1218. if (!itemRowsMap.containsKey(itemno)) {
  1219. iserr = true;
  1220. row.put("msg", "错误信息:产品不存在");
  1221. rowserr.add(row);
  1222. continue;
  1223. }
  1224. if (!attionfosRowsMap.containsKey(attionfosName)) {
  1225. iserr = true;
  1226. row.put("msg", "错误信息:图片不存在");
  1227. rowserr.add(row);
  1228. continue;
  1229. }
  1230. if (attionfosRowsMap.get(attionfosName).size() > 1) {
  1231. iserr = true;
  1232. row.put("msg", "错误信息:存在重复图片名称,无法自动匹配");
  1233. rowserr.add(row);
  1234. continue;
  1235. } else {
  1236. row.put("attachmentid", attionfosRowsMap.get(attionfosName).get(0).getLong("attachmentid"));
  1237. row.put("itemid", itemRowsMap.get(itemno).get(0).getLong("itemid"));
  1238. }
  1239. rowssuc.add(row);
  1240. }
  1241. if (!rowssuc.isEmpty()) {
  1242. for (Row row : rowssuc) {
  1243. SQLFactory sqlFactory = new SQLFactory(this, "附件关联新增");
  1244. sqlFactory.addParameter("siteid", siteid);
  1245. sqlFactory.addParameter("linksid", createTableID("sys_attachment_links"));
  1246. sqlFactory.addParameter("attachmentid", row.getLong("attachmentid"));
  1247. sqlFactory.addParameter("ownerid", row.getLong("itemid"));
  1248. sqlFactory.addParameter("username", username);
  1249. sqlList.add(sqlFactory.getSQL());
  1250. }
  1251. }
  1252. if (!sqlList.isEmpty()) {
  1253. dbConnect.runSqlUpdate(sqlList);
  1254. cleanAllDataPool();
  1255. }
  1256. if (iserr) {
  1257. ExcelFactory excelFactory = new ExcelFactory("货品档案图片导入错误信息");
  1258. HashMap<String, String> map = new HashMap<String, String>();
  1259. map.put("itemno", "产品编码");
  1260. map.put("attionfosName", "图片名称");
  1261. map.put("msg", "错误信息");
  1262. ArrayList<String> colNameList = new ArrayList<String>();
  1263. HashMap<String, Class> keytypemap = new HashMap<String, Class>();
  1264. colNameList.add("itemno");
  1265. colNameList.add("attionfosName");
  1266. colNameList.add("msg");
  1267. keytypemap.put("itemno", String.class);
  1268. keytypemap.put("attionfosName", String.class);
  1269. keytypemap.put("msg", String.class);
  1270. rowserr.setFieldList(colNameList);
  1271. rowserr.setFieldTypeMap(keytypemap);
  1272. attionfosAddSheet(excelFactory, "Sheet1", rowserr, map);
  1273. Rows aa = uploadExcelToObs(excelFactory);
  1274. String url = "";
  1275. if (!aa.isEmpty()) {
  1276. url = aa.get(0).getString("url");
  1277. }
  1278. return getErrReturnObject().setErrMsg(url).toString();
  1279. }
  1280. } catch (Exception e1) {
  1281. e1.printStackTrace();
  1282. return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
  1283. }
  1284. return getSucReturnObject().toString();
  1285. }
  1286. public XSSFSheet attionfosAddSheet(ExcelFactory excelFactory, String sheetname, Rows datarows,
  1287. HashMap<String, String> titlemap) {
  1288. ArrayList<String> keylist = datarows.getFieldList();
  1289. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
  1290. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  1291. XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
  1292. XSSFFont font = xssfFWorkbook.createFont();
  1293. font.setColor((short) 0xa);
  1294. font.setFontHeightInPoints((short) 12);
  1295. font.setBold(true);
  1296. xssfCellStyle1.setFont(font);
  1297. CellStyle style = xssfFWorkbook.createCellStyle();
  1298. DataFormat format = xssfFWorkbook.createDataFormat();
  1299. style.setDataFormat(format.getFormat("@"));
  1300. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  1301. for (int i = 0; i <= 1; i++) {
  1302. sheet.setDefaultColumnStyle(i, style);
  1303. }
  1304. ExportExcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
  1305. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  1306. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  1307. XSSFCellStyle titleCellStyle3 = ExportExcel.createTitleCellStyle3(xssfFWorkbook);
  1308. ExportExcel.attionfosBatchDetailerr(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook);// 写入标题
  1309. for (int n = 0; n < datarows.size(); n++) {
  1310. Row row = datarows.get(n);
  1311. XSSFRow datarow = sheet.createRow(n + 3);
  1312. for (int i1 = 0; i1 < keylist.size(); i1++) {
  1313. Class fieldclazztype = datarows.getFieldMeta(keylist.get(i1)).getFieldtype();
  1314. if (fieldclazztype == Integer.class) {
  1315. datarow.createCell(i1).setCellValue(row.getInteger((String) keylist.get(i1)));
  1316. } else if (fieldclazztype == Long.class) {
  1317. datarow.createCell(i1).setCellValue(row.getLong((String) keylist.get(i1)));
  1318. } else if (fieldclazztype == Float.class) {
  1319. datarow.createCell(i1).setCellValue(row.getFloat((String) keylist.get(i1)));
  1320. } else if (fieldclazztype == Double.class) {
  1321. datarow.createCell(i1).setCellValue(row.getDouble((String) keylist.get(i1)));
  1322. } else {
  1323. datarow.createCell(i1).setCellValue(row.getString((String) keylist.get(i1)));
  1324. }
  1325. if (i1 == 2) {
  1326. datarow.getCell(i1).setCellStyle(xssfCellStyle1);
  1327. }
  1328. }
  1329. }
  1330. return sheet;
  1331. }
  1332. @API(title = "货品导入更新", apiversion = R.ID20230411155104.v1.class)
  1333. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.class})
  1334. public String updateitems() {
  1335. ArrayList<String> sqlList = new ArrayList<>();
  1336. ExcelFactory e;
  1337. try {
  1338. // 华为云
  1339. e = getPostExcelFactory(content.getLong("attachmentid"));
  1340. // 本地
  1341. //e = getPostExcelFactory();
  1342. ArrayList<String> keys = new ArrayList<>();
  1343. keys.add("itemno");
  1344. keys.add("itemname");
  1345. keys.add("spec");
  1346. keys.add("caliber");
  1347. keys.add("nominalpressure");
  1348. keys.add("model");
  1349. keys.add("categories");
  1350. keys.add("unitname");
  1351. keys.add("erpitemname");
  1352. keys.add("erpitemno");
  1353. keys.add("standards");
  1354. keys.add("standardsmx");
  1355. keys.add("orderminqty");
  1356. keys.add("orderaddqty");
  1357. keys.add("material");
  1358. keys.add("stockstatus1");
  1359. keys.add("stockstatus2");
  1360. keys.add("tradefield");
  1361. keys.add("delivery");
  1362. keys.add("prodline");
  1363. keys.add("device");
  1364. keys.add("specalnote");
  1365. keys.add("isservice");
  1366. keys.add("pressure");
  1367. keys.add("butterflyplatedrive");
  1368. keys.add("connection");
  1369. keys.add("valveplatematerial");
  1370. keys.add("bodymaterial");
  1371. keys.add("actuatortype");
  1372. keys.add("actuatorbrand");
  1373. keys.add("isbutterfly");
  1374. keys.add("brandname");
  1375. keys.add("itemclassnum");
  1376. keys.add("groupnum");
  1377. HashMap<String, CellType> cellmap = new HashMap<>();
  1378. cellmap.put("itemno", CellType.STRING);
  1379. cellmap.put("spec", CellType.STRING);
  1380. cellmap.put("model", CellType.STRING);
  1381. cellmap.put("erpitemno", CellType.STRING);
  1382. cellmap.put("itemclassnum", CellType.STRING);
  1383. Rows rows = e.getSheetRows(0, keys, cellmap, 3);
  1384. for (Row row : rows) {
  1385. row.put("itemno", row.getString("itemno").trim());
  1386. }
  1387. Rows rowserr = new Rows();
  1388. Rows rowssuc = new Rows();
  1389. Boolean iserr = verify(rows, rowserr, rowssuc, false);
  1390. // System.out.println(rowssuc.toString());
  1391. if (!rowssuc.isEmpty()) {
  1392. RowsMap plm_item = getTableColumns("plm_item");
  1393. RowsMap plm_item_tradefield = getTableColumns("plm_item_tradefield");
  1394. RowsMap sa_itemsaleclass = getTableColumns("sa_itemsaleclass");
  1395. RowsMap plm_itemextend = getTableColumns("plm_itemextend");
  1396. for (Row row : rowssuc) {
  1397. StringBuilder item_key = new StringBuilder();
  1398. StringBuilder item_tradefield_key = new StringBuilder();
  1399. StringBuilder item_tradefield_value = new StringBuilder();
  1400. StringBuilder itemclass_key = new StringBuilder();
  1401. StringBuilder itemclass_value = new StringBuilder();
  1402. StringBuilder itemextend_key = new StringBuilder();
  1403. for (String key : row.keySet()) {
  1404. Object value = row.get(key);
  1405. if (key.equals("nominalpressure") && StringUtils.isEmpty(value.toString())) {
  1406. value = "";
  1407. }
  1408. if (StringUtils.isNotEmpty(value.toString()) && !key.equals("itemid") && !key.equals("itemno")) {
  1409. String[] nominalpressure;
  1410. if (key.equals("nominalpressure")) {
  1411. nominalpressure = value.toString().split("/");
  1412. if (value.toString().contains("\n")) {
  1413. nominalpressure = value.toString().split("\n");
  1414. }
  1415. JSONArray nominalpressureJsonArray = JSONArray.parseArray(JSON.toJSONString(nominalpressure));
  1416. value = nominalpressureJsonArray.toJSONString();
  1417. }
  1418. if (plm_item.containsKey(key)) {
  1419. if (item_key.length() > 0) {
  1420. item_key.append(",");
  1421. }
  1422. item_key.append(key).append("='").append(value).append("'");
  1423. } else if (plm_item_tradefield.containsKey(key)) {
  1424. if (item_tradefield_key.length() > 0) {
  1425. item_tradefield_key.append(",");
  1426. }
  1427. if (item_tradefield_value.length() > 0) {
  1428. item_tradefield_value.append(",");
  1429. }
  1430. item_tradefield_key.append(key);
  1431. item_tradefield_value.append("'").append(value).append("'");
  1432. }
  1433. // else if (sa_itemsaleclass.containsKey(key)) {
  1434. // if (itemclass_key.length() > 0) {
  1435. // itemclass_key.append(",");
  1436. // }
  1437. // if (itemclass_value.length() > 0) {
  1438. // itemclass_value.append(",");
  1439. // }
  1440. // itemclass_key.append(key);
  1441. // itemclass_value.append("'").append(value).append("'");
  1442. // }
  1443. else if (plm_itemextend.containsKey(key)) {
  1444. if (itemextend_key.length() > 0) {
  1445. itemextend_key.append(",");
  1446. }
  1447. itemextend_key.append(key).append("='").append(value).append("'");
  1448. }
  1449. }
  1450. }
  1451. long itemid = row.getLong("itemid");
  1452. if (item_key.length() > 0) {
  1453. item_key.append(",changeuserid=").append(userid).append(",changeby='").append(username).append("',changedate=CURRENT_TIME");
  1454. sqlList.add("update plm_item set " + item_key + " where siteid='" + siteid + "' and itemid=" + itemid);
  1455. }
  1456. if (item_tradefield_key.length() > 0) {
  1457. sqlList.add("delete from plm_item_tradefield where siteid='" + siteid + "' and itemid=" + itemid);
  1458. long plm_item_tradefieldid = createTableID("plm_item_tradefield");
  1459. item_tradefield_key.append(",plm_item_tradefieldid,itemid,changeuserid,siteid");
  1460. item_tradefield_value.append(",").append(plm_item_tradefieldid).append(",").append(itemid).append(",").append(userid).append(",'").append(siteid).append("'");
  1461. sqlList.add("insert into plm_item_tradefield (" + item_tradefield_key + ") values(" + item_tradefield_value + ")");
  1462. }
  1463. if (row.getJSONArray("itemclassid").size() > 0) {
  1464. JSONArray itemclassids = row.getJSONArray("itemclassid");
  1465. sqlList.add("delete from sa_itemsaleclass where siteid='" + siteid + "' and itemid=" + itemid);
  1466. for (Object ids : itemclassids) {
  1467. StringBuilder itemclass_key2 = new StringBuilder();
  1468. StringBuilder itemclass_value2 = new StringBuilder();
  1469. long sa_itemsaleclassid = createTableID("sa_itemsaleclass");
  1470. itemclass_key2.append("itemclassid,sa_itemsaleclassid,itemid,itemno,siteid");
  1471. itemclass_value2.append(ids).append(",").append(sa_itemsaleclassid).append(",").append(itemid).append(",").append("'").append(row.getString("itemno")).append("'").append(",'").append(siteid).append("'");
  1472. sqlList.add("insert into sa_itemsaleclass (" + itemclass_key2 + ") values(" + itemclass_value2 + ")");
  1473. }
  1474. }
  1475. JSONArray sa_itemgroupids = row.getJSONArray("sa_itemgroupids");
  1476. if (sa_itemgroupids.size() > 0) {
  1477. sqlList.add("DELETE FROM sa_itemgroupmx WHERE siteid='" + siteid + "' AND itemid=" + itemid);
  1478. }
  1479. for (Object obj : sa_itemgroupids) {
  1480. long sa_itemgroupid = Long.parseLong(obj.toString());
  1481. Long sa_itemgroupmxid = createTableID("sa_itemgroupmx");
  1482. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_itemgroupmx");
  1483. insertSQL.setSiteid(siteid);
  1484. insertSQL.setUniqueid(sa_itemgroupmxid);
  1485. insertSQL.setValue("sa_itemgroupid", sa_itemgroupid);
  1486. insertSQL.setValue("itemid", itemid);
  1487. insertSQL.setValue("itemno", row.getString("itemno"));
  1488. insertSQL.setWhere(" not exists (select * from sa_itemgroupmx where itemid='" + itemid + "' and sa_itemgroupid=" + sa_itemgroupid + " and siteid='" + siteid + "')");
  1489. sqlList.add(insertSQL.getSQL());
  1490. sqlList.add(DataContrlLog.createLog(this, "sa_itemgroup", sa_itemgroupid, "新增", "货品档案导入").getSQL());
  1491. }
  1492. if (itemextend_key.length() > 0) {
  1493. itemextend_key.append(",changeuserid=").append(userid).append(",changeby='").append(username).append("',changedate=CURRENT_TIME");
  1494. if (StringUtils.isEmpty(row.get("nominalpressure").toString())) {
  1495. itemextend_key.append(",nominalpressure=null");
  1496. }
  1497. sqlList.add("update plm_itemextend set " + itemextend_key + " where siteid='" + siteid + "' and itemid=" + itemid);
  1498. }
  1499. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "编辑", "编辑导入修改").getSQL());
  1500. }
  1501. }
  1502. if (!sqlList.isEmpty()) {
  1503. dbConnect.runSqlUpdate(sqlList);
  1504. ArrayList<String> sqlList2 = new ArrayList<>();
  1505. for (Row row : rowssuc) {
  1506. JSONArray sa_itemgroupids = row.getJSONArray("sa_itemgroupids");
  1507. for (Object obj : sa_itemgroupids) {
  1508. long sa_itemgroupid = Long.parseLong(obj.toString());
  1509. Rows mxrows = dbConnect.runSqlQuery("SELECT itemid,itemno FROM sa_itemgroupmx WHERE sa_itemgroupid=" + sa_itemgroupid + " ORDER BY sa_itemgroupmxid LIMIT 1");
  1510. if (mxrows.isNotEmpty()) {
  1511. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_itemgroup");
  1512. updateSQL.setUniqueid(sa_itemgroupid);
  1513. updateSQL.setSiteid(siteid);
  1514. updateSQL.setValue("itemid", mxrows.getRow(0).getLong("itemid"));
  1515. updateSQL.setValue("itemno", mxrows.getRow(0).getString("itemno"));
  1516. sqlList2.add(updateSQL.getSQL());
  1517. }
  1518. }
  1519. }
  1520. dbConnect.runSqlUpdate(sqlList2);
  1521. System.err.println("货品导入更新结束");
  1522. }
  1523. if (iserr) {
  1524. String url = errImport(rowserr, false);
  1525. System.err.println("货品导入更新结束" + url);
  1526. return getErrReturnObject().setErrMsg(url).toString();
  1527. }
  1528. } catch (Exception e1) {
  1529. e1.printStackTrace();
  1530. return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
  1531. }
  1532. return getSucReturnObject().toString();
  1533. }
  1534. public Boolean verify(Rows rows, Rows rowserr, Rows rowssuc, Boolean isInsert) throws YosException {
  1535. RowsMap itemnoRowsMap = dbConnect.runSqlQuery("select itemid,itemno from plm_item t1 where isshow=1 and siteid='" + siteid + "'").toRowsMap("itemno");
  1536. RowsMap unitnameRowsMap = dbConnect.runSqlQuery("select unitid,unitname from plm_unit where siteid='" + siteid + "'").toRowsMap("unitname");
  1537. RowsMap typeRowsMap = dbConnect.runSqlQuery("select t1.typename,t2.value from sys_optiontype t1 left join sys_optiontypemx t2 on t1.optiontypeid=t2.optiontypeid and t2.siteid='" + siteid + "' where t1.typename in ('categories','tradefield','itemstandards','pressurelevel','itemmaterial','butterflyplatedrive','valveplatematerial','bodymaterial','actuatortype','actuatorbrand','connectionmode') and t2.isused=1").toRowsMap("typename");
  1538. RowsMap groupnumMap = dbConnect.runSqlQuery("SELECT groupnum,sa_itemgroupid from sa_itemgroup WHERE siteid='" + siteid + "' ").toRowsMap("groupnum");
  1539. RowsMap imitemnoRowsMap = rows.toRowsMap("itemno");
  1540. Rows itemcalss = dbConnect.runSqlQuery("select t1.sa_brandid,t1.brandname,t2.itemclassid,t2.itemclassnum from sa_brand t1 inner join plm_itemclass t2 on t1.siteid=t2.siteid and t1.sa_brandid=t2.sa_brandid where t1.siteid='" + siteid + "'");
  1541. RowsMap itemclassRowsMap = itemcalss.toRowsMap("brandname");
  1542. ArrayList<String> tradefield = typeRowsMap.get("tradefield").toArrayList("value");
  1543. ArrayList<String> itemstandards = typeRowsMap.get("itemstandards").toArrayList("value");
  1544. ArrayList<String> pressurelevel = typeRowsMap.get("pressurelevel").toArrayList("value");
  1545. ArrayList<String> itemmaterial = typeRowsMap.get("itemmaterial").toArrayList("value");
  1546. ArrayList<String> butterflyplatedrive = typeRowsMap.get("butterflyplatedrive").toArrayList("value");
  1547. ArrayList<String> valveplatematerial = typeRowsMap.get("valveplatematerial").toArrayList("value");
  1548. ArrayList<String> bodymaterial = typeRowsMap.get("bodymaterial").toArrayList("value");
  1549. ArrayList<String> actuatortype = typeRowsMap.get("actuatortype").toArrayList("value");
  1550. ArrayList<String> actuatorbrand = typeRowsMap.get("actuatorbrand").toArrayList("value");
  1551. ArrayList<String> connectionmode = typeRowsMap.get("connectionmode").toArrayList("value");
  1552. ArrayList<String> categories = typeRowsMap.get("categories").toArrayList("value");
  1553. for (Row row : rows) {
  1554. Boolean iserr = false;
  1555. StringBuffer errmsg = new StringBuffer("错误信息:");
  1556. String brandname = row.getString("brandname");
  1557. String itemclassnum = row.getString("itemclassnum");
  1558. String itemno = row.getString("itemno");
  1559. String unitname = row.getString("unitname");
  1560. try {
  1561. if (StringUtils.isNotEmpty(row.getString("orderminqty"))) row.getBigDecimal("orderminqty");
  1562. if (StringUtils.isNotEmpty(row.getString("orderaddqty"))) row.getBigDecimal("orderaddqty");
  1563. if (StringUtils.isNotEmpty(row.getString("stockstatus1"))) row.getBigDecimal("stockstatus1");
  1564. if (StringUtils.isNotEmpty(row.getString("stockstatus2"))) row.getBigDecimal("stockstatus2");
  1565. if (StringUtils.isNotEmpty(row.getString("delivery"))) row.getBigDecimal("delivery");
  1566. } catch (Exception e1) {
  1567. iserr = true;
  1568. errmsg.append("销售起订量/销售增量/库存充足标准/库存缺货标准/销售交期填写格式错误;");
  1569. // row.put("msg", "错误信息:销售起订量/销售增量/库存充足标准/库存缺货标准/销售交期填写格式错误");
  1570. // rowserr.add(row);
  1571. // continue;
  1572. }
  1573. if (isInsert) {
  1574. if (StringUtils.isEmpty(itemno)
  1575. || StringUtils.isEmpty(row.getString("itemname"))
  1576. || StringUtils.isEmpty(unitname)
  1577. || StringUtils.isEmpty(row.getString("erpitemname"))
  1578. || StringUtils.isEmpty(row.getString("erpitemno"))
  1579. || StringUtils.isEmpty(row.getString("tradefield"))) {
  1580. iserr = true;
  1581. errmsg.append("产品编号/产品名称/商品大类/计量单位/品号/品号/领域,不能为空;");
  1582. // row.put("msg", "错误信息:产品编号/产品名称/商品大类/计量单位/品号/品号/领域,不能为空");
  1583. // rowserr.add(row);
  1584. // continue;
  1585. }
  1586. if (StringUtils.isEmpty(row.getString("categories"))) {
  1587. iserr = true;
  1588. errmsg.append("产品编号/产品名称/商品大类/计量单位/品号/品号/领域,不能为空;");
  1589. // row.put("msg", "错误信息:产品编号/产品名称/商品大类/计量单位/品号/品号/领域,不能为空");
  1590. // rowserr.add(row);
  1591. // continue;
  1592. }
  1593. if (itemnoRowsMap.containsKey(itemno)) {
  1594. iserr = true;
  1595. errmsg.append("商品已存在;");
  1596. // row.put("msg", "错误信息:商品已存在");
  1597. // rowserr.add(row);
  1598. // continue;
  1599. }
  1600. row.put("isservice", row.getString("isservice").equals("是") ? 1 : 0);
  1601. row.put("isbutterfly", row.getString("isbutterfly").equals("是") ? 1 : 0);
  1602. } else {
  1603. if (!itemnoRowsMap.containsKey(itemno)) {
  1604. iserr = true;
  1605. errmsg.append("商品不存在;");
  1606. // row.put("msg", "错误信息:商品不存在");
  1607. // rowserr.add(row);
  1608. // continue;
  1609. } else {
  1610. if (StringUtils.isNotEmpty(row.getString("isservice"))) {
  1611. row.put("isservice", row.getString("isservice").equals("是") ? 1 : 0);
  1612. }
  1613. if (StringUtils.isNotEmpty(row.getString("isbutterfly"))) {
  1614. row.put("isbutterfly", row.getString("isbutterfly").equals("是") ? 1 : 0);
  1615. }
  1616. row.put("itemid", itemnoRowsMap.get(itemno).get(0).getLong("itemid"));
  1617. }
  1618. }
  1619. if (StringUtils.isEmpty("itemno")) {
  1620. iserr = true;
  1621. errmsg.append("产品编号不能为空;");
  1622. // row.put("msg", "错误信息:产品编号不能为空");
  1623. // rowserr.add(row);
  1624. // continue;
  1625. }
  1626. if (siteid.equals("HY") || siteid.equals("TZ")) {
  1627. if (StringUtils.isNotEmpty(row.getString("categories")) && !categories.contains(row.getString("categories"))) {
  1628. iserr = true;
  1629. errmsg.append("商品大类不存在;");
  1630. // row.put("msg", "错误信息:商品大类不存在");
  1631. // rowserr.add(row);
  1632. // continue;
  1633. }
  1634. }
  1635. if ((StringUtils.isEmpty(brandname) && StringUtils.isNotEmpty(itemclassnum)) || (StringUtils.isNotEmpty(brandname) && StringUtils.isEmpty(itemclassnum))) {
  1636. iserr = true;
  1637. errmsg.append("不能单独填写品牌和营销类别;");
  1638. // row.put("msg", "错误信息:不能单独填写品牌和营销类别");
  1639. // rowserr.add(row);
  1640. // continue;
  1641. }
  1642. if (imitemnoRowsMap.containsKey(itemno) && imitemnoRowsMap.get(itemno).size() > 1) {
  1643. iserr = true;
  1644. errmsg.append("本次导入商品中存在重复的商品编号;");
  1645. // row.put("msg", "错误信息:本次导入商品中存在重复的商品编号");
  1646. // rowserr.add(row);
  1647. // continue;
  1648. }
  1649. if (StringUtils.isNotEmpty(unitname) && !unitnameRowsMap.containsKey(unitname)) {
  1650. iserr = true;
  1651. errmsg.append("计量单位不存在;");
  1652. // row.put("msg", "错误信息:计量单位不存在");
  1653. // rowserr.add(row);
  1654. // continue;
  1655. }
  1656. if (StringUtils.isNotEmpty(row.getString("tradefield")) && !tradefield.contains(row.getString("tradefield"))) {
  1657. iserr = true;
  1658. errmsg.append("领域不存在;");
  1659. // row.put("msg", "错误信息:领域不存在");
  1660. // rowserr.add(row);
  1661. // continue;
  1662. }
  1663. if (StringUtils.isNotEmpty(row.getString("standards")) && !itemstandards.contains(row.getString("standards"))) {
  1664. iserr = true;
  1665. errmsg.append("产品标准不存在;");
  1666. // row.put("msg", "错误信息:产品标准不存在");
  1667. // rowserr.add(row);
  1668. // continue;
  1669. }
  1670. if (StringUtils.isNotEmpty(row.getString("pressure")) && !pressurelevel.contains(row.getString("pressure"))) {
  1671. iserr = true;
  1672. errmsg.append("压力等级不存在;");
  1673. // row.put("msg", "错误信息:压力等级不存在");
  1674. // rowserr.add(row);
  1675. // continue;
  1676. }
  1677. if (StringUtils.isNotEmpty(row.getString("material")) && !itemmaterial.contains(row.getString("material"))) {
  1678. iserr = true;
  1679. errmsg.append("材质不存在;");
  1680. // row.put("msg", "错误信息:材质不存在");
  1681. // rowserr.add(row);
  1682. // continue;
  1683. }
  1684. if (StringUtils.isNotEmpty(row.getString("butterflyplatedrive")) && !butterflyplatedrive.contains(row.getString("butterflyplatedrive"))) {
  1685. iserr = true;
  1686. errmsg.append("蝶板驱动不存在;");
  1687. // row.put("msg", "错误信息:蝶板驱动不存在");
  1688. // rowserr.add(row);
  1689. // continue;
  1690. }
  1691. if (StringUtils.isNotEmpty(row.getString("valveplatematerial")) && !valveplatematerial.contains(row.getString("valveplatematerial"))) {
  1692. iserr = true;
  1693. errmsg.append("阀板材质不存在;");
  1694. // row.put("msg", "错误信息:阀板材质不存在");
  1695. // rowserr.add(row);
  1696. // continue;
  1697. }
  1698. if (StringUtils.isNotEmpty(row.getString("bodymaterial")) && !bodymaterial.contains(row.getString("bodymaterial"))) {
  1699. iserr = true;
  1700. errmsg.append("阀体材质不存在;");
  1701. // row.put("msg", "错误信息:阀体材质不存在");
  1702. // rowserr.add(row);
  1703. // continue;
  1704. }
  1705. if (StringUtils.isNotEmpty(row.getString("actuatortype")) && !actuatortype.contains(row.getString("actuatortype"))) {
  1706. iserr = true;
  1707. errmsg.append("执行器类型不存在;");
  1708. // row.put("msg", "错误信息:执行器类型不存在");
  1709. // rowserr.add(row);
  1710. // continue;
  1711. }
  1712. if (StringUtils.isNotEmpty(row.getString("actuatorbrand")) && !actuatorbrand.contains(row.getString("actuatorbrand"))) {
  1713. iserr = true;
  1714. errmsg.append("执行器品牌不存在;");
  1715. // row.put("msg", "错误信息:执行器品牌不存在");
  1716. // rowserr.add(row);
  1717. // continue;
  1718. }
  1719. if (StringUtils.isNotEmpty(row.getString("connection")) && !connectionmode.contains(row.getString("connection"))) {
  1720. iserr = true;
  1721. errmsg.append("连接形式不存在;");
  1722. // row.put("msg", "错误信息:连接形式不存在");
  1723. // rowserr.add(row);
  1724. // continue;
  1725. }
  1726. if (StringUtils.isNotEmpty(brandname) && StringUtils.isNotEmpty(itemclassnum)) {
  1727. String[] itemclassnums = itemclassnum.split("/");
  1728. for (String str : itemclassnums) {
  1729. if (!itemclassRowsMap.containsKey(brandname) || !itemclassRowsMap.get(brandname).toArrayList("itemclassnum").contains(str)) {
  1730. iserr = true;
  1731. errmsg.append("品牌不存在或该品牌下没有对应的营销类别;");
  1732. }
  1733. }
  1734. }
  1735. String groupnum = row.getString("groupnum");
  1736. if (StringUtils.isNotEmpty(groupnum)) {
  1737. String[] groupnums = groupnum.split("/");
  1738. for (String str : groupnums) {
  1739. if (!groupnumMap.containsKey(str)) {
  1740. iserr = true;
  1741. errmsg.append("该商品组不存在;");
  1742. }
  1743. }
  1744. }
  1745. if (StringUtils.isNotEmpty(groupnum)) {
  1746. String[] groupnums = groupnum.split("/");
  1747. ArrayList<Long> ids = new ArrayList<>();
  1748. for (String str : groupnums) {
  1749. if (groupnumMap.containsKey(str)) {
  1750. ids.add(groupnumMap.get(str).get(0).getLong("sa_itemgroupid"));
  1751. }
  1752. }
  1753. row.put("sa_itemgroupids", ids);
  1754. }
  1755. if (iserr) {
  1756. row.put("msg", errmsg);
  1757. rowserr.add(row);
  1758. continue;
  1759. }
  1760. if (StringUtils.isNotEmpty(row.getString("unitname"))) {
  1761. row.put("unitid", unitnameRowsMap.get(unitname).get(0).getLong("unitid"));
  1762. }
  1763. if (StringUtils.isNotEmpty(brandname) && StringUtils.isNotEmpty(itemclassnum)) {
  1764. String[] itemclassnums = itemclassnum.split("/");
  1765. ArrayList<Long> itemclassids = new ArrayList<>();
  1766. for (Row row1 : itemclassRowsMap.get(brandname)) {
  1767. for (String str : itemclassnums) {
  1768. if (row1.getString("itemclassnum").equals(str)) {
  1769. itemclassids.add(row1.getLong("itemclassid"));
  1770. }
  1771. }
  1772. row.put("sa_brandid", row1.getLong("sa_brandid"));
  1773. row.put("itemclassid", itemclassids);
  1774. }
  1775. }
  1776. rowssuc.add(row);
  1777. }
  1778. return rowserr.size() > 0;
  1779. }
  1780. public String errImport(Rows rowserr, Boolean isInsert) throws YosException {
  1781. ExcelFactory excelFactory = new ExcelFactory("货品档案导入错误信息");
  1782. HashMap<String, String> map = new HashMap<String, String>();
  1783. map.put("itemno", "产品编码");
  1784. map.put("itemname", "产品名称");
  1785. map.put("spec", "型号");
  1786. map.put("caliber", "公称通径");
  1787. map.put("nominalpressure", "公称压力");
  1788. map.put("model", "规格尺寸");
  1789. map.put("categories", "商品大类");
  1790. map.put("unitname", "计量单位");
  1791. map.put("erpitemname", "品名");
  1792. map.put("erpitemno", "品号");
  1793. map.put("standards", "产品标准");
  1794. map.put("standards", "产品标准明细");
  1795. map.put("orderminqty", "销售增量");
  1796. map.put("orderaddqty", "销售起订量");
  1797. map.put("material", "材质");
  1798. map.put("stockstatus1", "库存充足标准");
  1799. map.put("stockstatus2", "库存缺货标准");
  1800. map.put("tradefield", "领域");
  1801. map.put("delivery", "销售交期");
  1802. map.put("prodline", "产线");
  1803. map.put("device", "装置");
  1804. map.put("specalnote", "特殊说明");
  1805. map.put("isservice", "是否服务物料");
  1806. map.put("pressure", "压力等级");
  1807. map.put("butterflyplatedrive", "蝶板驱动");
  1808. map.put("connection", "连接形式");
  1809. map.put("valveplatematerial", "阀板材质");
  1810. map.put("bodymaterial", "阀体材质");
  1811. map.put("actuatortype", "执行器类型");
  1812. map.put("actuatorbrand", "执行器品牌");
  1813. map.put("isbutterfly", "是否中线蝶阀");
  1814. map.put("brandname", "品牌");
  1815. map.put("itemclassnum", "营销类别编码");
  1816. map.put("groupnum", "商品组编号");
  1817. map.put("msg", "错误信息");
  1818. ArrayList<String> colNameList = new ArrayList<String>();
  1819. HashMap<String, Class> keytypemap = new HashMap<String, Class>();
  1820. colNameList.add("itemno");
  1821. colNameList.add("itemname");
  1822. colNameList.add("spec");
  1823. colNameList.add("caliber");
  1824. keytypemap.put("caliber", String.class);
  1825. colNameList.add("nominalpressure");
  1826. keytypemap.put("nominalpressure", String.class);
  1827. colNameList.add("model");
  1828. colNameList.add("categories");
  1829. keytypemap.put("categories", String.class);
  1830. colNameList.add("unitname");
  1831. colNameList.add("erpitemname");
  1832. colNameList.add("erpitemno");
  1833. colNameList.add("standards");
  1834. colNameList.add("standardsmx");
  1835. colNameList.add("orderminqty");
  1836. colNameList.add("orderaddqty");
  1837. colNameList.add("material");
  1838. colNameList.add("stockstatus1");
  1839. colNameList.add("stockstatus2");
  1840. colNameList.add("tradefield");
  1841. colNameList.add("delivery");
  1842. colNameList.add("prodline");
  1843. colNameList.add("device");
  1844. colNameList.add("specalnote");
  1845. colNameList.add("isservice");
  1846. colNameList.add("pressure");
  1847. colNameList.add("butterflyplatedrive");
  1848. colNameList.add("connection");
  1849. colNameList.add("valveplatematerial");
  1850. colNameList.add("bodymaterial");
  1851. colNameList.add("actuatortype");
  1852. colNameList.add("actuatorbrand");
  1853. colNameList.add("isbutterfly");
  1854. colNameList.add("brandname");
  1855. colNameList.add("itemclassnum");
  1856. colNameList.add("groupnum");
  1857. colNameList.add("msg");
  1858. keytypemap.put("itemno", String.class);
  1859. keytypemap.put("itemname", String.class);
  1860. keytypemap.put("spec", String.class);
  1861. keytypemap.put("model", String.class);
  1862. keytypemap.put("unitname", String.class);
  1863. keytypemap.put("erpitemname", String.class);
  1864. keytypemap.put("erpitemno", String.class);
  1865. keytypemap.put("standards", String.class);
  1866. keytypemap.put("standardsmx", String.class);
  1867. keytypemap.put("orderminqty", String.class);
  1868. keytypemap.put("orderaddqty", String.class);
  1869. keytypemap.put("material", String.class);
  1870. keytypemap.put("stockstatus1", String.class);
  1871. keytypemap.put("stockstatus2", String.class);
  1872. keytypemap.put("tradefield", String.class);
  1873. keytypemap.put("delivery", String.class);
  1874. keytypemap.put("prodline", String.class);
  1875. keytypemap.put("device", String.class);
  1876. keytypemap.put("specalnote", String.class);
  1877. keytypemap.put("isservice", String.class);
  1878. keytypemap.put("pressure", String.class);
  1879. keytypemap.put("butterflyplatedrive", String.class);
  1880. keytypemap.put("connection", String.class);
  1881. keytypemap.put("valveplatematerial", String.class);
  1882. keytypemap.put("bodymaterial", String.class);
  1883. keytypemap.put("actuatortype", String.class);
  1884. keytypemap.put("actuatorbrand", String.class);
  1885. keytypemap.put("isbutterfly", String.class);
  1886. keytypemap.put("brandname", String.class);
  1887. keytypemap.put("itemclassnum", String.class);
  1888. keytypemap.put("groupnum", String.class);
  1889. keytypemap.put("msg", String.class);
  1890. rowserr.setFieldList(colNameList);
  1891. rowserr.setFieldTypeMap(keytypemap);
  1892. addSheet(excelFactory, "Sheet1", rowserr, map, isInsert);
  1893. Rows aa = uploadExcelToObs(excelFactory);
  1894. String url = "";
  1895. if (!aa.isEmpty()) {
  1896. url = aa.get(0).getString("url");
  1897. }
  1898. return url;
  1899. }
  1900. }