Item.java 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149
  1. package restcontroller.webmanage.sale.item;
  2. import beans.brand.Brand;
  3. import beans.datacontrllog.DataContrlLog;
  4. import beans.invbal.Invbal;
  5. import beans.itemclass.ItemClass;
  6. import beans.itemgroup.Itemgroup;
  7. import beans.parameter.Parameter;
  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.DataFormat;
  19. import org.apache.poi.xssf.usermodel.*;
  20. import restcontroller.R;
  21. import restcontroller.webmanage.sale.itemgroup.itemgroup;
  22. import utility.ERPDocking;
  23. import java.util.ArrayList;
  24. import java.util.HashMap;
  25. @API(title = "货品档案管理")
  26. public class Item extends Controller {
  27. /**
  28. * 构造函数
  29. *
  30. * @param content
  31. */
  32. public Item(JSONObject content) throws YosException {
  33. super(content);
  34. }
  35. @API(title = "货品档案新增", apiversion = R.ID20220923141502.v1.class,intervaltime = 2000)
  36. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.class})
  37. public String insertOrUpdate() throws YosException {
  38. Long itemid = content.getLong("itemid");
  39. String itemno = content.getString("itemno");
  40. boolean isauxunit = content.getBoolean("isauxunit");
  41. ArrayList<String> sqlList = new ArrayList<>();
  42. Long plm_itemextendid = content.getLongValue("plm_itemextendid");
  43. SQLFactory sqlFactory = new SQLFactory(this, "货品档案新增");
  44. if (itemid <= 0) {
  45. itemid = createTableID("plm_item");
  46. } else {
  47. if (dbConnect.runSqlQuery("SELECT 1 from plm_item WHERE itemid=" + itemid + " and siteid ='" + siteid + "'")
  48. .isEmpty()) {
  49. return getErrReturnObject().setErrMsg("数据不存在").toString();
  50. }
  51. Rows itemRows = dbConnect.runSqlQuery("SELECT t1.*,t2.material from plm_item t1 left join plm_itemextend t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid WHERE t1.itemid=" + itemid + " and t1.siteid ='" + siteid + "'");
  52. sqlFactory = new SQLFactory(this, "货品档案更新");
  53. if (content.getLongValue("sa_customschemeid") > 0) {
  54. Rows customschemeRows = dbConnect.runSqlQuery("SELECT t1.*,t2.schemename from sa_customscheme_items t1 left join sa_customscheme t2 on t1.sa_customschemeid=t2.sa_customschemeid and t1.siteid=t2.siteid WHERE t1.sa_customschemeid=" + content.getLongValue("sa_customschemeid") + " and t1.siteid ='" + siteid + "'");
  55. String where = " and 1=1 and t1.itemid != " + itemid + " and sa_customschemeid=" + content.getLongValue("sa_customschemeid");
  56. if (!customschemeRows.isEmpty()) {
  57. for (Row row : customschemeRows) {
  58. if (StringUtils.isBlank(itemRows.get(0).getString(row.getString("value"))) && StringUtils.isBlank(content.getStringValue(row.getString("value")))) {
  59. return getErrReturnObject().setErrMsg("该商品定制方案" + row.getString("schemename") + "下" + row.getString("description") + "不可为空").toString();
  60. } else if (StringUtils.isBlank(itemRows.get(0).getString(row.getString("value"))) || StringUtils.isBlank(content.getStringValue(row.getString("value")))) {
  61. System.out.println(1111);
  62. System.out.println(StringUtils.isBlank(itemRows.get(0).getString(row.getString("value"))));
  63. where = where + " and " + row.getString("value") + "='" + (StringUtils.isBlank(itemRows.get(0).getString(row.getString("value"))) ? content.getStringValue(row.getString("value")) : itemRows.get(0).getString(row.getString("value"))) + "'";
  64. } else if (StringUtils.isNotBlank(itemRows.get(0).getString(row.getString("value"))) && StringUtils.isNotBlank(content.getStringValue(row.getString("value"))))
  65. where = where + " and " + row.getString("value") + "='" + content.getStringValue(row.getString("value")) + "'";
  66. }
  67. System.out.println("select * from plm_item where siteid='" + siteid + "'" + where);
  68. Rows items = dbConnect.runSqlQuery("select t1.*,t2.material from plm_item t1 left join plm_itemextend t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.siteid='" + siteid + "'" + where);
  69. if (items.isNotEmpty()) {
  70. return getErrReturnObject().setErrMsg("该商品与定制方案下的" + items.get(0).getString("itemno") + "商品重复,请修改").toString();
  71. }
  72. }
  73. }
  74. if (content.getLongValue("sa_customschemeid") != itemRows.get(0).getLong("sa_customschemeid")) {
  75. Rows rowsCount = dbConnect.runSqlQuery("select count(1) count,min(groupnum) groupnum from (select ifnull(t3.sa_customschemeid,0) count,t1.sa_itemgroupid,t1.groupnum,t1.siteid from sa_itemgroup t1 inner join sa_itemgroupmx t2 on t1.siteid=t2.siteid and t1.sa_itemgroupid=t2.sa_itemgroupid inner join plm_item t3 on t2.itemid=t3.itemid and t2.siteid=t3.siteid group by t1.sa_itemgroupid,t1.groupnum,t1.siteid,ifnull(t3.sa_customschemeid,0))t where t.siteid='" + siteid + "' and t.sa_itemgroupid in (select sa_itemgroupid from sa_itemgroupmx where itemid=" + itemid + ")");
  76. if (rowsCount.get(0).getLong("count") > 0) {
  77. return getErrReturnObject().setErrMsg("该商品存在与商品组" + rowsCount.get(0).getString("groupnum") + ",请在商品组删除该商品后进行保存").toString();
  78. }
  79. }
  80. }
  81. sqlFactory.addParameter("siteid", siteid);
  82. sqlFactory.addParameter("itemid", itemid);
  83. sqlFactory.addParameter("username", username);
  84. sqlFactory.addParameter("userid", userid);
  85. sqlFactory.addParameter("itemno", itemno);
  86. sqlFactory.addParameter("unitid", content.getLongValue("unitid"));
  87. sqlFactory.addParameter("isauxunit", isauxunit);
  88. sqlFactory.addParameter("unitgroupid", isauxunit ? content.getString("unitgroupid") : "null");
  89. sqlFactory.addParameter("itemname", content.getString("itemname"));
  90. sqlFactory.addParameter("isonsale", 0);
  91. sqlFactory.addParameter("model", content.getString("model"));
  92. sqlFactory.addParameter("spec", content.getString("spec"));
  93. // 订单起订量
  94. sqlFactory.addParameter("orderminqty", content.getBigDecimalValue("orderminqty"));
  95. // 订单增量
  96. sqlFactory.addParameter("orderaddqty", content.getBigDecimalValue("orderaddqty"));
  97. // 订单起订量控制单位(0:主单位;1:辅助单位)
  98. sqlFactory.addParameter("orderminqty_auxunit", content.getString("orderminqty_auxunit"));
  99. // 订单增量控制单位(0:主单位;1:辅助单位)
  100. sqlFactory.addParameter("orderaddqty_auxunit", content.getString("orderaddqty_auxunit"));
  101. // 说明
  102. sqlFactory.addParameter("remarks", content.getStringValue("remarks"));
  103. // 商品条形码
  104. sqlFactory.addParameter("barcode", content.getStringValue("barcode"));
  105. // 是否单品管理
  106. sqlFactory.addParameter("skucontrol", content.getBooleanValue("skucontrol"));
  107. // 是否批次管理
  108. sqlFactory.addParameter("batchcontrol", content.getBooleanValue("batchcontrol"));
  109. // 毛重(g)
  110. sqlFactory.addParameter("grossweight", content.getLongValue("grossweight"));
  111. // 净重(g)
  112. sqlFactory.addParameter("weight", content.getLongValue("weight"));
  113. // 高度(mm)
  114. sqlFactory.addParameter("height", content.getLongValue("height"));
  115. // 宽度(mm)
  116. sqlFactory.addParameter("width", content.getLongValue("width"));
  117. // 长度(mm)
  118. sqlFactory.addParameter("length", content.getLongValue("length"));
  119. // 交期
  120. sqlFactory.addParameter("delivery", content.getLongValue("delivery"));
  121. // 牌价
  122. sqlFactory.addParameter("marketprice", content.getBigDecimalValue("marketprice"));
  123. // 是否工具
  124. sqlFactory.addParameter("istool", content.getBooleanValue("istool"));
  125. // 产品标准
  126. sqlFactory.addParameter("standards", content.getStringValue("standards"));
  127. // 库存缺货标准
  128. sqlFactory.addParameter("stockstatus2", content.getIntValue("stockstatus2"));
  129. // 库存充足标准
  130. sqlFactory.addParameter("stockstatus1", content.getIntValue("stockstatus1"));
  131. // 保修期(年)
  132. sqlFactory.addParameter("warrantyday", content.getIntValue("warrantyday"));
  133. // 是否营销物料
  134. sqlFactory.addParameter("iswuliao", content.getBooleanValue("iswuliao"));
  135. // 是否服务物料
  136. sqlFactory.addParameter("isservice", content.getBooleanValue("isservice"));
  137. sqlFactory.addParameter("color", content.getStringValue("color"));
  138. sqlFactory.addParameter("cheek", content.getStringValue("cheek"));
  139. sqlFactory.addParameter("delistingstatus", content.getStringValue("delistingstatus"));
  140. sqlFactory.addParameter("ismodule", content.getStringValue("ismodule"));
  141. sqlFactory.addParameter("packageqty", content.getStringValue("packageqty"));
  142. sqlFactory.addParameter("iswoodproducts", content.getStringValue("iswoodproducts"));
  143. sqlFactory.addParameter("sa_customschemeid", content.getLongValue("sa_customschemeid"));
  144. sqlFactory.addParameter("financeclasstype", content.getStringValue("financeclasstype"));
  145. sqlFactory.addParameter("stockno", content.getStringValue("stockno"));
  146. sqlFactory.addParameter("volume", content.getBigDecimalValue("volume"));
  147. sqlList.add(sqlFactory.getSQL());
  148. // 货品档案扩展属性字段表
  149. sqlFactory = new SQLFactory(this, "货品档案-扩展新增");
  150. if (plm_itemextendid <= 0) {
  151. plm_itemextendid = createTableID("plm_itemextend");
  152. } else {
  153. sqlFactory = new SQLFactory(this, "货品档案-扩展更新");
  154. }
  155. sqlFactory.addParameter("siteid", siteid);
  156. sqlFactory.addParameter("userid", userid);
  157. sqlFactory.addParameter("username", username);
  158. sqlFactory.addParameter("plm_itemextendid", plm_itemextendid);
  159. sqlFactory.addParameter("itemid", itemid);
  160. sqlFactory.addParameter("material", content.getStringValue("material"));
  161. sqlFactory.addParameter("pressure", content.getStringValue("pressure"));
  162. sqlFactory.addParameter("caliber", content.getStringValue("caliber"));
  163. sqlFactory.addParameter("butterflyplatedrive", content.getStringValue("butterflyplatedrive"));
  164. sqlFactory.addParameter("connection", content.getStringValue("connection"));
  165. sqlFactory.addParameter("valveplatematerial", content.getStringValue("valveplatematerial"));
  166. sqlFactory.addParameter("bodymaterial", content.getStringValue("bodymaterial"));
  167. sqlFactory.addParameter("actuatortype", content.getStringValue("actuatortype"));
  168. sqlFactory.addParameter("actuatorbrand", content.getStringValue("actuatorbrand"));
  169. sqlFactory.addParameter("isbutterfly", content.getBooleanValue("isbutterfly"));
  170. sqlFactory.addParameter("erpitemno", content.getStringValue("erpitemno"));
  171. sqlFactory.addParameter("erpitemname", content.getStringValue("erpitemname"));
  172. sqlFactory.addParameter("specalnote", content.getStringValue("specalnote"));
  173. sqlFactory.addParameter("prodline", content.getStringValue("prodline"));
  174. sqlFactory.addParameter("device", content.getStringValue("device"));
  175. sqlList.add(sqlFactory.getSQL());
  176. // 添加领域
  177. if (content.containsKey("tradefields")) {
  178. JSONArray tradefields = content.getJSONArray("tradefields");
  179. if (!tradefields.isEmpty()) {
  180. if (tradefields.size() > 1) {
  181. return getErrReturnObject().setErrMsg("商品只能维护一个领域").toString();
  182. }
  183. sqlList.add("delete from plm_item_tradefield where itemid =" + itemid + " and siteid='" + siteid + "'");
  184. for (Object obj : tradefields) {
  185. String tradefield = (String) obj;
  186. sqlFactory = new SQLFactory(this, "新增领域");
  187. sqlFactory.addParameter("siteid", siteid);
  188. sqlFactory.addParameter("plm_item_tradefieldid", createTableID("plm_item_tradefield"));
  189. sqlFactory.addParameter("tradefield", tradefield);
  190. sqlFactory.addParameter("userid", userid);
  191. sqlFactory.addParameter("itemid", itemid);
  192. sqlList.add(sqlFactory.getSQL());
  193. }
  194. // if (tradefields.size() > 0) {
  195. // sqlFactory = new SQLFactory(this, "删除多余的领域");
  196. // sqlFactory.addParameter("siteid", siteid);
  197. // sqlFactory.addParameter_in("tradefield", tradefields.toArray());
  198. // sqlFactory.addParameter("userid", userid);
  199. // sqlFactory.addParameter("itemid", itemid);
  200. // sqlList.add(sqlFactory.getSQL());
  201. // }
  202. }
  203. }
  204. if (content.containsKey("itemclassids")) {
  205. JSONArray itemclassids = content.getJSONArray("itemclassids");
  206. if (!itemclassids.isEmpty()) {
  207. if (itemclassids.size() > 1) {
  208. return getErrReturnObject().setErrMsg("商品只能维护一个营销类别").toString();
  209. }
  210. sqlList.add("delete from sa_itemsaleclass where itemid =" + itemid + " and siteid='" + siteid + "'");
  211. for (Object obj : itemclassids) {
  212. int itemclassid = (int) obj;
  213. sqlFactory = new SQLFactory(this, "商品营销类别新增");
  214. sqlFactory.addParameter("sa_itemsaleclassid", createTableID("sa_itemsaleclass"));
  215. sqlFactory.addParameter("siteid", siteid);
  216. sqlFactory.addParameter("itemid", itemid);
  217. sqlFactory.addParameter("itemno", itemno);
  218. sqlFactory.addParameter("itemclassid", itemclassid);
  219. sqlList.add(sqlFactory.getSQL());
  220. }
  221. }
  222. // sqlFactory = new SQLFactory(this, "商品营销类别删除");
  223. // sqlFactory.addParameter("sa_itemsaleclassid", createTableID("sa_itemsaleclass"));
  224. // sqlFactory.addParameter("siteid", siteid);
  225. // sqlFactory.addParameter("itemid", itemid);
  226. // sqlFactory.addParameter("itemno", itemno);
  227. // sqlFactory.addParameter_in("itemclassid", itemclassids.toArray());
  228. sqlList.add(sqlFactory.getSQL());
  229. }
  230. dbConnect.runSqlUpdate(sqlList);
  231. content.put("itemid", itemid);
  232. return queryDetail();
  233. }
  234. @API(title = "货品档案详情", apiversion = R.ID20220923155302.v1.class)
  235. public String queryDetail() throws YosException {
  236. Long itemid = content.getLong("itemid");
  237. ArrayList<Long> itemids = new ArrayList<>();
  238. itemids.add(itemid);
  239. //查询erp库存
  240. Invbal.selectErpInvbal(this, itemid);
  241. SQLFactory sqlFactory = new SQLFactory(this, "货品档案详情");
  242. sqlFactory.addParameter("siteid", siteid);
  243. sqlFactory.addParameter("itemid", itemid);
  244. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL(false));
  245. // 默认商品图片
  246. Rows defaultImageRows = getAttachmentUrl("system", (long) 1, "defaultImage");
  247. // 品牌
  248. RowsMap brandRowsMap = Brand.getBrandRowsMap(this, itemids);
  249. // 营销类别
  250. RowsMap itemClassRowsMap = ItemClass.getAllItemClassRowsMap(this, itemids);
  251. // 附件
  252. RowsMap attRowsMap = getAttachmentUrl("plm_item", itemids);
  253. // 商品领域
  254. RowsMap tradefieldRowsMap = beans.Item.Item.getTradefieldRowsMap(this, itemids);
  255. ERPDocking erpDocking = new ERPDocking();
  256. JSONArray jsonArray =new JSONArray();
  257. if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true") && siteid.equalsIgnoreCase("ccyosg")) {
  258. if(!rows.toJsonArray("itemno").isEmpty()){
  259. jsonArray=erpDocking.getErpIcinvbalRows(200000, 1,rows.toJsonArray("itemno"));
  260. }
  261. }
  262. if(!jsonArray.isEmpty()){
  263. for (Object object:jsonArray) {
  264. JSONObject jsonObject =(JSONObject)object;
  265. if(!rows.isEmpty()){
  266. if(rows.get(0).getString("itemno").equals(jsonObject.getString("fitemno"))){
  267. rows.get(0).put("invbal_qty", jsonObject.getBigDecimalValue("fqty"));
  268. }
  269. }
  270. }
  271. }
  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. row.put("tradefield", tradefieldRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  281. }
  282. return getSucReturnObject().setData(rows.isNotEmpty() ? rows.get(0) : new Row()).toString();
  283. }
  284. @API(title = "货品档案列表", apiversion = R.ID20220923140602.v1.class)
  285. @CACHEING
  286. public String queryList() throws YosException {
  287. StringBuffer where = new StringBuffer(" 1=1 ");
  288. if (content.containsKey("where")) {
  289. JSONObject whereObject = content.getJSONObject("where");
  290. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  291. where.append(" and(");
  292. where.append("t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  293. where.append("or t1.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  294. where.append("or t1.model like'%").append(whereObject.getString("condition")).append("%' ");
  295. where.append("or t1.spec like'%").append(whereObject.getString("condition")).append("%' ");
  296. where.append("or t8.erpitemname like'%").append(whereObject.getString("condition")).append("%' ");
  297. where.append("or t8.erpitemno like'%").append(whereObject.getString("condition")).append("%' ");
  298. where.append(")");
  299. }
  300. if (whereObject.containsKey("isonsale") && !"".equals(whereObject.getString("isonsale"))) {
  301. where.append(" and(");
  302. where.append("t1.isonsale ='").append(whereObject.getString("isonsale")).append("' ");
  303. where.append(")");
  304. }
  305. if (whereObject.containsKey("isservice") && !"".equals(whereObject.getString("isservice"))) {
  306. where.append(" and(");
  307. where.append("t1.isservice ='").append(whereObject.getString("isservice")).append("' ");
  308. where.append(")");
  309. }
  310. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  311. where.append(" and(");
  312. where.append("t1.status ='").append(whereObject.getString("status")).append("' ");
  313. where.append(")");
  314. }
  315. if (whereObject.containsKey("isonsalebutnotingroup") && !"".equals(whereObject.getString("isonsalebutnotingroup"))) {
  316. if (whereObject.getBooleanValue("isonsalebutnotingroup")) {
  317. where.append(" and(");
  318. where.append("t1.isonsale =1 and t1.itemid not in (select t1.itemid from sa_itemgroupmx t1 inner join sa_itemgroup t2 on t1.sa_itemgroupid=t2.sa_itemgroupid and t1.siteid=t2.siteid where t2.isonsale=1 )");
  319. where.append(")");
  320. }
  321. }
  322. if (whereObject.containsKey("itemno") && !"".equals(whereObject.getString("itemno"))) {
  323. where.append(" and(");
  324. where.append("t1.itemno like '%").append(whereObject.getString("itemno")).append("%' ");
  325. where.append(")");
  326. }
  327. if (whereObject.containsKey("itemname") && !"".equals(whereObject.getString("itemname"))) {
  328. where.append(" and(");
  329. where.append("t1.itemname like '%").append(whereObject.getString("itemname")).append("%' ");
  330. where.append(")");
  331. }
  332. if (whereObject.containsKey("packageqty") && !"".equals(whereObject.getString("packageqty"))) {
  333. where.append(" and(");
  334. where.append("t1.packageqty ='").append(whereObject.getString("packageqty")).append("' ");
  335. where.append(")");
  336. }
  337. if (whereObject.containsKey("unitname") && !"".equals(whereObject.getString("unitname"))) {
  338. where.append(" and(");
  339. where.append("t2.unitname like '%").append(whereObject.getString("status")).append("%' ");
  340. where.append(")");
  341. }
  342. if (whereObject.containsKey("price1") && !"".equals(whereObject.getString("price1"))) {
  343. where.append(" and(");
  344. where.append("t9.price ='").append(whereObject.getString("price1")).append("' ");
  345. where.append(")");
  346. } if (whereObject.containsKey("price2") && !"".equals(whereObject.getString("price2"))) {
  347. where.append(" and(");
  348. where.append("t10.price ='").append(whereObject.getString("price2")).append("' ");
  349. where.append(")");
  350. }
  351. if (whereObject.containsKey("price3") && !"".equals(whereObject.getString("price3"))) {
  352. where.append(" and(");
  353. where.append("t11.price ='").append(whereObject.getString("price3")).append("' ");
  354. where.append(")");
  355. }
  356. if (whereObject.containsKey("price4") && !"".equals(whereObject.getString("price4"))) {
  357. where.append(" and(");
  358. where.append("t12.price ='").append(whereObject.getString("price4")).append("' ");
  359. where.append(")");
  360. }
  361. if (whereObject.containsKey("financeclasstype") && !"".equals(whereObject.getString("financeclasstype"))) {
  362. where.append(" and(");
  363. where.append("t1.financeclasstype like '%").append(whereObject.getString("financeclasstype")).append("%' ");
  364. where.append(")");
  365. }
  366. if (whereObject.containsKey("itemclassid") && !"".equals(whereObject.getString("itemclassid"))) {
  367. ArrayList<Long> list = ItemClass.getSubItemClassIds(this, whereObject.getLong("itemclassid"));
  368. list.add(whereObject.getLong("itemclassid"));
  369. String sql = " and t1.itemid in ( SELECT itemid from sa_itemsaleclass WHERE itemclassid IN " + list + " and siteid='" + siteid + "')";
  370. sql = sql.replace("[", "(").replace("]", ")");
  371. where.append(sql);
  372. }
  373. if (whereObject.containsKey("tradefield") && !whereObject.getString("tradefield").isEmpty()) {
  374. where.append(" and exists(");
  375. where.append(" select 1 from plm_item_tradefield t3 where t3.siteid=t1.siteid and t3.itemid=t1.itemid and t3.tradefield='").append(whereObject.getString("tradefield")).append("' ");
  376. where.append(")");
  377. }
  378. }
  379. SQLFactory sqlFactory = new SQLFactory(this, "货品档案列表", pageSize, pageNumber, pageSorting);
  380. sqlFactory.addParameter("siteid", siteid);
  381. sqlFactory.addParameter_SQL("where", where);
  382. System.out.println(sqlFactory.getSQL());
  383. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  384. // 默认商品图片
  385. Rows defaultImageRows = getAttachmentUrl("system", (long) 1, "defaultImage");
  386. // 附件
  387. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  388. RowsMap attRowsMap = getAttachmentUrl("plm_item", ids);
  389. // 商品领域
  390. RowsMap tradefieldRowsMap = beans.Item.Item.getTradefieldRowsMap(this, ids);
  391. // 商品品牌
  392. RowsMap brandRowsMap = Brand.getBrandRowsMap(this, ids);
  393. RowsMap itemclassRowsMap = ItemClass.getAllItemClassRowsMap(this, ids);
  394. for (Row row : rows) {
  395. if (attRowsMap.getOrDefault(row.getString("itemid"), new Rows()).isEmpty()) {
  396. row.put("attinfos", defaultImageRows);
  397. } else {
  398. row.put("attinfos", attRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  399. }
  400. row.put("tradefield", tradefieldRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  401. row.put("brand", brandRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  402. row.put("itemclass", itemclassRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  403. }
  404. return getSucReturnObject().setData(rows).toString();
  405. }
  406. @API(title = "货品档案删除", apiversion = R.ID20220923152202.v1.class)
  407. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.v1.class})
  408. public String delete() throws YosException {
  409. JSONArray jsonArray = content.getJSONArray("itemids");
  410. String sql = " SELECT 1 from plm_item WHERE itemid in " + jsonArray + " and `status` ='审核' and siteid ='"
  411. + siteid + "'";
  412. sql = sql.replace("[", "(").replace("]", ")");
  413. if (dbConnect.runSqlQuery(sql).isNotEmpty()) {
  414. return getErrReturnObject().setErrMsg("存在已审核的数据,无法删除。").toString();
  415. }
  416. SQLFactory sqlFactory = new SQLFactory(this, "货品档案删除");
  417. sqlFactory.addParameter_in("itemid", jsonArray.toArray());
  418. sqlFactory.addParameter("siteid", siteid);
  419. dbConnect.runSqlUpdate(sqlFactory);
  420. return getSucReturnObject().toString();
  421. }
  422. @API(title = "货品档案审核", apiversion = R.ID20220923153902.v1.class)
  423. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.v1.class})
  424. public String audit() throws YosException {
  425. JSONArray jsonArray = content.getJSONArray("itemids");
  426. String status = content.getString("status");
  427. Rows itemRows = dbConnect.runSqlQuery("select itemid,itemno,itemname,sa_customschemeid,isonsale from plm_item where siteid='" + siteid + "'");
  428. RowsMap itemRowsMap = itemRows.toRowsMap("itemid");
  429. ArrayList<String> sqlList = new ArrayList<>();
  430. for (Object obj : jsonArray) {
  431. int id = (int) obj;
  432. SQLFactory sqlFactory = new SQLFactory(this, "货品档案审核");
  433. sqlFactory.addParameter("itemid", id);
  434. sqlFactory.addParameter("siteid", siteid);
  435. sqlFactory.addParameter("username", username);
  436. sqlFactory.addParameter("status", status.equals("0") ? "新建" : "审核");
  437. if (status.equals("0")) {
  438. if (itemRowsMap.containsKey(String.valueOf(id))) {
  439. if (!itemRowsMap.get(String.valueOf(id)).isEmpty()) {
  440. if (itemRowsMap.get(String.valueOf(id)).get(0).getBoolean("isonsale")) {
  441. return getErrReturnObject().setErrMsg("上架状态无法反审核").toString();
  442. }
  443. }
  444. }
  445. }
  446. sqlList.add(sqlFactory.getSQL());
  447. }
  448. dbConnect.runSqlUpdate(sqlList);
  449. return getSucReturnObject().toString();
  450. }
  451. @API(title = "货品档案上架", apiversion = R.ID20220923154802.v1.class)
  452. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.v1.class}, apiClass = {itemgroup.class, restcontroller.sale.itemgroup.itemgroup.class})
  453. public String onsale() throws YosException {
  454. JSONArray jsonArray = content.getJSONArray("itemids");
  455. String isonsale = content.getString("isonsale");
  456. if (jsonArray.size() == 0) {
  457. return getErrReturnObject().setErrMsg("未选择商品").toString();
  458. }
  459. if (isonsale.equals("1")) {
  460. SQLFactory isHas = new SQLFactory(this, "查询是否存在新建货品");
  461. isHas.addParameter_in("itemid", jsonArray.toArray());
  462. isHas.addParameter("siteid", siteid);
  463. Rows hasRows = dbConnect.runSqlQuery(isHas.getSQL(false));
  464. SQLFactory isHasOnSale = new SQLFactory(this, "查询是否存在上架货品");
  465. isHasOnSale.addParameter_in("itemid", jsonArray.toArray());
  466. isHasOnSale.addParameter("siteid", siteid);
  467. Rows hasOnSaleRows = dbConnect.runSqlQuery(isHasOnSale.getSQL(false));
  468. if (hasRows.isNotEmpty()) {
  469. return getErrReturnObject().setErrMsg("存在未审核的货品,无法上架!").toString();
  470. }
  471. if (hasOnSaleRows.isNotEmpty()) {
  472. return getErrReturnObject().setErrMsg("存在已上架的货品,无法上架!").toString();
  473. }
  474. System.out.println("select * from sa_itemsaleclass where siteid='" + siteid + "' and itemid in " + jsonArray.toArray());
  475. String sql = "select * from sa_itemsaleclass where siteid='" + siteid + "' and itemid in " + jsonArray.toJSONString();
  476. sql = sql.replace("[", "(").replace("]", ")");
  477. Rows itemsaleclassRows = dbConnect.runSqlQuery(sql);
  478. if (itemsaleclassRows.isEmpty()) {
  479. return getErrReturnObject().setErrMsg("商品未维护营销类别,无法上架!").toString();
  480. }
  481. SQLFactory isHasPrice = new SQLFactory(this, "查询是否存在未维护价格的商品");
  482. isHasPrice.addParameter_in("itemid", jsonArray.toArray());
  483. isHasPrice.addParameter("siteid", siteid);
  484. Rows hasPriceRows = dbConnect.runSqlQuery(isHasPrice.getSQL(false));
  485. if (hasPriceRows.isNotEmpty()) {
  486. return getErrReturnObject().setErrMsg("存在未维护价格的货品,无法上架!").toString();
  487. }
  488. }
  489. Rows brandRows = dbConnect.runSqlQuery("select sa_brandid from sa_brand where siteid='" + siteid + "'");
  490. long sa_brandid = 0;
  491. if (!brandRows.isEmpty()) {
  492. sa_brandid = brandRows.get(0).getLong("sa_brandid");
  493. }
  494. Rows itemRows = dbConnect.runSqlQuery("select itemid,itemno,itemname,sa_customschemeid,isonsale from plm_item where siteid='" + siteid + "'");
  495. RowsMap itemRowsMap = itemRows.toRowsMap("itemid");
  496. Rows tradefieldRows = dbConnect.runSqlQuery("select itemid,tradefield from plm_item_tradefield where siteid='" + siteid + "'");
  497. RowsMap tradefieldRowsMap = tradefieldRows.toRowsMap("itemid");
  498. ArrayList<String> sqlList = new ArrayList<>();
  499. for (Object obj : jsonArray) {
  500. Long id = Long.valueOf(obj.toString());
  501. SQLFactory sqlFactory = new SQLFactory(this, "货品档案上架");
  502. sqlFactory.addParameter("itemid", id);
  503. sqlFactory.addParameter("siteid", siteid);
  504. sqlFactory.addParameter("username", username);
  505. sqlFactory.addParameter("isonsale", isonsale);
  506. sqlList.add(sqlFactory.getSQL(false));
  507. //审核商品时,自动添加至商品组中
  508. if (itemRowsMap.containsKey(String.valueOf(obj))) {
  509. if (!itemRowsMap.get(String.valueOf(obj)).isEmpty()) {
  510. if (itemRowsMap.get(String.valueOf(obj)).get(0).getLong("sa_customschemeid") != 0) {
  511. if (isonsale.equals("1")) {
  512. Rows rowsCount = dbConnect.runSqlQuery("select count(1) count,min(groupnum) groupnum from (select ifnull(t3.sa_customschemeid,0) count,t1.sa_itemgroupid,t1.groupnum,t1.siteid from sa_itemgroup t1 inner join sa_itemgroupmx t2 on t1.siteid=t2.siteid and t1.sa_itemgroupid=t2.sa_itemgroupid inner join plm_item t3 on t2.itemid=t3.itemid and t2.siteid=t3.siteid group by t1.sa_itemgroupid,t1.groupnum,t1.siteid,ifnull(t3.sa_customschemeid,0))t where t.siteid='" + siteid + "' and t.sa_itemgroupid in (select sa_itemgroupid from sa_itemgroupmx where itemid=" + id + ")");
  513. if (rowsCount.get(0).getLong("count") > 1) {
  514. //return getErrReturnObject().setErrMsg("该商品存在与商品组"+rowsCount.get(0).getString("groupnum")+",请在商品组删除该商品后进行审核").toString();
  515. }
  516. }
  517. } else {
  518. if (isonsale.equals("0")) {
  519. sqlList.add("delete from sa_itemgroup where sa_itemgroupid in(select sa_itemgroupid from sa_itemgroupmx where itemid=" + id + " and siteid='" + siteid + "')");
  520. sqlList.add("delete from sa_itemgroupmx where itemid=" + id + " and siteid='" + siteid + "'");
  521. } else {
  522. sqlList.addAll(Itemgroup.createItemGroupSql(this, id, itemRowsMap.get(String.valueOf(obj)).get(0).getString("itemname"), itemRowsMap.get(String.valueOf(obj)).get(0).getString("itemno"), tradefieldRowsMap.get(String.valueOf(obj)).toJsonArray("tradefield"), sa_brandid));
  523. }
  524. }
  525. } else {
  526. return getErrReturnObject().setErrMsg("商品不存在").toString();
  527. }
  528. }
  529. }
  530. dbConnect.runSqlUpdate(sqlList);
  531. return getSucReturnObject().toString();
  532. }
  533. @API(title = "查询商品组", apiversion = R.ID20221216102302.v1.class)
  534. public String selectItemGroup() throws YosException {
  535. Long itemid = content.getLong("itemid");
  536. StringBuffer where = new StringBuffer(" 1=1 ");
  537. if (content.containsKey("where")) {
  538. JSONObject whereObject = content.getJSONObject("where");
  539. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  540. where.append(" and(");
  541. where.append("t1.groupname like'%").append(whereObject.getString("condition")).append("%' ");
  542. where.append("or t1.brandname like'%").append(whereObject.getString("condition")).append("%' ");
  543. where.append(")");
  544. }
  545. if (whereObject.containsKey("isonsale") && !"".equals(whereObject.getString("isonsale"))) {
  546. where.append(" and(");
  547. where.append("t1.isonsale ='").append(whereObject.getString("isonsale")).append("' ");
  548. where.append(")");
  549. }
  550. }
  551. SQLFactory sqlFactory = new SQLFactory(this, "查询商品组", pageSize, pageNumber, pageSorting);
  552. sqlFactory.addParameter("siteid", siteid);
  553. sqlFactory.addParameter("itemid", itemid);
  554. sqlFactory.addParameter_SQL("where", where);
  555. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  556. return getSucReturnObject().setData(rows).toString();
  557. }
  558. @API(title = "查询商品资料", apiversion = R.ID20221216105402.v1.class)
  559. public String selectTechnicalinfo() throws YosException {
  560. Long itemid = content.getLong("itemid");
  561. StringBuffer where = new StringBuffer(" 1=1 ");
  562. if (content.containsKey("where")) {
  563. JSONObject whereObject = content.getJSONObject("where");
  564. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  565. where.append(" and(");
  566. where.append("t1.type like'%").append(whereObject.getString("condition")).append("%' ");
  567. where.append("or t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  568. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  569. where.append(")");
  570. }
  571. }
  572. SQLFactory sqlFactory = new SQLFactory(this, "查询产品资料", pageSize, pageNumber, pageSorting);
  573. sqlFactory.addParameter("siteid", siteid);
  574. sqlFactory.addParameter("itemid", itemid);
  575. sqlFactory.addParameter_SQL("where", where);
  576. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  577. ArrayList<Long> ids = rows.toArrayList("plm_technicalinfoid", new ArrayList<>());
  578. // 默认商品图片
  579. Rows defaultImageRows = getAttachmentUrl("system", (long) 1, "defaultImage");
  580. // 封面cover
  581. RowsMap coverRowsMap = getAttachmentUrl("plm_technicalinfo", ids, "cover");
  582. // 附件
  583. RowsMap attRowsMap = getAttachmentUrl("plm_technicalinfo", ids);
  584. for (Row row : rows) {
  585. Rows coverRows = coverRowsMap.get(row.getString("plm_technicalinfoid"));
  586. if (coverRows.isEmpty()) {
  587. if (!defaultImageRows.isEmpty()) {
  588. row.put("cover", defaultImageRows.get(0).getString("url"));
  589. } else {
  590. row.put("cover", "");
  591. }
  592. } else {
  593. row.put("cover", coverRows.get(0).getString("url"));
  594. }
  595. row.put("attinfos", attRowsMap.getOrDefault(row.getString("plm_technicalinfoid"), new Rows()));
  596. }
  597. return getSucReturnObject().setData(rows).toString();
  598. }
  599. @API(title = "查询商品价格", apiversion = R.ID20221216134102.v1.class)
  600. public String selectItemPrice() throws YosException {
  601. Long itemid = content.getLong("itemid");
  602. StringBuffer where = new StringBuffer(" 1=1 ");
  603. if (content.containsKey("where")) {
  604. JSONObject whereObject = content.getJSONObject("where");
  605. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  606. where.append(" and(");
  607. where.append("t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  608. where.append("or t1.pricegrade like'%").append(whereObject.getString("condition")).append("%' ");
  609. where.append(")");
  610. }
  611. }
  612. SQLFactory sqlFactory = new SQLFactory(this, "查询商品价格", pageSize, pageNumber, pageSorting);
  613. sqlFactory.addParameter("siteid", siteid);
  614. sqlFactory.addParameter("itemid", itemid);
  615. sqlFactory.addParameter_SQL("where", where);
  616. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  617. return getSucReturnObject().setData(rows).toString();
  618. }
  619. @API(title = "货品档案导入模板", apiversion = R.ID20230311102404.v1.class)
  620. public String downloadExcel() throws YosException {
  621. ExcelFactory excelFactory = new ExcelFactory("货品档案导入模板");
  622. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
  623. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  624. CellStyle style = xssfFWorkbook.createCellStyle();
  625. DataFormat format = xssfFWorkbook.createDataFormat();
  626. style.setDataFormat(format.getFormat("@"));
  627. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  628. for (int i = 0; i <= 31; i++) {
  629. sheet.setDefaultColumnStyle(i, style);
  630. }
  631. // 设置工作薄列宽
  632. ExportExcel.setBatchDetailSheetColumn1(sheet);// 设置工作薄列宽
  633. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  634. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  635. XSSFCellStyle titleCellStyle3 = ExportExcel.createTitleCellStyle3(xssfFWorkbook);
  636. XSSFCellStyle titleCellStyle4 = ExportExcel.createBodyCellStyle4(xssfFWorkbook);
  637. ExportExcel.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, titleCellStyle4, xssfFWorkbook);
  638. Rows aa = uploadExcelToObs(excelFactory);
  639. String url = "";
  640. if (!aa.isEmpty()) {
  641. url = aa.get(0).getString("url");
  642. }
  643. return getSucReturnObject().setData(url).toString();
  644. }
  645. @API(title = "货品档案导入", apiversion = R.ID20230311111404.v1.class)
  646. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.class})
  647. public String importItems() throws YosException {
  648. ArrayList<String> sqlList = new ArrayList<>();
  649. ExcelFactory e;
  650. try {
  651. // 华为云
  652. e = getPostExcelFactory(content.getLong("attachmentid"));
  653. // 本地
  654. //e = getPostExcelFactory();
  655. ArrayList<String> keys = new ArrayList<>();
  656. keys.add("itemno");
  657. keys.add("itemname");
  658. keys.add("spec");
  659. keys.add("model");
  660. keys.add("unitname");
  661. keys.add("erpitemname");
  662. keys.add("erpitemno");
  663. keys.add("standards");
  664. keys.add("orderminqty");
  665. keys.add("orderaddqty");
  666. keys.add("material");
  667. keys.add("stockstatus1");
  668. keys.add("stockstatus2");
  669. keys.add("tradefield");
  670. keys.add("delivery");
  671. keys.add("prodline");
  672. keys.add("device");
  673. keys.add("specalnote");
  674. keys.add("isservice");
  675. keys.add("pressure");
  676. keys.add("butterflyplatedrive");
  677. keys.add("connection");
  678. keys.add("valveplatematerial");
  679. keys.add("bodymaterial");
  680. keys.add("actuatortype");
  681. keys.add("actuatorbrand");
  682. keys.add("isbutterfly");
  683. keys.add("brandname");
  684. keys.add("itemclassnum");
  685. Rows rows = e.getSheetRows(0, keys, 3);
  686. boolean iserr = false;
  687. Rows rowserr = new Rows();
  688. Rows rowssuc = new Rows();
  689. RowsMap itemnoRowsMap = dbConnect.runSqlQuery("select itemno from plm_item t1 where siteid='" + siteid + "'").toRowsMap("itemno");
  690. RowsMap unitnameRowsMap = dbConnect.runSqlQuery("select unitid,unitname from plm_unit where siteid='" + siteid + "'").toRowsMap("unitname");
  691. ArrayList<String> tradefieldList = dbConnect.runSqlQuery("select t2.value from sys_optiontype t1 left join sys_optiontypemx t2 on t1.optiontypeid=t2.optiontypeid and t2.siteid='" + siteid + "' where t1.remarks='领域' and t2.isused=1").toArrayList("value");
  692. RowsMap imitemnoRowsMap = rows.toRowsMap("itemno");
  693. 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 + "'");
  694. RowsMap itemclassRowsMap = itemcalss.toRowsMap("brandname");
  695. for (Row row : rows) {
  696. String brandname = row.getString("brandname");
  697. String itemclassnum = row.getString("itemclassnum");
  698. String itemno = row.getString("itemno");
  699. String unitname = row.getString("unitname");
  700. try {
  701. row.getBigDecimal("orderminqty");
  702. row.getBigDecimal("orderaddqty");
  703. row.getInteger("stockstatus1");
  704. row.getInteger("stockstatus2");
  705. row.getInteger("delivery");
  706. } catch (Exception e1) {
  707. iserr = true;
  708. row.put("msg", "错误信息:销售起订量/销售增量/库存充足标准/库存缺货标准/销售交期填写格式错误");
  709. rowserr.add(row);
  710. continue;
  711. }
  712. if (StringUtils.isEmpty(itemno)
  713. || StringUtils.isEmpty(row.getString("itemname"))
  714. || StringUtils.isEmpty(unitname)
  715. || StringUtils.isEmpty(row.getString("erpitemname"))
  716. || StringUtils.isEmpty(row.getString("erpitemno"))) {
  717. iserr = true;
  718. row.put("msg", "错误信息:产品编号/产品名称/计量单位/品号/品号不能为空");
  719. rowserr.add(row);
  720. continue;
  721. }
  722. if ((StringUtils.isEmpty(brandname) && StringUtils.isNotEmpty(itemclassnum)) || (StringUtils.isNotEmpty(brandname) && StringUtils.isEmpty(itemclassnum))) {
  723. iserr = true;
  724. row.put("msg", "错误信息:不能单独填写品牌和营销类别");
  725. rowserr.add(row);
  726. continue;
  727. }
  728. if (imitemnoRowsMap.containsKey(itemno) && imitemnoRowsMap.get(itemno).size() > 1) {
  729. iserr = true;
  730. row.put("msg", "错误信息:本次导入商品中存在重复的商品编号");
  731. rowserr.add(row);
  732. continue;
  733. }
  734. if (itemnoRowsMap.containsKey(itemno)) {
  735. iserr = true;
  736. row.put("msg", "错误信息:商品编号已存在");
  737. rowserr.add(row);
  738. continue;
  739. }
  740. if (!unitnameRowsMap.containsKey(unitname)) {
  741. iserr = true;
  742. row.put("msg", "错误信息:计量单位不存在");
  743. rowserr.add(row);
  744. continue;
  745. }
  746. if (!tradefieldList.contains(row.getString("tradefield"))) {
  747. iserr = true;
  748. row.put("msg", "错误信息:领域不存在");
  749. rowserr.add(row);
  750. continue;
  751. }
  752. if (!itemclassRowsMap.containsKey(brandname) || !itemclassRowsMap.get(brandname).toArrayList("itemclassnum").contains(itemclassnum)) {
  753. iserr = true;
  754. row.put("msg", "错误信息:品牌不存在或该品牌下没有对应的营销类别");
  755. rowserr.add(row);
  756. }
  757. row.put("unitid", unitnameRowsMap.get(unitname).get(0).getLong("unitid"));
  758. for (Row row1 : itemclassRowsMap.get(brandname)) {
  759. if (row1.getString("itemclassnum").equals(itemclassnum)) {
  760. row.put("sa_brandid", row1.getLong("sa_brandid"));
  761. row.put("itemclassid", row1.getLong("itemclassid"));
  762. break;
  763. }
  764. }
  765. rowssuc.add(row);
  766. }
  767. if (iserr) {
  768. ExcelFactory excelFactory = new ExcelFactory("货品档案导入错误信息");
  769. HashMap<String, String> map = new HashMap<String, String>();
  770. map.put("itemno", "产品编码");
  771. map.put("itemname", "产品名称");
  772. map.put("spec", "型号");
  773. map.put("model", "规格尺寸");
  774. map.put("unitname", "计量单位");
  775. map.put("erpitemname", "品名");
  776. map.put("erpitemno", "品号");
  777. map.put("standards", "产品标准");
  778. map.put("orderminqty", "销售增量");
  779. map.put("orderaddqty", "销售起订量");
  780. map.put("material", "材质");
  781. map.put("stockstatus1", "库存充足标准");
  782. map.put("stockstatus2", "库存缺货标准");
  783. map.put("tradefield", "领域");
  784. map.put("delivery", "销售交期");
  785. map.put("prodline", "产线");
  786. map.put("device", "装置");
  787. map.put("specalnote", "特殊说明");
  788. map.put("isservice", "是否服务物料");
  789. map.put("pressure", "压力等级");
  790. map.put("butterflyplatedrive", "蝶板驱动");
  791. map.put("connection", "连接形式");
  792. map.put("valveplatematerial", "阀板材质");
  793. map.put("bodymaterial", "阀体材质");
  794. map.put("actuatortype", "执行器类型");
  795. map.put("actuatorbrand", "执行器品牌");
  796. map.put("isbutterfly", "是否中线蝶阀");
  797. map.put("brandname", "品牌");
  798. map.put("itemclassnum", "营销类别编码");
  799. map.put("msg", "错误信息");
  800. ArrayList<String> colNameList = new ArrayList<String>();
  801. HashMap<String, Class> keytypemap = new HashMap<String, Class>();
  802. colNameList.add("itemno");
  803. colNameList.add("itemname");
  804. colNameList.add("spec");
  805. colNameList.add("model");
  806. colNameList.add("unitname");
  807. colNameList.add("erpitemname");
  808. colNameList.add("erpitemno");
  809. colNameList.add("standards");
  810. colNameList.add("orderminqty");
  811. colNameList.add("orderaddqty");
  812. colNameList.add("material");
  813. colNameList.add("stockstatus1");
  814. colNameList.add("stockstatus2");
  815. colNameList.add("tradefield");
  816. colNameList.add("delivery");
  817. colNameList.add("prodline");
  818. colNameList.add("device");
  819. colNameList.add("specalnote");
  820. colNameList.add("isservice");
  821. colNameList.add("pressure");
  822. colNameList.add("butterflyplatedrive");
  823. colNameList.add("connection");
  824. colNameList.add("valveplatematerial");
  825. colNameList.add("bodymaterial");
  826. colNameList.add("actuatortype");
  827. colNameList.add("actuatorbrand");
  828. colNameList.add("isbutterfly");
  829. colNameList.add("brandname");
  830. colNameList.add("itemclassnum");
  831. colNameList.add("msg");
  832. keytypemap.put("itemno", String.class);
  833. keytypemap.put("itemname", String.class);
  834. keytypemap.put("spec", String.class);
  835. keytypemap.put("model", String.class);
  836. keytypemap.put("unitname", String.class);
  837. keytypemap.put("erpitemname", String.class);
  838. keytypemap.put("erpitemno", String.class);
  839. keytypemap.put("standards", String.class);
  840. keytypemap.put("orderminqty", String.class);
  841. keytypemap.put("orderaddqty", String.class);
  842. keytypemap.put("material", String.class);
  843. keytypemap.put("stockstatus1", String.class);
  844. keytypemap.put("stockstatus2", String.class);
  845. keytypemap.put("tradefield", String.class);
  846. keytypemap.put("delivery", String.class);
  847. keytypemap.put("prodline", String.class);
  848. keytypemap.put("device", String.class);
  849. keytypemap.put("specalnote", String.class);
  850. keytypemap.put("isservice", String.class);
  851. keytypemap.put("pressure", String.class);
  852. keytypemap.put("butterflyplatedrive", String.class);
  853. keytypemap.put("connection", String.class);
  854. keytypemap.put("valveplatematerial", String.class);
  855. keytypemap.put("bodymaterial", String.class);
  856. keytypemap.put("actuatortype", String.class);
  857. keytypemap.put("actuatorbrand", String.class);
  858. keytypemap.put("isbutterfly", String.class);
  859. keytypemap.put("brandname", String.class);
  860. keytypemap.put("itemclassnum", String.class);
  861. keytypemap.put("msg", String.class);
  862. rowserr.setFieldList(colNameList);
  863. rowserr.setFieldTypeMap(keytypemap);
  864. addSheet(excelFactory, "Sheet1", rowserr, map);
  865. Rows aa = uploadExcelToObs(excelFactory);
  866. String url = "";
  867. if (!aa.isEmpty()) {
  868. url = aa.get(0).getString("url");
  869. }
  870. return getSucReturnObject().setData(url).toString();
  871. }
  872. if (!rowssuc.isEmpty()) {
  873. for (Row row : rowssuc) {
  874. Long itemid = createTableID("plm_item");
  875. SQLFactory sqlFactory = new SQLFactory(this, "货品档案新增");
  876. sqlFactory.addParameter("siteid", siteid);
  877. sqlFactory.addParameter("itemid", itemid);
  878. sqlFactory.addParameter("username", username);
  879. sqlFactory.addParameter("userid", userid);
  880. sqlFactory.addParameter("itemno", row.getString("itemno"));
  881. sqlFactory.addParameter("unitid", row.getLong("unitid"));
  882. sqlFactory.addParameter("isauxunit", 0);
  883. sqlFactory.addParameter("unitgroupid", "null");
  884. sqlFactory.addParameter("itemname", row.getString("itemname"));
  885. sqlFactory.addParameter("isonsale", 0);
  886. sqlFactory.addParameter("model", row.getString("model"));
  887. sqlFactory.addParameter("spec", row.getString("spec"));
  888. // 订单起订量
  889. sqlFactory.addParameter("orderminqty", row.getBigDecimal("orderminqty"));
  890. // 订单增量
  891. sqlFactory.addParameter("orderaddqty", row.getBigDecimal("orderaddqty"));
  892. // 订单起订量控制单位(0:主单位;1:辅助单位)
  893. sqlFactory.addParameter("orderminqty_auxunit", 0);
  894. // 订单增量控制单位(0:主单位;1:辅助单位)
  895. sqlFactory.addParameter("orderaddqty_auxunit", 0);
  896. // 说明
  897. sqlFactory.addParameter("remarks", "null");
  898. // 商品条形码
  899. sqlFactory.addParameter("barcode", "null");
  900. // 是否单品管理
  901. sqlFactory.addParameter("skucontrol", 0);
  902. // 是否批次管理
  903. sqlFactory.addParameter("batchcontrol", 0);
  904. // 毛重(g)
  905. sqlFactory.addParameter("grossweight", "null");
  906. // 净重(g)
  907. sqlFactory.addParameter("weight", "null");
  908. // 高度(mm)
  909. sqlFactory.addParameter("height", "null");
  910. // 宽度(mm)
  911. sqlFactory.addParameter("width", "null");
  912. // 长度(mm)
  913. sqlFactory.addParameter("length", "null");
  914. // 交期
  915. sqlFactory.addParameter("delivery", row.getLong("delivery"));
  916. // 牌价
  917. sqlFactory.addParameter("marketprice", 0);
  918. // 是否工具
  919. sqlFactory.addParameter("istool", 0);
  920. // 产品标准
  921. sqlFactory.addParameter("standards", row.getString("standards"));
  922. // 库存缺货标准
  923. sqlFactory.addParameter("stockstatus2", row.getInteger("stockstatus2"));
  924. // 库存充足标准
  925. sqlFactory.addParameter("stockstatus1", row.getInteger("stockstatus1"));
  926. // 保修期(年)
  927. sqlFactory.addParameter("warrantyday", "null");
  928. // 是否营销物料
  929. sqlFactory.addParameter("iswuliao", 0);
  930. // 是否服务物料
  931. sqlFactory.addParameter("isservice", row.getString("isservice").equals("是") ? 1 : 0);
  932. sqlList.add(sqlFactory.getSQL());
  933. // 货品档案扩展属性字段表
  934. sqlFactory = new SQLFactory(this, "货品档案-扩展新增");
  935. Long plm_itemextendid = createTableID("plm_itemextend");
  936. sqlFactory.addParameter("siteid", siteid);
  937. sqlFactory.addParameter("userid", userid);
  938. sqlFactory.addParameter("username", username);
  939. sqlFactory.addParameter("plm_itemextendid", plm_itemextendid);
  940. sqlFactory.addParameter("itemid", itemid);
  941. sqlFactory.addParameter("material", row.getString("material"));
  942. sqlFactory.addParameter("pressure", row.getString("pressure"));
  943. sqlFactory.addParameter("caliber", "null");
  944. sqlFactory.addParameter("butterflyplatedrive", row.getString("butterflyplatedrive"));
  945. sqlFactory.addParameter("connection", row.getString("connection"));
  946. sqlFactory.addParameter("valveplatematerial", row.getString("valveplatematerial"));
  947. sqlFactory.addParameter("bodymaterial", row.getString("bodymaterial"));
  948. sqlFactory.addParameter("actuatortype", row.getString("actuatortype"));
  949. sqlFactory.addParameter("actuatorbrand", row.getString("actuatorbrand"));
  950. sqlFactory.addParameter("isbutterfly", row.getString("isbutterfly").equals("是") ? 1 : 0);
  951. sqlFactory.addParameter("erpitemno", row.getString("erpitemno"));
  952. sqlFactory.addParameter("erpitemname", row.getString("erpitemname"));
  953. sqlFactory.addParameter("specalnote", row.getString("specalnote"));
  954. sqlFactory.addParameter("prodline", row.getString("prodline"));
  955. sqlFactory.addParameter("device", row.getString("device"));
  956. sqlList.add(sqlFactory.getSQL());
  957. Long plm_item_tradefieldid = createTableID("plm_item_tradefield");
  958. sqlFactory = new SQLFactory(this, "新增领域");
  959. sqlFactory.addParameter("siteid", siteid);
  960. sqlFactory.addParameter("plm_item_tradefieldid", plm_item_tradefieldid);
  961. sqlFactory.addParameter("tradefield", row.getString("tradefield"));
  962. sqlFactory.addParameter("userid", userid);
  963. sqlFactory.addParameter("itemid", itemid);
  964. sqlList.add(sqlFactory.getSQL());
  965. Long sa_itemsaleclassid = createTableID("sa_itemsaleclass");
  966. sqlFactory = new SQLFactory(this, "新增营销类别");
  967. sqlFactory.addParameter("siteid", siteid);
  968. sqlFactory.addParameter("sa_itemsaleclassid", sa_itemsaleclassid);
  969. sqlFactory.addParameter("itemclassid", row.getString("itemclassid"));
  970. sqlFactory.addParameter("itemno", row.getString("itemno"));
  971. sqlFactory.addParameter("itemid", itemid);
  972. sqlList.add(sqlFactory.getSQL());
  973. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "新增", "货品档案导入").getSQL());
  974. sqlList.add(DataContrlLog.createLog(this, "plm_itemextend", plm_itemextendid, "新增", "货品档案导入").getSQL());
  975. sqlList.add(DataContrlLog.createLog(this, "plm_item_tradefield", plm_item_tradefieldid, "新增", "货品档案导入").getSQL());
  976. sqlList.add(DataContrlLog.createLog(this, "sa_itemsaleclass", sa_itemsaleclassid, "新增", "货品档案导入").getSQL());
  977. }
  978. }
  979. if (!sqlList.isEmpty()) {
  980. dbConnect.runSqlUpdate(sqlList);
  981. }
  982. } catch (Exception e1) {
  983. e1.printStackTrace();
  984. return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
  985. }
  986. return getSucReturnObject().toString();
  987. }
  988. public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows,
  989. HashMap<String, String> titlemap) {
  990. ArrayList<String> keylist = datarows.getFieldList();
  991. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
  992. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  993. XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
  994. XSSFFont font = xssfFWorkbook.createFont();
  995. font.setColor((short) 0xa);
  996. font.setFontHeightInPoints((short) 12);
  997. font.setBold(true);
  998. xssfCellStyle1.setFont(font);
  999. CellStyle style = xssfFWorkbook.createCellStyle();
  1000. DataFormat format = xssfFWorkbook.createDataFormat();
  1001. style.setDataFormat(format.getFormat("@"));
  1002. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  1003. for (int i = 0; i <= 32; i++) {
  1004. sheet.setDefaultColumnStyle(i, style);
  1005. }
  1006. ExportExcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
  1007. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  1008. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  1009. XSSFCellStyle titleCellStyle3 = ExportExcel.createTitleCellStyle3(xssfFWorkbook);
  1010. ExportExcel.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook);// 写入标题
  1011. for (int n = 0; n < datarows.size(); n++) {
  1012. Row row = datarows.get(n);
  1013. XSSFRow datarow = sheet.createRow(n + 3);
  1014. for (int i1 = 0; i1 < keylist.size(); i1++) {
  1015. Class fieldclazztype = datarows.getFieldMeta(keylist.get(i1)).getFieldtype();
  1016. if (fieldclazztype == Integer.class) {
  1017. datarow.createCell(i1).setCellValue(row.getInteger((String) keylist.get(i1)).intValue());
  1018. } else if (fieldclazztype == Long.class) {
  1019. datarow.createCell(i1).setCellValue(row.getLong((String) keylist.get(i1)));
  1020. } else if (fieldclazztype == Float.class) {
  1021. datarow.createCell(i1).setCellValue(row.getFloat((String) keylist.get(i1)));
  1022. } else if (fieldclazztype == Double.class) {
  1023. datarow.createCell(i1).setCellValue(row.getDouble((String) keylist.get(i1)));
  1024. } else {
  1025. datarow.createCell(i1).setCellValue(row.getString((String) keylist.get(i1)));
  1026. }
  1027. if (i1 == 29) {
  1028. datarow.getCell(i1).setCellStyle(xssfCellStyle1);
  1029. }
  1030. }
  1031. }
  1032. return sheet;
  1033. }
  1034. }