Item.java 108 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917
  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 com.alibaba.fastjson2.JSONArray;
  8. import com.alibaba.fastjson2.JSONObject;
  9. import common.Controller;
  10. import common.YosException;
  11. import common.annotation.API;
  12. import common.annotation.CACHEING;
  13. import common.annotation.CACHEING_CLEAN;
  14. import common.data.*;
  15. import org.apache.commons.lang.StringUtils;
  16. import org.apache.poi.ss.usermodel.CellStyle;
  17. import org.apache.poi.ss.usermodel.DataFormat;
  18. import org.apache.poi.xssf.usermodel.*;
  19. import restcontroller.R;
  20. import restcontroller.webmanage.sale.itemgroup.itemgroup;
  21. import utility.ERPDocking;
  22. import utility.tools.WebRequest;
  23. import java.io.IOException;
  24. import java.math.BigDecimal;
  25. import java.util.ArrayList;
  26. import java.util.HashMap;
  27. @API(title = "货品档案管理")
  28. public class Item extends Controller {
  29. /**
  30. * 构造函数
  31. *
  32. * @param content
  33. */
  34. public Item(JSONObject content) throws YosException {
  35. super(content);
  36. }
  37. @API(title = "货品档案新增", apiversion = R.ID20220923141502.v1.class, intervaltime = 200)
  38. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.class})
  39. public String insertOrUpdate() throws YosException {
  40. Long itemid = content.getLong("itemid");
  41. String itemno = content.getString("itemno");
  42. String aftersalesitemno = content.getString("aftersalesitemno");
  43. boolean isauxunit = content.getBooleanValue("isauxunit");
  44. ArrayList<String> sqlList = new ArrayList<>();
  45. Long plm_itemextendid = content.getLongValue("plm_itemextendid");
  46. SQLFactory sqlFactory = new SQLFactory(this, "货品档案新增");
  47. if (itemid <= 0) {
  48. itemid = createTableID("plm_item");
  49. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "新增", "新增商品" + content.getString("itemname")).getSQL());
  50. } else {
  51. if (dbConnect.runSqlQuery("SELECT 1 from plm_item WHERE itemid=" + itemid + " and siteid ='" + siteid + "'")
  52. .isEmpty()) {
  53. return getErrReturnObject().setErrMsg("数据不存在").toString();
  54. }
  55. 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 + "'");
  56. if(itemRows.get(0).getLong("wmsuploadflag")==2){
  57. if(!itemRows.get(0).getString("itemname").equals(content.getString("itemname")) ||
  58. !itemRows.get(0).getString("model").equals(content.getString("model")) ||
  59. !itemRows.get(0).getString("shapsize").equals(content.getString("shapsize")) ||
  60. !itemRows.get(0).getString("spec").equals(content.getString("spec")) ||
  61. !itemRows.get(0).getString("unitid").equals(content.getString("unitid")) ||
  62. !itemRows.get(0).getString("remarks").equals(content.getString("remarks")) ||
  63. !itemRows.get(0).getString("stockno").equals(content.getString("stockno"))){
  64. sqlList.add("update plm_item set wmsuploadflag=1 where itemid="+itemid+" and siteid='"+siteid+"'");
  65. }
  66. }
  67. if(content.getBooleanValue("ismodule")){
  68. // Rows aftersalesitemnorows = dbConnect.runSqlQuery("select aftersalesitemno from plm_item where siteid='"+siteid+"' and aftersalesitemno='"+aftersalesitemno+"'");
  69. // if(aftersalesitemnorows.isNotEmpty()){
  70. // return getErrReturnObject().setErrMsg("该配件的售后品号" + aftersalesitemno + "已存在,请修改").toString();
  71. // }
  72. }
  73. sqlFactory = new SQLFactory(this, "货品档案更新");
  74. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "编辑", "编辑商品" + content.getString("itemname")).getSQL());
  75. if (content.getLongValue("sa_customschemeid") > 0) {
  76. 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 + "'");
  77. String where = " and 1=1 and t1.itemid != " + itemid + " and sa_customschemeid=" + content.getLongValue("sa_customschemeid");
  78. if (!customschemeRows.isEmpty()) {
  79. for (Row row : customschemeRows) {
  80. if (StringUtils.isBlank(itemRows.get(0).getString(row.getString("value"))) && StringUtils.isBlank(content.getStringValue(row.getString("value")))) {
  81. return getErrReturnObject().setErrMsg("该商品定制方案" + row.getString("schemename") + "下" + row.getString("description") + "不可为空").toString();
  82. } else if (StringUtils.isBlank(itemRows.get(0).getString(row.getString("value"))) || StringUtils.isBlank(content.getStringValue(row.getString("value")))) {
  83. //System.out.println(1111);
  84. // System.out.println(StringUtils.isBlank(itemRows.get(0).getString(row.getString("value"))));
  85. 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"))) + "'";
  86. } else if (StringUtils.isNotBlank(itemRows.get(0).getString(row.getString("value"))) && StringUtils.isNotBlank(content.getStringValue(row.getString("value"))))
  87. where = where + " and " + row.getString("value") + "='" + content.getStringValue(row.getString("value")) + "'";
  88. }
  89. //System.out.println("select * from plm_item where siteid='" + siteid + "'" + where);
  90. 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);
  91. if (items.isNotEmpty()) {
  92. return getErrReturnObject().setErrMsg("该商品与定制方案下的" + items.get(0).getString("itemno") + "商品重复,请修改").toString();
  93. }
  94. }
  95. }
  96. if (content.getLongValue("sa_customschemeid") != itemRows.get(0).getLong("sa_customschemeid")) {
  97. 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 + ")");
  98. if (rowsCount.get(0).getLong("count") > 0) {
  99. return getErrReturnObject().setErrMsg("该商品存在与商品组" + rowsCount.get(0).getString("groupnum") + ",请在商品组删除该商品后进行保存").toString();
  100. }
  101. }
  102. }
  103. if (content.getBooleanValue("iscustomsize")) {
  104. if (!siteid.equalsIgnoreCase("DLB")) {
  105. if (content.getLongValue("widthschemeid") <= 0 || content.getLongValue("lengthschemeid") <= 0) {
  106. return getErrReturnObject().setErrMsg("定制商品长度定制方案及宽度定制方案必选").toString();
  107. }
  108. }
  109. }
  110. sqlFactory.addParameter("siteid", siteid);
  111. sqlFactory.addParameter("itemid", itemid);
  112. sqlFactory.addParameter("username", username);
  113. sqlFactory.addParameter("userid", userid);
  114. sqlFactory.addParameter("itemno", itemno);
  115. sqlFactory.addParameter("aftersalesitemno", aftersalesitemno);
  116. sqlFactory.addParameter("unitid", content.getLongValue("unitid"));
  117. sqlFactory.addParameter("isauxunit", isauxunit);
  118. sqlFactory.addParameter("unitgroupid", isauxunit ? content.getString("unitgroupid") : "null");
  119. sqlFactory.addParameter("itemname", content.getString("itemname"));
  120. sqlFactory.addParameter("isonsale", 0);
  121. sqlFactory.addParameter("model", content.getString("model"));
  122. sqlFactory.addParameter("spec", content.getString("spec"));
  123. // 订单起订量
  124. if (content.getBigDecimal("orderminqty").compareTo(BigDecimal.ZERO) <= 0) {
  125. return getErrReturnObject().setErrMsg("起订量必须大于零").toString();
  126. }
  127. if (content.getBigDecimal("orderaddqty").compareTo(BigDecimal.ZERO) <= 0) {
  128. return getErrReturnObject().setErrMsg("增量必须大于零").toString();
  129. }
  130. sqlFactory.addParameter("orderminqty", content.getBigDecimal("orderminqty"));
  131. // 订单增量
  132. sqlFactory.addParameter("orderaddqty", content.getBigDecimal("orderaddqty"));
  133. // 订单起订量控制单位(0:主单位;1:辅助单位)
  134. sqlFactory.addParameter("orderminqty_auxunit", content.getString("orderminqty_auxunit"));
  135. // 订单增量控制单位(0:主单位;1:辅助单位)
  136. sqlFactory.addParameter("orderaddqty_auxunit", content.getString("orderaddqty_auxunit"));
  137. // 说明
  138. sqlFactory.addParameter("remarks", content.getStringValue("remarks"));
  139. // 商品条形码
  140. sqlFactory.addParameter("barcode", content.getStringValue("barcode"));
  141. // 是否单品管理
  142. sqlFactory.addParameter("skucontrol", content.getBooleanValue("skucontrol"));
  143. // 是否批次管理
  144. sqlFactory.addParameter("batchcontrol", content.getBooleanValue("batchcontrol"));
  145. // 毛重(g)
  146. sqlFactory.addParameter("grossweight", content.getLongValue("grossweight"));
  147. // 净重(g)
  148. sqlFactory.addParameter("weight", content.getLongValue("weight"));
  149. // 高度(mm)
  150. sqlFactory.addParameter("height", content.getLongValue("height"));
  151. // 宽度(mm)
  152. sqlFactory.addParameter("width", content.getLongValue("width"));
  153. // 长度(mm)
  154. sqlFactory.addParameter("length", content.getLongValue("length"));
  155. // 交期
  156. sqlFactory.addParameter("delivery", content.getLongValue("delivery"));
  157. // 牌价
  158. sqlFactory.addParameter("marketprice", content.getBigDecimal("marketprice"));
  159. // 是否工具
  160. sqlFactory.addParameter("istool", content.getBooleanValue("istool"));
  161. // 产品标准
  162. sqlFactory.addParameter("standards", content.getStringValue("standards"));
  163. // 库存缺货标准
  164. sqlFactory.addParameter("stockstatus2", content.getIntValue("stockstatus2"));
  165. // 库存充足标准
  166. sqlFactory.addParameter("stockstatus1", content.getIntValue("stockstatus1"));
  167. // 保修期(年)
  168. sqlFactory.addParameter("warrantyday", content.getIntValue("warrantyday"));
  169. // 是否营销物料
  170. sqlFactory.addParameter("iswuliao", content.getBooleanValue("iswuliao"));
  171. // 是否服务物料
  172. sqlFactory.addParameter("isservice", content.getBooleanValue("isservice"));
  173. sqlFactory.addParameter("marketingcategory", content.getStringValue("marketingcategory"));
  174. sqlFactory.addParameter("color", content.getStringValue("color"));
  175. //边框(德莱宝中为工艺)
  176. sqlFactory.addParameter("cheek", content.getStringValue("cheek"));
  177. sqlFactory.addParameter("delistingstatus", content.getStringValue("delistingstatus"));
  178. sqlFactory.addParameter("ismodule", content.getStringValue("ismodule"));
  179. sqlFactory.addParameter("packageqty", content.getStringValue("packageqty"));
  180. sqlFactory.addParameter("iswoodproducts", content.getStringValue("iswoodproducts"));
  181. sqlFactory.addParameter("sa_customschemeid", content.getLongValue("sa_customschemeid"));
  182. sqlFactory.addParameter("financeclasstype", content.getStringValue("financeclasstype"));
  183. sqlFactory.addParameter("stockno", content.getStringValue("stockno"));
  184. sqlFactory.addParameter("volume", content.getBigDecimal("volume"));
  185. sqlFactory.addParameter("iscustomsize", content.getBooleanValue("iscustomsize"));
  186. sqlFactory.addParameter("customprice", content.getBigDecimal("customprice"));
  187. sqlFactory.addParameter("widthschemeid", content.getBigDecimal("widthschemeid"));
  188. sqlFactory.addParameter("lengthschemeid", content.getBigDecimal("lengthschemeid"));
  189. Long pricingmetod = content.getLongValue("pricingmetod");
  190. sqlFactory.addParameter("pricingmetod", pricingmetod == 0 ? 1 : pricingmetod);
  191. //德莱宝,工艺定义方案id
  192. sqlFactory.addParameter("cheekschemeid", content.getBigDecimal("cheekschemeid"));
  193. //德莱宝,颜色定义方案id
  194. sqlFactory.addParameter("colorschemeid", content.getBigDecimal("colorschemeid"));
  195. //德莱宝,选项定义方案id
  196. sqlFactory.addParameter("materialschemeid", content.getBigDecimal("materialschemeid"));
  197. sqlFactory.addParameter("saleprice", content.getBigDecimal("saleprice"));
  198. sqlFactory.addParameter("cost", content.getBigDecimal("cost"));
  199. sqlFactory.addParameter("grossprofit", content.getBigDecimal("grossprofit"));
  200. sqlFactory.addParameter("grossprofitmargin", content.getBigDecimal("grossprofitmargin"));
  201. sqlFactory.addParameter("soldbase", content.getBigDecimal("soldbase"));
  202. sqlFactory.addParameter("byname", content.getStringValue("byname"));
  203. //rate,grade,custamount,safeqty,icaddqty,icminqty,iswriteoff,isnegative,ispartorderautocheck,islimitemparts,itemname_print,
  204. //applicablegassource,hygienelicensenum,departmentid,executionstandards,itemclsnum,outplace
  205. sqlFactory.addParameter("rate", content.getBigDecimal("rate"));
  206. sqlFactory.addParameter("grade", content.getStringValue("grade"));
  207. sqlFactory.addParameter("custamount", content.getBigDecimal("custamount"));
  208. sqlFactory.addParameter("safeqty", content.getBigDecimal("safeqty"));
  209. sqlFactory.addParameter("icaddqty", content.getBigDecimal("icaddqty"));
  210. sqlFactory.addParameter("icminqty", content.getBigDecimal("icminqty"));
  211. sqlFactory.addParameter("iswriteoff", content.getBooleanValue("iswriteoff"));
  212. sqlFactory.addParameter("isnegative", content.getBooleanValue("isnegative"));
  213. sqlFactory.addParameter("ispartorderautocheck", content.getBooleanValue("ispartorderautocheck"));
  214. sqlFactory.addParameter("islimitemparts", content.getBooleanValue("islimitemparts"));
  215. sqlFactory.addParameter("itemname_print", content.getStringValue("itemname_print"));
  216. sqlFactory.addParameter("applicablegassource", content.getStringValue("applicablegassource"));
  217. sqlFactory.addParameter("hygienelicensenum", content.getStringValue("hygienelicensenum"));
  218. sqlFactory.addParameter("departmentid", content.getLongValue("departmentid"));
  219. sqlFactory.addParameter("executionstandards", content.getStringValue("executionstandards"));
  220. sqlFactory.addParameter("itemclsnum", content.getStringValue("itemclsnum"));
  221. sqlFactory.addParameter("outplace", content.getStringValue("outplace"));
  222. sqlFactory.addParameter("repairattribute", content.getStringValue("repairattribute"));
  223. sqlFactory.addParameter("shapesize", content.getStringValue("shapesize"));
  224. sqlFactory.addParameter("kw", content.getStringValue("kw"));
  225. sqlFactory.addParameter("gysmc", content.getStringValue("gysmc"));
  226. sqlFactory.addParameter("poday", content.getIntValue("poday"));
  227. sqlFactory.addParameter("sa_supplierid", content.getLongValue("sa_supplierid"));
  228. String topclassnum="";
  229. if (content.containsKey("itemclassids")) {
  230. JSONArray itemclassids = content.getJSONArray("itemclassids");
  231. for (Object obj : itemclassids) {
  232. JSONObject itemclass = (JSONObject) obj;
  233. if(itemclass.getStringValue("classtype").equals("存货")){
  234. SQLFactory sqlFactory1 = new SQLFactory(this, "获取最上级营销类别名称");
  235. sqlFactory1.addParameter_in("itemclassid", itemclass.getLongValue("itemclassid"));
  236. sqlFactory1.addParameter("siteid", siteid);
  237. Rows rows = dbConnect.runSqlQuery(sqlFactory1.getSQL());
  238. if (rows.isNotEmpty()) {
  239. topclassnum=rows.get(0).getString("itemclassname");
  240. }
  241. }
  242. }
  243. }
  244. sqlFactory.addParameter("topclassnum", topclassnum);
  245. sqlList.add(sqlFactory.getSQL());
  246. // 货品档案扩展属性字段表
  247. sqlFactory = new SQLFactory(this, "货品档案-扩展新增");
  248. if (plm_itemextendid <= 0) {
  249. plm_itemextendid = createTableID("plm_itemextend");
  250. } else {
  251. sqlFactory = new SQLFactory(this, "货品档案-扩展更新");
  252. }
  253. sqlFactory.addParameter("siteid", siteid);
  254. sqlFactory.addParameter("userid", userid);
  255. sqlFactory.addParameter("username", username);
  256. sqlFactory.addParameter("plm_itemextendid", plm_itemextendid);
  257. sqlFactory.addParameter("itemid", itemid);
  258. //基材(德莱宝中为选项)
  259. sqlFactory.addParameter("material", content.getStringValue("material"));
  260. sqlFactory.addParameter("pressure", content.getStringValue("pressure"));
  261. sqlFactory.addParameter("caliber", content.getStringValue("caliber"));
  262. sqlFactory.addParameter("butterflyplatedrive", content.getStringValue("butterflyplatedrive"));
  263. sqlFactory.addParameter("connection", content.getStringValue("connection"));
  264. sqlFactory.addParameter("valveplatematerial", content.getStringValue("valveplatematerial"));
  265. sqlFactory.addParameter("bodymaterial", content.getStringValue("bodymaterial"));
  266. sqlFactory.addParameter("actuatortype", content.getStringValue("actuatortype"));
  267. sqlFactory.addParameter("actuatorbrand", content.getStringValue("actuatorbrand"));
  268. sqlFactory.addParameter("isbutterfly", content.getBooleanValue("isbutterfly"));
  269. sqlFactory.addParameter("erpitemno", content.getStringValue("erpitemno"));
  270. sqlFactory.addParameter("erpitemname", content.getStringValue("erpitemname"));
  271. String specalnote = content.getStringValue("specalnote");
  272. if (pricingmetod == 1 && !specalnote.contains("此商品单价为平方价")) {
  273. specalnote = "此商品单价为平方价;" + specalnote;
  274. }
  275. if (pricingmetod == 0 && specalnote.contains("此商品单价为平方价")) {
  276. specalnote = specalnote.replace("此商品单价为平方价;", "");
  277. }
  278. sqlFactory.addParameter("specalnote", specalnote);
  279. sqlFactory.addParameter("prodline", content.getStringValue("prodline"));
  280. sqlFactory.addParameter("device", content.getStringValue("device"));
  281. sqlList.add(sqlFactory.getSQL());
  282. // 添加领域
  283. if (content.containsKey("tradefields")) {
  284. JSONArray tradefields = content.getJSONArray("tradefields");
  285. if (!tradefields.isEmpty()) {
  286. if (tradefields.size() > 1) {
  287. return getErrReturnObject().setErrMsg("商品只能维护一个领域").toString();
  288. }
  289. sqlList.add("delete from plm_item_tradefield where itemid =" + itemid + " and siteid='" + siteid + "'");
  290. for (Object obj : tradefields) {
  291. String tradefield = (String) obj;
  292. sqlFactory = new SQLFactory(this, "新增领域");
  293. sqlFactory.addParameter("siteid", siteid);
  294. sqlFactory.addParameter("plm_item_tradefieldid", createTableID("plm_item_tradefield"));
  295. sqlFactory.addParameter("tradefield", tradefield);
  296. sqlFactory.addParameter("userid", userid);
  297. sqlFactory.addParameter("itemid", itemid);
  298. sqlList.add(sqlFactory.getSQL());
  299. }
  300. // if (tradefields.size() > 0) {
  301. // sqlFactory = new SQLFactory(this, "删除多余的领域");
  302. // sqlFactory.addParameter("siteid", siteid);
  303. // sqlFactory.addParameter_in("tradefield", tradefields.toArray());
  304. // sqlFactory.addParameter("userid", userid);
  305. // sqlFactory.addParameter("itemid", itemid);
  306. // sqlList.add(sqlFactory.getSQL());
  307. // }
  308. }
  309. }
  310. if (content.containsKey("itemclassids")) {
  311. JSONArray itemclassids = content.getJSONArray("itemclassids");
  312. if (!itemclassids.isEmpty()) {
  313. // if (itemclassids.size() > 1) {
  314. // return getErrReturnObject().setErrMsg("商品只能维护一个营销类别").toString();
  315. // }
  316. sqlList.add("delete from sa_itemsaleclass where itemid =" + itemid + " and siteid='" + siteid + "'");
  317. for (Object obj : itemclassids) {
  318. JSONObject itemclass = (JSONObject) obj;
  319. sqlFactory = new SQLFactory(this, "商品营销类别新增");
  320. sqlFactory.addParameter("sa_itemsaleclassid", createTableID("sa_itemsaleclass"));
  321. sqlFactory.addParameter("siteid", siteid);
  322. sqlFactory.addParameter("itemid", itemid);
  323. sqlFactory.addParameter("itemno", itemno);
  324. sqlFactory.addParameter("classtype", itemclass.getStringValue("classtype"));
  325. sqlFactory.addParameter("itemclassid", itemclass.getLongValue("itemclassid"));
  326. if(itemclass.getStringValue("classtype").equals("存货")){
  327. Rows itemclsnumrows =dbConnect.runSqlQuery("select itemclassnum from plm_itemclass where classtype='存货' and itemclassid="+itemclass.getLongValue("itemclassid"));
  328. if(!itemclsnumrows.isEmpty()){
  329. sqlList.add("update plm_item set itemclsnum='"+itemclsnumrows.get(0).getString("itemclassnum")+"' where itemid="+itemid);
  330. }
  331. }
  332. sqlList.add(sqlFactory.getSQL());
  333. }
  334. }
  335. // sqlFactory = new SQLFactory(this, "商品营销类别删除");
  336. // sqlFactory.addParameter("sa_itemsaleclassid", createTableID("sa_itemsaleclass"));
  337. // sqlFactory.addParameter("siteid", siteid);
  338. // sqlFactory.addParameter("itemid", itemid);
  339. // sqlFactory.addParameter("itemno", itemno);
  340. // sqlFactory.addParameter_in("itemclassid", itemclassids.toArray());
  341. sqlList.add(sqlFactory.getSQL());
  342. }
  343. dbConnect.runSqlUpdate(sqlList);
  344. content.put("itemid", itemid);
  345. return queryDetail();
  346. }
  347. @API(title = "商品复制", apiversion = R.ID2025101409071403.v1.class)
  348. public String copyItem() throws YosException {
  349. long itemid = content.getLong("itemid");
  350. SQLFactory sqlFactory = new SQLFactory(this, "货品档案新增");
  351. ArrayList<String> sqlList=new ArrayList<>();
  352. Rows itemRows = dbConnect.runSqlQuery("select *from plm_item where itemid="+itemid);
  353. Rows itemextendRows = dbConnect.runSqlQuery("select *from plm_itemextend where itemid="+itemid);
  354. Rows itemtradefieldRows = dbConnect.runSqlQuery("select *from plm_item_tradefield where itemid="+itemid);
  355. Rows itemsaleclassRows = dbConnect.runSqlQuery("select *from sa_itemsaleclass where itemid="+itemid);
  356. Rows attachmentLinksRows = dbConnect.runSqlQuery("select * from sys_attachment_links where ownertable='plm_item' and ownerid="+itemid);
  357. if(itemRows.isEmpty()){
  358. return getErrReturnObject().setErrMsg("原商品不存在,无法复制").toString();
  359. }
  360. Row item = itemRows.get(0);
  361. long newitemid = createTableID("plm_item");
  362. sqlList.add(DataContrlLog.createLog(this, "plm_item", newitemid, "新增", "新增商品" + item.getString("itemname")).getSQL());
  363. sqlFactory.addParameter("siteid", siteid);
  364. sqlFactory.addParameter("itemid", newitemid);
  365. sqlFactory.addParameter("username", username);
  366. sqlFactory.addParameter("userid", userid);
  367. sqlFactory.addParameter("itemno", "复制"+item.getString("itemno"));
  368. sqlFactory.addParameter("aftersalesitemno", "复制"+item.getString("aftersalesitemno"));
  369. sqlFactory.addParameter("unitid", item.getLong("unitid"));
  370. sqlFactory.addParameter("isauxunit", item.getString("isauxunit"));
  371. sqlFactory.addParameter("unitgroupid", item.getString("unitgroupid"));
  372. sqlFactory.addParameter("itemname", item.getString("itemname"));
  373. sqlFactory.addParameter("isonsale", 0);
  374. sqlFactory.addParameter("model", item.getString("model"));
  375. sqlFactory.addParameter("spec", item.getString("spec"));
  376. // 订单起订量
  377. sqlFactory.addParameter("orderminqty", item.getBigDecimal("orderminqty"));
  378. // 订单增量
  379. sqlFactory.addParameter("orderaddqty", item.getBigDecimal("orderaddqty"));
  380. // 订单起订量控制单位(0:主单位;1:辅助单位)
  381. sqlFactory.addParameter("orderminqty_auxunit", item.getString("orderminqty_auxunit"));
  382. // 订单增量控制单位(0:主单位;1:辅助单位)
  383. sqlFactory.addParameter("orderaddqty_auxunit", item.getString("orderaddqty_auxunit"));
  384. // 说明
  385. sqlFactory.addParameter("remarks", item.getString("remarks"));
  386. // 商品条形码
  387. sqlFactory.addParameter("barcode", item.getString("barcode"));
  388. // 是否单品管理
  389. sqlFactory.addParameter("skucontrol", item.getBoolean("skucontrol"));
  390. // 是否批次管理
  391. sqlFactory.addParameter("batchcontrol", item.getBoolean("batchcontrol"));
  392. // 毛重(g)
  393. sqlFactory.addParameter("grossweight", item.getLong("grossweight"));
  394. // 净重(g)
  395. sqlFactory.addParameter("weight", item.getLong("weight"));
  396. // 高度(mm)
  397. sqlFactory.addParameter("height", item.getLong("height"));
  398. // 宽度(mm)
  399. sqlFactory.addParameter("width", item.getLong("width"));
  400. // 长度(mm)
  401. sqlFactory.addParameter("length", item.getLong("length"));
  402. // 交期
  403. sqlFactory.addParameter("delivery", item.getLong("delivery"));
  404. // 牌价
  405. sqlFactory.addParameter("marketprice", item.getBigDecimal("marketprice"));
  406. // 是否工具
  407. sqlFactory.addParameter("istool", item.getBoolean("istool"));
  408. // 产品标准
  409. sqlFactory.addParameter("standards", item.getString("standards"));
  410. // 库存缺货标准
  411. sqlFactory.addParameter("stockstatus2", item.getInteger("stockstatus2"));
  412. // 库存充足标准
  413. sqlFactory.addParameter("stockstatus1", item.getInteger("stockstatus1"));
  414. // 保修期(年)
  415. sqlFactory.addParameter("warrantyday", item.getInteger("warrantyday"));
  416. // 是否营销物料
  417. sqlFactory.addParameter("iswuliao", item.getBoolean("iswuliao"));
  418. // 是否服务物料
  419. sqlFactory.addParameter("isservice", item.getBoolean("isservice"));
  420. sqlFactory.addParameter("marketingcategory", item.getString("marketingcategory"));
  421. sqlFactory.addParameter("color", item.getString("color"));
  422. //边框(德莱宝中为工艺)
  423. sqlFactory.addParameter("cheek", item.getString("cheek"));
  424. sqlFactory.addParameter("delistingstatus", item.getString("delistingstatus"));
  425. sqlFactory.addParameter("ismodule", item.getString("ismodule"));
  426. sqlFactory.addParameter("packageqty", item.getString("packageqty"));
  427. sqlFactory.addParameter("iswoodproducts", item.getString("iswoodproducts"));
  428. sqlFactory.addParameter("sa_customschemeid", item.getString("sa_customschemeid"));
  429. sqlFactory.addParameter("financeclasstype", item.getString("financeclasstype"));
  430. sqlFactory.addParameter("stockno", item.getString("stockno"));
  431. sqlFactory.addParameter("volume", item.getBigDecimal("volume"));
  432. sqlFactory.addParameter("iscustomsize", 0);
  433. sqlFactory.addParameter("customprice", item.getBigDecimal("customprice"));
  434. sqlFactory.addParameter("widthschemeid", item.getBigDecimal("widthschemeid"));
  435. sqlFactory.addParameter("lengthschemeid", item.getBigDecimal("lengthschemeid"));
  436. sqlFactory.addParameter("pricingmetod", item.getLong("pricingmetod"));
  437. //德莱宝,工艺定义方案id
  438. sqlFactory.addParameter("cheekschemeid", item.getBigDecimal("cheekschemeid"));
  439. //德莱宝,颜色定义方案id
  440. sqlFactory.addParameter("colorschemeid", item.getBigDecimal("colorschemeid"));
  441. //德莱宝,选项定义方案id
  442. sqlFactory.addParameter("materialschemeid", item.getBigDecimal("materialschemeid"));
  443. sqlFactory.addParameter("saleprice", item.getBigDecimal("saleprice"));
  444. sqlFactory.addParameter("cost", item.getBigDecimal("cost"));
  445. sqlFactory.addParameter("grossprofit", item.getBigDecimal("grossprofit"));
  446. sqlFactory.addParameter("grossprofitmargin", item.getBigDecimal("grossprofitmargin"));
  447. sqlFactory.addParameter("soldbase", item.getBigDecimal("soldbase"));
  448. sqlFactory.addParameter("byname", item.getString("byname"));
  449. //rate,grade,custamount,safeqty,icaddqty,icminqty,iswriteoff,isnegative,ispartorderautocheck,islimitemparts,itemname_print,
  450. //applicablegassource,hygienelicensenum,departmentid,executionstandards,itemclsnum,outplace
  451. sqlFactory.addParameter("rate", item.getBigDecimal("rate"));
  452. sqlFactory.addParameter("grade", item.getString("grade"));
  453. sqlFactory.addParameter("custamount", item.getBigDecimal("custamount"));
  454. sqlFactory.addParameter("safeqty", item.getBigDecimal("safeqty"));
  455. sqlFactory.addParameter("icaddqty", item.getBigDecimal("icaddqty"));
  456. sqlFactory.addParameter("icminqty", item.getBigDecimal("icminqty"));
  457. sqlFactory.addParameter("iswriteoff", item.getBoolean("iswriteoff"));
  458. sqlFactory.addParameter("isnegative", item.getBoolean("isnegative"));
  459. sqlFactory.addParameter("ispartorderautocheck", item.getString("ispartorderautocheck"));
  460. sqlFactory.addParameter("islimitemparts", item.getString("islimitemparts"));
  461. sqlFactory.addParameter("itemname_print", item.getString("itemname_print"));
  462. sqlFactory.addParameter("applicablegassource", item.getString("applicablegassource"));
  463. sqlFactory.addParameter("hygienelicensenum", item.getString("hygienelicensenum"));
  464. sqlFactory.addParameter("departmentid", item.getString("departmentid"));
  465. sqlFactory.addParameter("executionstandards", item.getString("executionstandards"));
  466. sqlFactory.addParameter("itemclsnum", item.getString("itemclsnum"));
  467. sqlFactory.addParameter("outplace", item.getString("outplace"));
  468. sqlFactory.addParameter("repairattribute", item.getString("repairattribute"));
  469. sqlFactory.addParameter("shapesize", item.getString("shapesize"));
  470. sqlFactory.addParameter("topclassnum", item.getString("topclassnum"));
  471. sqlFactory.addParameter("kw", item.getString("kw"));
  472. sqlFactory.addParameter("gysmc", item.getString("gysmc"));
  473. sqlFactory.addParameter("poday", item.getLong("poday"));
  474. sqlFactory.addParameter("sa_supplierid", item.getLong("sa_supplierid"));
  475. sqlList.add(sqlFactory.getSQL());
  476. // 货品档案扩展属性字段表
  477. if(!itemextendRows.isEmpty()){
  478. sqlFactory = new SQLFactory(this, "货品档案-扩展新增");
  479. long plm_itemextendid = createTableID("plm_itemextend");
  480. Row itemextendRow = itemextendRows.get(0);
  481. sqlFactory.addParameter("siteid", siteid);
  482. sqlFactory.addParameter("userid", userid);
  483. sqlFactory.addParameter("username", username);
  484. sqlFactory.addParameter("plm_itemextendid", plm_itemextendid);
  485. sqlFactory.addParameter("itemid", newitemid);
  486. //基材(德莱宝中为选项)
  487. sqlFactory.addParameter("material", itemextendRow.getString("material"));
  488. sqlFactory.addParameter("pressure", itemextendRow.getString("pressure"));
  489. sqlFactory.addParameter("caliber", itemextendRow.getString("caliber"));
  490. sqlFactory.addParameter("butterflyplatedrive", itemextendRow.getString("butterflyplatedrive"));
  491. sqlFactory.addParameter("connection", itemextendRow.getString("connection"));
  492. sqlFactory.addParameter("valveplatematerial", itemextendRow.getString("valveplatematerial"));
  493. sqlFactory.addParameter("bodymaterial", itemextendRow.getString("bodymaterial"));
  494. sqlFactory.addParameter("actuatortype", itemextendRow.getString("actuatortype"));
  495. sqlFactory.addParameter("actuatorbrand", itemextendRow.getString("actuatorbrand"));
  496. sqlFactory.addParameter("isbutterfly", itemextendRow.getBoolean("isbutterfly"));
  497. sqlFactory.addParameter("erpitemno", itemextendRow.getString("erpitemno"));
  498. sqlFactory.addParameter("erpitemname", itemextendRow.getString("erpitemname"));
  499. String specalnote = itemextendRow.getString("specalnote");
  500. sqlFactory.addParameter("specalnote", specalnote);
  501. sqlFactory.addParameter("prodline", itemextendRow.getString("prodline"));
  502. sqlFactory.addParameter("device", itemextendRow.getString("device"));
  503. sqlList.add(sqlFactory.getSQL());
  504. }
  505. if(!itemtradefieldRows.isEmpty()){
  506. sqlFactory = new SQLFactory(this, "新增领域");
  507. sqlFactory.addParameter("siteid", siteid);
  508. sqlFactory.addParameter("plm_item_tradefieldid", createTableID("plm_item_tradefield"));
  509. sqlFactory.addParameter("tradefield", itemtradefieldRows.get(0).getString("tradefield"));
  510. sqlFactory.addParameter("userid", userid);
  511. sqlFactory.addParameter("itemid", newitemid);
  512. sqlList.add(sqlFactory.getSQL());
  513. }
  514. if(!itemsaleclassRows.isEmpty()){
  515. for(Row row :itemsaleclassRows){
  516. sqlFactory = new SQLFactory(this, "商品营销类别新增");
  517. sqlFactory.addParameter("sa_itemsaleclassid", createTableID("sa_itemsaleclass"));
  518. sqlFactory.addParameter("siteid", siteid);
  519. sqlFactory.addParameter("itemid", newitemid);
  520. sqlFactory.addParameter("itemno", "复制"+item.getString("itemno"));
  521. sqlFactory.addParameter("classtype", row.getString("classtype"));
  522. sqlFactory.addParameter("itemclassid", row.getLong("itemclassid"));
  523. sqlList.add(sqlFactory.getSQL());
  524. }
  525. }
  526. if(!attachmentLinksRows.isEmpty()){
  527. for(Row row :attachmentLinksRows){
  528. Long linksid = createTableID("sys_attachment_links");
  529. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sys_attachment_links");
  530. insertSQL.setValue("linksid", linksid);
  531. insertSQL.setValue("siteid", siteid);
  532. insertSQL.setValue("ownertable", "plm_item");
  533. insertSQL.setValue("ownerid", newitemid);
  534. insertSQL.setValue("attachmentid", row.getLong("attachmentid"));
  535. insertSQL.setValue("usetype", row.getString("usertype"));
  536. insertSQL.setValue("sequence", row.getLong("sequence"));
  537. insertSQL.setValue("createby", username);
  538. insertSQL.setDateValue("createdate");
  539. insertSQL.setValue("changeby", username);
  540. insertSQL.setDateValue("changedate");
  541. sqlList.add(insertSQL.getSQL());
  542. }
  543. }
  544. dbConnect.runSqlUpdate(sqlList);
  545. content.put("itemid", newitemid);
  546. return queryDetail();
  547. }
  548. @API(title = "货品档案详情", apiversion = R.ID20220923155302.v1.class)
  549. public String queryDetail() throws YosException {
  550. Long itemid = content.getLong("itemid");
  551. ArrayList<Long> itemids = new ArrayList<>();
  552. itemids.add(itemid);
  553. //查询erp库存
  554. Invbal.selectErpInvbal(this, itemid);
  555. SQLFactory sqlFactory = new SQLFactory(this, "货品档案详情");
  556. sqlFactory.addParameter("siteid", siteid);
  557. sqlFactory.addParameter("itemid", itemid);
  558. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  559. // 默认商品图片
  560. Rows defaultImageRows = beans.Item.Item.getItemdefaultImage(this);
  561. // 品牌
  562. RowsMap brandRowsMap = Brand.getBrandRowsMap(this, itemids);
  563. // 营销类别
  564. RowsMap itemSaleClassRowsMap = ItemClass.getAllItemClassRowsMap_new(this, itemids).get("营销").toRowsMap("itemid");
  565. // 存货类别
  566. RowsMap itemClassRowsMap = ItemClass.getAllItemClassRowsMap_new(this, itemids).get("存货").toRowsMap("itemid");
  567. // 附件
  568. RowsMap attRowsMap = getAttachmentUrl("plm_item", itemids);
  569. // 商品领域
  570. RowsMap tradefieldRowsMap = beans.Item.Item.getTradefieldRowsMap(this, itemids);
  571. ERPDocking erpDocking = new ERPDocking(siteid);
  572. JSONArray jsonArray = new JSONArray();
  573. // if (Parameter.getBoolean("system.ccerp_dockswitch")) {
  574. // if (!rows.toJsonArray("itemno").isEmpty()) {
  575. // jsonArray = erpDocking.getErpIcinvbalRows(200000, 1, rows.toJsonArray("itemno"));
  576. // }
  577. // }
  578. if (!jsonArray.isEmpty()) {
  579. for (Object object : jsonArray) {
  580. JSONObject jsonObject = (JSONObject) object;
  581. if (!rows.isEmpty()) {
  582. if (rows.get(0).getString("itemno").equals(jsonObject.getString("fitemno"))) {
  583. rows.get(0).put("invbal_qty", jsonObject.getBigDecimal("fqty"));
  584. }
  585. }
  586. }
  587. }
  588. JSONObject object = new JSONObject();
  589. object.put("classname", "getIcinvbal");
  590. object.put("method", "getMsg");
  591. JSONObject content = new JSONObject();
  592. content.put("fitemnos", rows.toJsonArray("itemno"));
  593. object.put("content", content);
  594. WebRequest request = new WebRequest();
  595. String result = "";
  596. // String result = request.doPost(object.toString(),
  597. // "http://60.190.151.198:8089/BYESB/jaxrs/webclientrest");
  598. Rows siteParameterRows =dbConnect.runSqlQuery("select * from sys_site_parameter where siteid='" + siteid + "'");
  599. for (Row row : rows) {
  600. JSONArray jsonArrayResult = new JSONArray();
  601. if (isJSONArray(result)) {
  602. jsonArrayResult = JSONArray.parseArray(result);
  603. }
  604. if (!jsonArrayResult.isEmpty()) {
  605. row.put("invbal_qty", ((JSONObject) jsonArrayResult.get(0)).getBigDecimal("fqty"));
  606. } else {
  607. row.put("invbal_qty", 0);
  608. }
  609. if (attRowsMap.getOrDefault(row.getString("itemid"), new Rows()).isEmpty()) {
  610. row.put("attinfos", defaultImageRows);
  611. } else {
  612. row.put("attinfos", attRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  613. }
  614. row.put("brand", brandRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  615. row.put("itemclass", itemClassRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  616. row.put("itemsaleclass", itemSaleClassRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  617. row.put("tradefield", tradefieldRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  618. if (siteParameterRows.isNotEmpty()) {
  619. row.put("defaultlevelprice",siteParameterRows.get(0).getString("defaultlevelprice"));
  620. }else{
  621. row.put("defaultlevelprice","");
  622. }
  623. }
  624. return getSucReturnObject().setData(rows.isNotEmpty() ? rows.get(0) : new Row()).toString();
  625. }
  626. @API(title = "货品档案库存查询", apiversion = R.ID20230913154803.v1.class)
  627. public String queryInvbalQty() throws YosException {
  628. Long itemid = content.getLong("itemid");
  629. Rows rows = dbConnect.runSqlQuery("select itemno from plm_item where siteid='" + siteid + "' and itemid=" + itemid);
  630. if (siteid.equalsIgnoreCase("lsa")) {
  631. JSONObject object = new JSONObject();
  632. object.put("classname", "getIcinvbal");
  633. object.put("method", "getMsg");
  634. JSONObject content = new JSONObject();
  635. content.put("fitemnos", rows.toJsonArray("itemno"));
  636. object.put("content", content);
  637. WebRequest request = new WebRequest();
  638. String result = request.doPost(object.toString(),
  639. "http://60.190.151.198:8089/BYESB/jaxrs/webclientrest");
  640. for (Row row : rows) {
  641. JSONArray jsonArrayResult = new JSONArray();
  642. if (isJSONArray(result)) {
  643. jsonArrayResult = JSONArray.parseArray(result);
  644. }
  645. if (!jsonArrayResult.isEmpty()) {
  646. row.put("invbal_qty", ((JSONObject) jsonArrayResult.get(0)).getBigDecimal("FQty"));
  647. } else {
  648. row.put("invbal_qty", 0);
  649. }
  650. }
  651. } else {
  652. ERPDocking erpDocking = new ERPDocking(siteid);
  653. JSONArray jsonArray = new JSONArray();
  654. // if (Parameter.getBoolean("system.ccerp_dockswitch")) {
  655. // if (!rows.toJsonArray("itemno").isEmpty()) {
  656. // jsonArray = erpDocking.getErpIcinvbalRows(200000, 1, rows.toJsonArray("itemno"));
  657. // }
  658. // }
  659. if (!jsonArray.isEmpty()) {
  660. for (Object object : jsonArray) {
  661. JSONObject jsonObject = (JSONObject) object;
  662. if (!rows.isEmpty()) {
  663. if (rows.get(0).getString("itemno").equals(jsonObject.getString("fitemno"))) {
  664. rows.get(0).put("invbal_qty", jsonObject.getBigDecimal("fqty"));
  665. }
  666. }
  667. }
  668. }
  669. }
  670. return getSucReturnObject().setData(rows.isNotEmpty() ? rows.get(0) : new Row()).toString();
  671. }
  672. @API(title = "货品档案列表", apiversion = R.ID20220923140602.v1.class)
  673. @CACHEING
  674. public String queryList() throws YosException, IOException {
  675. StringBuffer where = new StringBuffer(" 1=1 ");
  676. if (content.containsKey("where")) {
  677. JSONObject whereObject = content.getJSONObject("where");
  678. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  679. where.append(" and(");
  680. where.append("t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  681. where.append("or t1.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  682. where.append("or t1.model like'%").append(whereObject.getString("condition")).append("%' ");
  683. where.append("or t1.spec like'%").append(whereObject.getString("condition")).append("%' ");
  684. where.append("or t1.standards like'%").append(whereObject.getString("condition")).append("%' ");
  685. where.append("or t1.color like'%").append(whereObject.getString("condition")).append("%' ");
  686. where.append(")");
  687. }
  688. if (whereObject.containsKey("isonsale") && !"".equals(whereObject.getString("isonsale"))) {
  689. where.append(" and(");
  690. where.append("t1.isonsale ='").append(whereObject.getString("isonsale")).append("' ");
  691. where.append(")");
  692. }
  693. if (whereObject.containsKey("isused") && !"".equals(whereObject.getString("isused"))) {
  694. where.append(" and(");
  695. where.append("t1.isused ='").append(whereObject.getString("isused")).append("' ");
  696. where.append(")");
  697. }
  698. if (whereObject.containsKey("skucontrol") && !"".equals(whereObject.getString("skucontrol"))) {
  699. where.append(" and(");
  700. where.append("t1.skucontrol ='").append(whereObject.getString("skucontrol")).append("' ");
  701. where.append(")");
  702. }
  703. if (whereObject.containsKey("ismodule") && !"".equals(whereObject.getString("ismodule"))) {
  704. where.append(" and(");
  705. where.append("t1.ismodule ='").append(whereObject.getString("ismodule")).append("' ");
  706. where.append(")");
  707. }
  708. if (whereObject.containsKey("topclassnum") && !"".equals(whereObject.getString("topclassnum"))) {
  709. where.append(" and(");
  710. where.append("t1.topclassnum ='").append(whereObject.getString("topclassnum")).append("' ");
  711. where.append(")");
  712. }
  713. if (whereObject.containsKey("isservice") && !"".equals(whereObject.getString("isservice"))) {
  714. where.append(" and(");
  715. where.append("t1.isservice ='").append(whereObject.getString("isservice")).append("' ");
  716. where.append(")");
  717. }
  718. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  719. where.append(" and(");
  720. where.append("t1.status ='").append(whereObject.getString("status")).append("' ");
  721. where.append(")");
  722. }
  723. if (whereObject.containsKey("isonsalebutnotingroup") && !"".equals(whereObject.getString("isonsalebutnotingroup"))) {
  724. if (whereObject.getBooleanValue("isonsalebutnotingroup")) {
  725. where.append(" and(");
  726. 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 )");
  727. where.append(")");
  728. }
  729. }
  730. if (whereObject.containsKey("hasprice") && !"".equals(whereObject.getString("hasprice"))) {
  731. if (whereObject.getBooleanValue("hasprice")) {
  732. where.append(" and(");
  733. where.append(" exists(select * from sa_itemprice where sa_itemprice.siteid=t1.siteid and sa_itemprice.itemid=t1.itemid and price>0)");
  734. where.append(")");
  735. }
  736. }
  737. if (whereObject.containsKey("itemclassid") && !"".equals(whereObject.getString("itemclassid"))) {
  738. ArrayList<Long> list = ItemClass.getSubItemClassIds(this, whereObject.getLong("itemclassid"));
  739. list.add(whereObject.getLong("itemclassid"));
  740. String sql = " and t1.itemid in ( SELECT itemid from sa_itemsaleclass WHERE itemclassid IN " + list + " and siteid='" + siteid + "')";
  741. sql = sql.replace("[", "(").replace("]", ")");
  742. where.append(sql);
  743. }
  744. if (whereObject.containsKey("tradefield") && !whereObject.getString("tradefield").isEmpty()) {
  745. where.append(" and exists(");
  746. 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("' ");
  747. where.append(")");
  748. }
  749. if (whereObject.containsKey("itemclass") && !whereObject.getString("itemclass").isEmpty()) {
  750. String itemclass = whereObject.getString("itemclass");
  751. where.append(" and t1.itemid in (");
  752. where.append(" SELECT t1.itemid FROM sa_itemsaleclass t1 INNER JOIN plm_itemclass t2 ON t2.itemclassid=t1.itemclassid AND t2.siteid=t1.siteid WHERE t2.itemclassname LIKE '%" + itemclass + "%' ");
  753. where.append(")");
  754. }
  755. if (content.containsKey("sys_enterpriseid")) {
  756. if(content.getLong("sys_enterpriseid")>0){
  757. where.append(" and t1.itemid not in (SELECT ifnull(itemid,0) from sys_enterprise_saleclass WHERE sys_enterpriseid = " +
  758. content.getLong("sys_enterpriseid") + " and siteid='" + siteid + "' )");
  759. }
  760. }
  761. }
  762. QuerySQL querySQL = queryList(where.toString());
  763. querySQL.setPage(pageSize, pageNumber);
  764. Rows rows = querySQL.query();
  765. // 默认商品图片
  766. Rows defaultImageRows = beans.Item.Item.getItemdefaultImage(this);
  767. // 附件
  768. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  769. RowsMap attRowsMapCover = getAttachmentUrl("plm_item", ids, "cover");
  770. RowsMap attRowsMap = getAttachmentUrl("plm_item", ids);
  771. // 商品领域
  772. RowsMap tradefieldRowsMap = beans.Item.Item.getTradefieldRowsMap(this, ids);
  773. // 商品品牌
  774. RowsMap brandRowsMap = Brand.getBrandRowsMap(this, ids);
  775. // 营销类别
  776. RowsMap itemSaleClassRowsMap = ItemClass.getAllItemClassRowsMap_new(this, ids).get("营销").toRowsMap("itemid");
  777. // 存货类别
  778. RowsMap itemclassRowsMap = ItemClass.getAllItemClassRowsMap_new(this, ids).get("存货").toRowsMap("itemid");
  779. // RowsMap itemclassRowsMap = ItemClass.getAllItemClassRowsMap(this, ids);
  780. for (Row row : rows) {
  781. if (attRowsMapCover.getOrDefault(row.getString("itemid"), new Rows()).isNotEmpty()) {
  782. row.put("attinfos", attRowsMapCover.getOrDefault(row.getString("itemid"), new Rows()));
  783. } else if (attRowsMap.getOrDefault(row.getString("itemid"), new Rows()).isNotEmpty()) {
  784. row.put("attinfos", attRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  785. } else {
  786. row.put("attinfos", defaultImageRows);
  787. }
  788. String[] tradefield = tradefieldRowsMap.getOrDefault(row.getString("itemid"), new Rows()).toArray("tradefield");
  789. row.put("tradefield", StringUtils.join(tradefield, ","));
  790. row.put("brand", brandRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  791. String[] itemclass = itemclassRowsMap.getOrDefault(row.getString("itemid"), new Rows()).toArray("itemclassname");
  792. row.put("itemclass", StringUtils.join(itemclass, ","));
  793. String[] itemclassnum = itemclassRowsMap.getOrDefault(row.getString("itemid"), new Rows()).toArray("itemclassnum");
  794. row.put("itemclassnum", StringUtils.join(itemclassnum, ","));
  795. String[] itemsaleclass = itemSaleClassRowsMap.getOrDefault(row.getString("itemid"), new Rows()).toArray("itemclassname");
  796. row.put("itemsaleclass", StringUtils.join(itemsaleclass, ","));
  797. }
  798. return getSucReturnObject().setData(rows).toString();
  799. }
  800. //返回导出的标题
  801. public HashMap<String, String> getTitleMap() {
  802. HashMap<String, String> titleMap = new HashMap<>();
  803. titleMap.put("itemno", "产品编号");
  804. titleMap.put("itemname", "产品名称");
  805. titleMap.put("isonsale", "上/下架");
  806. titleMap.put("tradefield", "领域");
  807. titleMap.put("packageqty", "包装数量");
  808. titleMap.put("itemclass", "营销类别");
  809. titleMap.put("unitname", "单位");
  810. titleMap.put("orderminqty", "起订量");
  811. titleMap.put("orderaddqty", "增量");
  812. titleMap.put("model", "型号");
  813. titleMap.put("spec", "规格");
  814. titleMap.put("color", "颜色");
  815. return titleMap;
  816. }
  817. public QuerySQL queryList(String where) throws YosException {
  818. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "plm_item","*");
  819. querySQL.setTableAlias("t1");
  820. querySQL.addJoinTable(JOINTYPE.left, "plm_unit", "t2", "t2.unitid = t1.unitid AND t2.siteid = t1.siteid",
  821. "unitname");
  822. querySQL.addJoinTable(JOINTYPE.left, "plm_unitgroup", "t6", "t6.unitgroupid = t1.unitgroupid",
  823. "auxunitid", "unitgroupname");
  824. querySQL.addJoinTable(JOINTYPE.left, "plm_unit", "t7", "t7.unitid = t6.unitid AND t7.siteid = t6.siteid");
  825. querySQL.addQueryFields("axunitname", "t7.unitname");
  826. querySQL.addJoinTable(JOINTYPE.left, "sa_itemprice", "t9", "t9.itemid = t1.itemid AND t9.siteid = t1.siteid and t9.pricegrade=1");
  827. querySQL.addQueryFields("price1", "t9.price ");
  828. querySQL.addJoinTable(JOINTYPE.left, "sa_itemprice", "t10", "t10.itemid = t1.itemid AND t10.siteid = t1.siteid and t10.pricegrade=2");
  829. querySQL.addQueryFields("price2", "t10.price ");
  830. querySQL.addJoinTable(JOINTYPE.left, "sa_itemprice", "t11", "t11.itemid = t1.itemid AND t11.siteid = t1.siteid and t11.pricegrade=3");
  831. querySQL.addQueryFields("price3", "t11.price ");
  832. querySQL.addJoinTable(JOINTYPE.left, "sa_itemprice", "t12", "t12.itemid = t1.itemid AND t12.siteid = t1.siteid and t12.pricegrade=4");
  833. querySQL.addQueryFields("price4", "t12.price ");
  834. querySQL.addJoinTable(JOINTYPE.left, "sa_itemprice", "t13", "t13.itemid = t1.itemid AND t13.siteid = t1.siteid and t13.pricegrade=5");
  835. querySQL.addQueryFields("price5", "t13.price ");
  836. // querySQL.addJoinTable(JOINTYPE.left, "plm_itemclass", "t14", "t14.itemclassid = t1.marketingcategory AND t14.siteid = t1.siteid",
  837. // "itemclassname");
  838. querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t16", "t16.departmentid = t1.departmentid AND t16.siteid = t1.siteid",
  839. "depno","depname");
  840. querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t17", "t17.stockno = t1.stockno AND t17.siteid = t1.siteid",
  841. "stockname");
  842. querySQL.addJoinTable(JOINTYPE.left, "sa_supplier", "t18", "t18.sa_supplierid = t1.sa_supplierid AND t18.siteid = t1.siteid",
  843. "suppno","suppname","suppshortname");
  844. querySQL.setWhere("t1.siteid", siteid);
  845. querySQL.setWhere(where);
  846. return querySQL;
  847. }
  848. @API(title = "货品档案删除", apiversion = R.ID20220923152202.v1.class)
  849. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.v1.class})
  850. public String delete() throws YosException {
  851. JSONArray jsonArray = content.getJSONArray("itemids");
  852. String sql = " SELECT 1 from plm_item WHERE itemid in " + jsonArray + " and `status` ='审核' and siteid ='"
  853. + siteid + "'";
  854. sql = sql.replace("[", "(").replace("]", ")");
  855. if (dbConnect.runSqlQuery(sql).isNotEmpty()) {
  856. return getErrReturnObject().setErrMsg("存在已审核的数据,无法删除。").toString();
  857. }
  858. String sql1 = "select t2.groupnum from sa_itemgroupmx t1 inner join sa_itemgroup t2 on t1.sa_itemgroupid=t2.sa_itemgroupid and t1.siteid=t2.siteid where t1.itemid in " + jsonArray + " and t1.siteid ='"
  859. + siteid + "'";
  860. sql1 = sql1.replace("[", "(").replace("]", ")");
  861. Rows rows =dbConnect.runSqlQuery(sql1);
  862. if (rows.isNotEmpty()) {
  863. return getErrReturnObject().setErrMsg("该商品已存在商品组,商品组编码:"+rows.get(0).getString("groupnum")+",请前往商品组删除该商品后重试!").toString();
  864. }
  865. String sql2 = "select t2.sonum from sa_orderitems t1 inner join sa_order t2 on t1.sa_orderid=t2.sa_orderid and t1.siteid=t2.siteid where t1.itemid in " + jsonArray + " and t1.siteid ='"
  866. + siteid + "'";
  867. sql2 = sql2.replace("[", "(").replace("]", ")");
  868. Rows rows2 =dbConnect.runSqlQuery(sql2);
  869. if (rows2.isNotEmpty()) {
  870. return getErrReturnObject().setErrMsg("该商品已存在于订单,单号:"+rows2.get(0).getString("sonum")+",无法删除!").toString();
  871. }
  872. String sql3 = "select t2.billno from sa_aftersalesmag_items t1 inner join sa_aftersalesmag t2 on t1.sa_aftersalesmagid=t2.sa_aftersalesmagid and t1.siteid=t2.siteid where t1.itemid in " + jsonArray + " and t1.siteid ='"
  873. + siteid + "'";
  874. sql3 = sql3.replace("[", "(").replace("]", ")");
  875. Rows rows3 =dbConnect.runSqlQuery(sql3);
  876. if (rows3.isNotEmpty()) {
  877. return getErrReturnObject().setErrMsg("该商品已存在于退货单,单号:"+rows3.get(0).getString("billno")+",无法删除!").toString();
  878. }
  879. SQLFactory sqlFactory = new SQLFactory(this, "货品档案删除");
  880. sqlFactory.addParameter_in("itemid", jsonArray.toArray());
  881. sqlFactory.addParameter("siteid", siteid);
  882. dbConnect.runSqlUpdate(sqlFactory);
  883. return getSucReturnObject().toString();
  884. }
  885. @API(title = "货品档案审核", apiversion = R.ID20220923153902.v1.class)
  886. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.v1.class})
  887. public String audit() throws YosException {
  888. JSONArray jsonArray = content.getJSONArray("itemids");
  889. String status = content.getString("status");
  890. Rows itemRows = new Rows();
  891. Rows itemclassRows = new Rows();
  892. if (!jsonArray.isEmpty()) {
  893. 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.siteid='" + siteid + "' and t1.itemid in" + jsonArray.toJSONString().replace("[", "(").replace("]", ")"));
  894. itemclassRows = dbConnect.runSqlQuery("select itemid,itemclassid from sa_itemsaleclass where siteid='" + siteid + "' and itemid in" + jsonArray.toJSONString().replace("[", "(").replace("]", ")"));
  895. } else {
  896. return getErrReturnObject().setErrMsg("未选择商品,无法审核").toString();
  897. }
  898. RowsMap itemRowsMap = itemRows.toRowsMap("itemid");
  899. RowsMap itemclassRowsMap = itemclassRows.toRowsMap("itemid");
  900. ArrayList<String> sqlList = new ArrayList<>();
  901. for (Object obj : jsonArray) {
  902. int id = (int) obj;
  903. //审核
  904. if (status.equals("1")) {
  905. if (dbConnect.runSqlQuery("SELECT 1 from sa_itemsaleclass WHERE itemid=" + id + " and siteid='" + siteid + "'").isEmpty()) {
  906. return getErrReturnObject().setErrMsg("审核失败,请先维护营销分类").toString();
  907. }
  908. }
  909. if (status.equals("1")) {
  910. Rows tradefields = dbConnect.runSqlQuery("SELECT * from plm_item_tradefield WHERE itemid=" + id + " and siteid='" + siteid + "'");
  911. if (tradefields.isEmpty()) {
  912. //return getErrReturnObject().setErrMsg("领域栏位未维护,请维护完整后再试!").toString();
  913. }
  914. Row item = dbConnect.runSqlQuery(0, "SELECT * from plm_item WHERE itemid=" + id + " and siteid='" + siteid + "'");
  915. Long sa_customschemeid = item.getLong("sa_customschemeid");
  916. RowsMap customschemeItemsRowsMap = dbConnect.runSqlQuery("SELECT * from sa_customscheme_items WHERE sa_customschemeid=" + sa_customschemeid + " and siteid='" + siteid + "'").toRowsMap("value");
  917. if (customschemeItemsRowsMap.containsKey("spec")) {
  918. String description = customschemeItemsRowsMap.get("spec").get(0).getString("description");
  919. String spec = item.getString("spec");
  920. if (StringUtils.isBlank(spec)) {
  921. return getErrReturnObject().setErrMsg(description + "栏位未维护,请维护完整后再试!").toString();
  922. }
  923. if (spec.equals("custom") && item.getBoolean("iscustomsize")) {
  924. if (item.getLong("lengthschemeid") == 0) {
  925. return getErrReturnObject().setErrMsg("长栏位未维护,请维护完整后再试!").toString();
  926. }
  927. if (item.getLong("widthschemeid") == 0) {
  928. return getErrReturnObject().setErrMsg("宽栏位未维护,请维护完整后再试!").toString();
  929. }
  930. }
  931. }
  932. if (customschemeItemsRowsMap.containsKey("material")) {
  933. String description = customschemeItemsRowsMap.get("material").get(0).getString("description");
  934. Rows itemextends = dbConnect.runSqlQuery("SELECT * from plm_itemextend WHERE itemid=" + id + " and siteid='" + siteid + "'");
  935. String material = itemextends.get(0).getString("material");
  936. if (itemextends.isEmpty()) {
  937. return getErrReturnObject().setErrMsg(description + "栏位未维护,请维护完整后再试!").toString();
  938. }
  939. if (itemextends.isNotEmpty() && StringUtils.isBlank(material)) {
  940. return getErrReturnObject().setErrMsg(description + "栏位未维护,请维护完整后再试!").toString();
  941. }
  942. if (material.equals("custom") && item.getBoolean("iscustomsize")) {
  943. if (item.getLong("materialschemeid") == 0) {
  944. return getErrReturnObject().setErrMsg(description + "栏位未维护,请维护完整后再试!").toString();
  945. }
  946. }
  947. }
  948. if (customschemeItemsRowsMap.containsKey("cheek")) {
  949. String description = customschemeItemsRowsMap.get("cheek").get(0).getString("description");
  950. String cheek = item.getString("cheek");
  951. if (StringUtils.isBlank(cheek)) {
  952. return getErrReturnObject().setErrMsg(description + "栏位未维护,请维护完整后再试!").toString();
  953. }
  954. if (cheek.equals("custom") && item.getBoolean("iscustomsize")) {
  955. if (item.getLong("cheekschemeid") == 0) {
  956. return getErrReturnObject().setErrMsg(description + "栏位未维护,请维护完整后再试!").toString();
  957. }
  958. }
  959. }
  960. if (customschemeItemsRowsMap.containsKey("color")) {
  961. String description = customschemeItemsRowsMap.get("color").get(0).getString("description");
  962. String color = item.getString("color");
  963. if (StringUtils.isBlank(color)) {
  964. return getErrReturnObject().setErrMsg(description + "栏位未维护,请维护完整后再试!").toString();
  965. }
  966. if (color.equals("custom") && item.getBoolean("iscustomsize")) {
  967. if (item.getLong("colorschemeid") == 0) {
  968. return getErrReturnObject().setErrMsg(description + "栏位未维护,请维护完整后再试!").toString();
  969. }
  970. }
  971. }
  972. }
  973. SQLFactory sqlFactory = new SQLFactory(this, "货品档案审核");
  974. sqlFactory.addParameter("itemid", id);
  975. sqlFactory.addParameter("siteid", siteid);
  976. sqlFactory.addParameter("username", username);
  977. sqlFactory.addParameter("status", status.equals("0") ? "新建" : "审核");
  978. if (itemRowsMap.containsKey(String.valueOf(id)) && status.equals("1")) {
  979. if (!itemRowsMap.get(String.valueOf(id)).isEmpty()) {
  980. if (itemRowsMap.get(String.valueOf(id)).get(0).getLong("sa_customschemeid") > 0) {
  981. 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=" + itemRowsMap.get(String.valueOf(id)).get(0).getLong("sa_customschemeid") + " and t1.siteid ='" + siteid + "'");
  982. String where = " and 1=1 and t1.itemid != " + id + " and sa_customschemeid=" + itemRowsMap.get(String.valueOf(id)).get(0).getLong("sa_customschemeid");
  983. if (!customschemeRows.isEmpty()) {
  984. for (Row row : customschemeRows) {
  985. if (StringUtils.isBlank(itemRowsMap.get(String.valueOf(id)).get(0).getString(row.getString("value")))) {
  986. return getErrReturnObject().setErrMsg("该商品【" + itemRowsMap.get(String.valueOf(id)).get(0).getString("itemname") + "】定制方案" + row.getString("schemename") + "下" + row.getString("description") + "不可为空").toString();
  987. } else {
  988. where = where + " and " + row.getString("value") + "='" + itemRowsMap.get(String.valueOf(id)).get(0).getString(row.getString("value")) + "'";
  989. }
  990. }
  991. //System.out.println("select * from plm_item where siteid='" + siteid + "'" + where);
  992. 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);
  993. if (items.isNotEmpty()) {
  994. return getErrReturnObject().setErrMsg("该商品与定制方案下的" + items.get(0).getString("itemno") + "商品重复,请修改").toString();
  995. }
  996. }
  997. }
  998. }
  999. }
  1000. // if (itemclassRowsMap.containsKey(String.valueOf(id))) {
  1001. // if (itemclassRowsMap.get(String.valueOf(id)).isNotEmpty()) {
  1002. // SQLFactory sqlFactory1 = new SQLFactory(this, "获取最上级营销类别名称");
  1003. // sqlFactory1.addParameter_in("itemclassid", itemclassRowsMap.get(String.valueOf(id)).get(0).getLong("itemclassid"));
  1004. // sqlFactory1.addParameter("siteid", siteid);
  1005. // Rows rows = dbConnect.runSqlQuery(sqlFactory1.getSQL());
  1006. // if (rows.isNotEmpty()) {
  1007. // sqlList.add("update plm_item set marketingcategory='" + rows.get(0).getString("itemclassid") + "' where siteid='" + siteid + "' and itemid=" + id);
  1008. // }
  1009. // }
  1010. // }
  1011. if (status.equals("0")) {
  1012. if (itemRowsMap.containsKey(String.valueOf(id))) {
  1013. if (!itemRowsMap.get(String.valueOf(id)).isEmpty()) {
  1014. if (itemRowsMap.get(String.valueOf(id)).get(0).getBoolean("isonsale") || itemRowsMap.get(String.valueOf(id)).get(0).getBoolean("isused") ) {
  1015. return getErrReturnObject().setErrMsg("上架或启用状态无法反审核").toString();
  1016. }
  1017. }
  1018. }
  1019. sqlList.add(DataContrlLog.createLog(this, "plm_item", id, "反审核", "反审核成功").getSQL());
  1020. } else {
  1021. sqlList.add(DataContrlLog.createLog(this, "plm_item", id, "审核", "审核成功").getSQL());
  1022. }
  1023. sqlList.add(sqlFactory.getSQL());
  1024. }
  1025. dbConnect.runSqlUpdate(sqlList);
  1026. return getSucReturnObject().toString();
  1027. }
  1028. @API(title = "货品档案启用", apiversion = R.ID2025070114584703.v1.class)
  1029. @CACHEING_CLEAN(apiClass = {Item.class,itemgroup.class, restcontroller.sale.itemgroup.itemgroup.class})
  1030. public String used() throws YosException {
  1031. JSONArray jsonArray = content.getJSONArray("itemids");
  1032. String isused = content.getString("isused");
  1033. if (jsonArray.size() == 0) {
  1034. return getErrReturnObject().setErrMsg("未选择商品").toString();
  1035. }
  1036. if (isused.equals("1")) {
  1037. SQLFactory isHas = new SQLFactory(this, "查询是否存在新建货品");
  1038. isHas.addParameter_in("itemid", jsonArray.toArray());
  1039. isHas.addParameter("siteid", siteid);
  1040. Rows hasRows = dbConnect.runSqlQuery(isHas.getSQL());
  1041. SQLFactory isHasOnSale = new SQLFactory(this, "查询是否存在启用货品");
  1042. isHasOnSale.addParameter_in("itemid", jsonArray.toArray());
  1043. isHasOnSale.addParameter_in("isused", 1);
  1044. isHasOnSale.addParameter("siteid", siteid);
  1045. Rows hasOnSaleRows = dbConnect.runSqlQuery(isHasOnSale.getSQL());
  1046. if (hasRows.isNotEmpty()) {
  1047. return getErrReturnObject().setErrMsg("存在未审核的货品,无法启用!").toString();
  1048. }
  1049. if (hasOnSaleRows.isNotEmpty()) {
  1050. return getErrReturnObject().setErrMsg("存在已启用的货品,无法启用!").toString();
  1051. }
  1052. //System.out.println("select * from sa_itemsaleclass where siteid='" + siteid + "' and itemid in " + jsonArray.toArray());
  1053. String sql = "select * from sa_itemsaleclass where siteid='" + siteid + "' and itemid in " + jsonArray.toJSONString();
  1054. sql = sql.replace("[", "(").replace("]", ")");
  1055. Rows itemsaleclassRows = dbConnect.runSqlQuery(sql);
  1056. if (itemsaleclassRows.isEmpty()) {
  1057. return getErrReturnObject().setErrMsg("商品未维护营销类别,无法启用!").toString();
  1058. }
  1059. SQLFactory isHasPrice = new SQLFactory(this, "查询是否存在未维护价格的商品");
  1060. isHasPrice.addParameter_in("itemid", jsonArray.toArray());
  1061. isHasPrice.addParameter("siteid", siteid);
  1062. Rows hasPriceRows = dbConnect.runSqlQuery(isHasPrice.getSQL());
  1063. if (hasPriceRows.isNotEmpty()) {
  1064. return getErrReturnObject().setErrMsg("存在未维护价格的货品,无法启用!").toString();
  1065. }
  1066. }
  1067. ArrayList<String> sqlList = new ArrayList<>();
  1068. for (Object obj : jsonArray) {
  1069. Long id = Long.valueOf(obj.toString());
  1070. SQLFactory sqlFactory = new SQLFactory(this, "货品档案启用");
  1071. sqlFactory.addParameter("itemid", id);
  1072. sqlFactory.addParameter("siteid", siteid);
  1073. sqlFactory.addParameter("isused", isused);
  1074. sqlList.add(sqlFactory.getSQL());
  1075. if (isused.equals("1")) {
  1076. sqlList.add(DataContrlLog.createLog(this, "plm_item", id, "启用", "启用成功").getSQL());
  1077. } else {
  1078. sqlList.add(DataContrlLog.createLog(this, "plm_item", id, "停用", "停用成功").getSQL());
  1079. }
  1080. }
  1081. dbConnect.runSqlUpdate(sqlList);
  1082. return getSucReturnObject().toString();
  1083. }
  1084. @API(title = "货品档案上架", apiversion = R.ID20220923154802.v1.class)
  1085. @CACHEING_CLEAN(apiClass = {Item.class,itemgroup.class, restcontroller.sale.itemgroup.itemgroup.class})
  1086. public String onsale() throws YosException {
  1087. JSONArray jsonArray = content.getJSONArray("itemids");
  1088. String isonsale = content.getString("isonsale");
  1089. if (jsonArray.size() == 0) {
  1090. return getErrReturnObject().setErrMsg("未选择商品").toString();
  1091. }
  1092. if (isonsale.equals("1")) {
  1093. SQLFactory isHas = new SQLFactory(this, "查询是否存在新建货品");
  1094. isHas.addParameter_in("itemid", jsonArray.toArray());
  1095. isHas.addParameter("siteid", siteid);
  1096. Rows hasRows = dbConnect.runSqlQuery(isHas.getSQL());
  1097. SQLFactory isHasIsused = new SQLFactory(this, "查询是否存在启用货品");
  1098. isHasIsused.addParameter_in("itemid", jsonArray.toArray());
  1099. isHasIsused.addParameter_in("isused", 0);
  1100. isHasIsused.addParameter("siteid", siteid);
  1101. Rows hasIsusedRows = dbConnect.runSqlQuery(isHasIsused.getSQL());
  1102. SQLFactory isHasOnSale = new SQLFactory(this, "查询是否存在上架货品");
  1103. isHasOnSale.addParameter_in("itemid", jsonArray.toArray());
  1104. isHasOnSale.addParameter("siteid", siteid);
  1105. Rows hasOnSaleRows = dbConnect.runSqlQuery(isHasOnSale.getSQL());
  1106. if (hasRows.isNotEmpty()) {
  1107. return getErrReturnObject().setErrMsg("存在未审核的货品,无法上架!").toString();
  1108. }
  1109. if (hasIsusedRows.isNotEmpty()) {
  1110. return getErrReturnObject().setErrMsg("存在未启用的货品,无法上架!").toString();
  1111. }
  1112. if (hasOnSaleRows.isNotEmpty()) {
  1113. return getErrReturnObject().setErrMsg("存在已上架的货品,无法上架!").toString();
  1114. }
  1115. //System.out.println("select * from sa_itemsaleclass where siteid='" + siteid + "' and itemid in " + jsonArray.toArray());
  1116. String sql = "select * from sa_itemsaleclass where siteid='" + siteid + "' and itemid in " + jsonArray.toJSONString();
  1117. sql = sql.replace("[", "(").replace("]", ")");
  1118. Rows itemsaleclassRows = dbConnect.runSqlQuery(sql);
  1119. if (itemsaleclassRows.isEmpty()) {
  1120. return getErrReturnObject().setErrMsg("商品未维护营销类别,无法上架!").toString();
  1121. }
  1122. SQLFactory isHasPrice = new SQLFactory(this, "查询是否存在未维护价格的商品");
  1123. isHasPrice.addParameter_in("itemid", jsonArray.toArray());
  1124. isHasPrice.addParameter("siteid", siteid);
  1125. Rows hasPriceRows = dbConnect.runSqlQuery(isHasPrice.getSQL());
  1126. if (hasPriceRows.isNotEmpty()) {
  1127. return getErrReturnObject().setErrMsg("存在未维护价格的货品,无法上架!").toString();
  1128. }
  1129. }
  1130. Rows brandRows = dbConnect.runSqlQuery("select sa_brandid from sa_brand where siteid='" + siteid + "'");
  1131. long sa_brandid = 0;
  1132. if (!brandRows.isEmpty()) {
  1133. sa_brandid = brandRows.get(0).getLong("sa_brandid");
  1134. }
  1135. Rows itemRows = dbConnect.runSqlQuery("select itemid,itemno,itemname,sa_customschemeid,isonsale from plm_item where siteid='" + siteid + "'");
  1136. RowsMap itemRowsMap = itemRows.toRowsMap("itemid");
  1137. Rows tradefieldRows = dbConnect.runSqlQuery("select itemid,tradefield from plm_item_tradefield where siteid='" + siteid + "'");
  1138. RowsMap tradefieldRowsMap = tradefieldRows.toRowsMap("itemid");
  1139. ArrayList<String> sqlList = new ArrayList<>();
  1140. for (Object obj : jsonArray) {
  1141. Long id = Long.valueOf(obj.toString());
  1142. SQLFactory sqlFactory = new SQLFactory(this, "货品档案上架");
  1143. sqlFactory.addParameter("itemid", id);
  1144. sqlFactory.addParameter("siteid", siteid);
  1145. sqlFactory.addParameter("username", username);
  1146. sqlFactory.addParameter("isonsale", isonsale);
  1147. sqlList.add(sqlFactory.getSQL());
  1148. if (isonsale.equals("1")) {
  1149. sqlList.add(DataContrlLog.createLog(this, "plm_item", id, "上架", "上架成功").getSQL());
  1150. } else {
  1151. sqlList.add(DataContrlLog.createLog(this, "plm_item", id, "下架", "下架成功").getSQL());
  1152. }
  1153. //审核商品时,自动添加至商品组中
  1154. if (itemRowsMap.containsKey(String.valueOf(obj))) {
  1155. if (!itemRowsMap.get(String.valueOf(obj)).isEmpty()) {
  1156. if (itemRowsMap.get(String.valueOf(obj)).get(0).getLong("sa_customschemeid") != 0) {
  1157. if (isonsale.equals("1")) {
  1158. 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 + ")");
  1159. if (rowsCount.get(0).getLong("count") > 1) {
  1160. //return getErrReturnObject().setErrMsg("该商品存在与商品组"+rowsCount.get(0).getString("groupnum")+",请在商品组删除该商品后进行审核").toString();
  1161. }
  1162. }
  1163. } else {
  1164. if (isonsale.equals("0")) {
  1165. sqlList.add("delete from sa_itemgroup where sa_itemgroupid in(select sa_itemgroupid from sa_itemgroupmx where itemid=" + id + " and siteid='" + siteid + "')");
  1166. sqlList.add("delete from sa_itemgroupmx where itemid=" + id + " and siteid='" + siteid + "'");
  1167. } else {
  1168. sqlList.add("delete from sa_itemgroup where sa_itemgroupid in(select sa_itemgroupid from sa_itemgroupmx where itemid=" + id + " and siteid='" + siteid + "')");
  1169. sqlList.add("delete from sa_itemgroupmx where itemid=" + id + " and siteid='" + siteid + "'");
  1170. 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));
  1171. }
  1172. }
  1173. } else {
  1174. return getErrReturnObject().setErrMsg("商品不存在").toString();
  1175. }
  1176. }
  1177. }
  1178. dbConnect.runSqlUpdate(sqlList);
  1179. return getSucReturnObject().toString();
  1180. }
  1181. @API(title = "查询商品组", apiversion = R.ID20221216102302.v1.class)
  1182. public String selectItemGroup() throws YosException {
  1183. Long itemid = content.getLong("itemid");
  1184. StringBuffer where = new StringBuffer(" 1=1 ");
  1185. if (content.containsKey("where")) {
  1186. JSONObject whereObject = content.getJSONObject("where");
  1187. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  1188. where.append(" and(");
  1189. where.append("t1.groupname like'%").append(whereObject.getString("condition")).append("%' ");
  1190. where.append("or t3.brandname like'%").append(whereObject.getString("condition")).append("%' ");
  1191. where.append(")");
  1192. }
  1193. if (whereObject.containsKey("isonsale") && !"".equals(whereObject.getString("isonsale"))) {
  1194. where.append(" and(");
  1195. where.append("t1.isonsale ='").append(whereObject.getString("isonsale")).append("' ");
  1196. where.append(")");
  1197. }
  1198. }
  1199. // SQLFactory sqlFactory = new SQLFactory(this, "查询商品组", pageSize, pageNumber, pageSorting);
  1200. // sqlFactory.addParameter("siteid", siteid);
  1201. // sqlFactory.addParameter("itemid", itemid);
  1202. // sqlFactory.addParameter_SQL("where", where);
  1203. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  1204. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_itemgroup", "sa_itemgroupid", "isonsale",
  1205. "groupname","sa_brandid");
  1206. querySQL.setTableAlias("t1");
  1207. querySQL.addJoinTable(JOINTYPE.inner, "sa_itemgroupmx", "t2", "t1.sa_itemgroupid = t2.sa_itemgroupid and t1.siteid = t2.siteid");
  1208. querySQL.addJoinTable(JOINTYPE.left, "sa_brand", "t3", "t3.sa_brandid = t1.sa_brandid and t3.siteid = t1.siteid","brandname");
  1209. querySQL.setDistinct(true);
  1210. querySQL.setSiteid(siteid);
  1211. querySQL.setWhere("t1.itemid",itemid);
  1212. querySQL.setWhere(where.toString());
  1213. querySQL.setPage(pageSize, pageNumber);
  1214. Rows rows = querySQL.query();
  1215. return getSucReturnObject().setData(rows).toString();
  1216. }
  1217. @API(title = "更新标签", apiversion = R.ID2024062609342103.v1.class)
  1218. @CACHEING_CLEAN(apiClass = {Item.class, restcontroller.sale.item.Item.class})
  1219. public String updateDelistingstatus() throws YosException {
  1220. long itemid = content.getLong("itemid");
  1221. String delistingstatus = content.getStringValue("delistingstatus");// 退市状态
  1222. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "plm_item");
  1223. updateSQL.setValue("delistingstatus", delistingstatus);
  1224. updateSQL.setSiteid(siteid);
  1225. updateSQL.setUniqueid(itemid);
  1226. updateSQL.update();
  1227. return getSucReturnObject().toString();
  1228. }
  1229. @API(title = "查询商品资料", apiversion = R.ID20221216105402.v1.class)
  1230. public String selectTechnicalinfo() throws YosException {
  1231. Long itemid = content.getLong("itemid");
  1232. StringBuffer where = new StringBuffer(" 1=1 ");
  1233. if (content.containsKey("where")) {
  1234. JSONObject whereObject = content.getJSONObject("where");
  1235. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  1236. where.append(" and(");
  1237. where.append("t1.type like'%").append(whereObject.getString("condition")).append("%' ");
  1238. where.append("or t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  1239. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  1240. where.append(")");
  1241. }
  1242. }
  1243. // SQLFactory sqlFactory = new SQLFactory(this, "查询产品资料", pageSize, pageNumber, pageSorting);
  1244. // sqlFactory.addParameter("siteid", siteid);
  1245. // sqlFactory.addParameter("itemid", itemid);
  1246. // sqlFactory.addParameter_SQL("where", where);
  1247. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  1248. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "plm_technicalinfo", "plm_technicalinfoid", "billno",
  1249. "type","remarks");
  1250. querySQL.setTableAlias("t1");
  1251. querySQL.addJoinTable(JOINTYPE.inner, "plm_technicalinfo_item", "t2", "t1.plm_technicalinfoid = t2.plm_technicalinfoid and t1.siteid = t2.siteid");
  1252. querySQL.setSiteid(siteid);
  1253. querySQL.setWhere("t2.itemid",itemid);
  1254. querySQL.setWhere(where.toString());
  1255. querySQL.setPage(pageSize, pageNumber);
  1256. Rows rows = querySQL.query();
  1257. ArrayList<Long> ids = rows.toArrayList("plm_technicalinfoid", new ArrayList<>());
  1258. // 默认商品图片
  1259. Rows defaultImageRows = beans.Item.Item.getItemdefaultImage(this);
  1260. // 封面cover
  1261. RowsMap coverRowsMap = getAttachmentUrl("plm_technicalinfo", ids, "cover");
  1262. // 附件
  1263. RowsMap attRowsMap = getAttachmentUrl("plm_technicalinfo", ids);
  1264. for (Row row : rows) {
  1265. Rows coverRows = coverRowsMap.get(row.getString("plm_technicalinfoid"));
  1266. if (coverRows.isEmpty()) {
  1267. if (!defaultImageRows.isEmpty()) {
  1268. row.put("cover", defaultImageRows.get(0).getString("url"));
  1269. } else {
  1270. row.put("cover", "");
  1271. }
  1272. } else {
  1273. row.put("cover", coverRows.get(0).getString("url"));
  1274. }
  1275. row.put("attinfos", attRowsMap.getOrDefault(row.getString("plm_technicalinfoid"), new Rows()));
  1276. }
  1277. return getSucReturnObject().setData(rows).toString();
  1278. }
  1279. @API(title = "查询商品价格", apiversion = R.ID20221216134102.v1.class)
  1280. public String selectItemPrice() throws YosException {
  1281. Long itemid = content.getLong("itemid");
  1282. StringBuffer where = new StringBuffer(" 1=1 ");
  1283. if (content.containsKey("where")) {
  1284. JSONObject whereObject = content.getJSONObject("where");
  1285. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  1286. where.append(" and(");
  1287. where.append("t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  1288. where.append("or t1.pricegrade like'%").append(whereObject.getString("condition")).append("%' ");
  1289. where.append(")");
  1290. }
  1291. }
  1292. // SQLFactory sqlFactory = new SQLFactory(this, "查询商品价格", pageSize, pageNumber, pageSorting);
  1293. // sqlFactory.addParameter("siteid", siteid);
  1294. // sqlFactory.addParameter("itemid", itemid);
  1295. // sqlFactory.addParameter_SQL("where", where);
  1296. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  1297. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_itemprice", "sa_itempriceid", "itemid",
  1298. "itemno","pricegrade","price");
  1299. querySQL.setTableAlias("t1");
  1300. querySQL.setSiteid(siteid);
  1301. querySQL.setWhere("t1.itemid",itemid);
  1302. querySQL.setWhere(where.toString());
  1303. querySQL.setPage(pageSize, pageNumber);
  1304. Rows rows = querySQL.query();
  1305. return getSucReturnObject().setData(rows).toString();
  1306. }
  1307. @API(title = "货品档案导入模板", apiversion = R.ID20230311102404.v1.class)
  1308. public String downloadExcel() throws YosException {
  1309. ExcelFactory excelFactory = new ExcelFactory("货品档案导入模板");
  1310. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
  1311. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  1312. CellStyle style = xssfFWorkbook.createCellStyle();
  1313. DataFormat format = xssfFWorkbook.createDataFormat();
  1314. style.setDataFormat(format.getFormat("@"));
  1315. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  1316. for (int i = 0; i <= 31; i++) {
  1317. sheet.setDefaultColumnStyle(i, style);
  1318. }
  1319. // 设置工作薄列宽
  1320. ExportExcel.setBatchDetailSheetColumn1(sheet);// 设置工作薄列宽
  1321. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  1322. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  1323. XSSFCellStyle titleCellStyle3 = ExportExcel.createTitleCellStyle3(xssfFWorkbook);
  1324. XSSFCellStyle titleCellStyle4 = ExportExcel.createBodyCellStyle4(xssfFWorkbook);
  1325. ExportExcel.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, titleCellStyle4, xssfFWorkbook);
  1326. Rows aa = saveToExcelAttachment(excelFactory);
  1327. String url = "";
  1328. if (!aa.isEmpty()) {
  1329. url = aa.get(0).getString("url");
  1330. }
  1331. return getSucReturnObject().setData(url).toString();
  1332. }
  1333. @API(title = "货品档案导入", apiversion = R.ID20230311111404.v1.class)
  1334. @CACHEING_CLEAN(apiversions = {R.ID20220923140602.class})
  1335. public String importItems() throws YosException {
  1336. ArrayList<String> sqlList = new ArrayList<>();
  1337. ExcelFactory e;
  1338. try {
  1339. // 华为云
  1340. e = getExcelAttachment(content.getLong("attachmentid"));
  1341. // 本地
  1342. //e = getPostExcelFactory();
  1343. ArrayList<String> keys = new ArrayList<>();
  1344. keys.add("itemno");
  1345. keys.add("itemname");
  1346. keys.add("spec");
  1347. keys.add("model");
  1348. keys.add("unitname");
  1349. keys.add("erpitemname");
  1350. keys.add("erpitemno");
  1351. keys.add("standards");
  1352. keys.add("orderminqty");
  1353. keys.add("orderaddqty");
  1354. keys.add("material");
  1355. keys.add("stockstatus1");
  1356. keys.add("stockstatus2");
  1357. keys.add("tradefield");
  1358. keys.add("delivery");
  1359. keys.add("prodline");
  1360. keys.add("device");
  1361. keys.add("specalnote");
  1362. keys.add("isservice");
  1363. keys.add("pressure");
  1364. keys.add("butterflyplatedrive");
  1365. keys.add("connection");
  1366. keys.add("valveplatematerial");
  1367. keys.add("bodymaterial");
  1368. keys.add("actuatortype");
  1369. keys.add("actuatorbrand");
  1370. keys.add("isbutterfly");
  1371. keys.add("brandname");
  1372. keys.add("itemclassnum");
  1373. Rows rows = e.getSheetRows(0, keys, 3);
  1374. boolean iserr = false;
  1375. Rows rowserr = new Rows();
  1376. Rows rowssuc = new Rows();
  1377. RowsMap itemnoRowsMap = dbConnect.runSqlQuery("select itemno from plm_item t1 where siteid='" + siteid + "'").toRowsMap("itemno");
  1378. RowsMap unitnameRowsMap = dbConnect.runSqlQuery("select unitid,unitname from plm_unit where siteid='" + siteid + "'").toRowsMap("unitname");
  1379. 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");
  1380. RowsMap imitemnoRowsMap = rows.toRowsMap("itemno");
  1381. 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 + "'");
  1382. RowsMap itemclassRowsMap = itemcalss.toRowsMap("brandname");
  1383. for (Row row : rows) {
  1384. String brandname = row.getString("brandname");
  1385. String itemclassnum = row.getString("itemclassnum");
  1386. String itemno = row.getString("itemno");
  1387. String unitname = row.getString("unitname");
  1388. try {
  1389. row.getBigDecimal("orderminqty");
  1390. row.getBigDecimal("orderaddqty");
  1391. row.getInteger("stockstatus1");
  1392. row.getInteger("stockstatus2");
  1393. row.getInteger("delivery");
  1394. } catch (Exception e1) {
  1395. iserr = true;
  1396. row.put("msg", "错误信息:销售起订量/销售增量/库存充足标准/库存缺货标准/销售交期填写格式错误");
  1397. rowserr.add(row);
  1398. continue;
  1399. }
  1400. if (StringUtils.isEmpty(itemno)
  1401. || StringUtils.isEmpty(row.getString("itemname"))
  1402. || StringUtils.isEmpty(unitname)
  1403. || StringUtils.isEmpty(row.getString("erpitemname"))
  1404. || StringUtils.isEmpty(row.getString("erpitemno"))) {
  1405. iserr = true;
  1406. row.put("msg", "错误信息:产品编号/产品名称/计量单位/品号/品号不能为空");
  1407. rowserr.add(row);
  1408. continue;
  1409. }
  1410. if ((StringUtils.isEmpty(brandname) && StringUtils.isNotEmpty(itemclassnum)) || (StringUtils.isNotEmpty(brandname) && StringUtils.isEmpty(itemclassnum))) {
  1411. iserr = true;
  1412. row.put("msg", "错误信息:不能单独填写品牌和营销类别");
  1413. rowserr.add(row);
  1414. continue;
  1415. }
  1416. if (imitemnoRowsMap.containsKey(itemno) && imitemnoRowsMap.get(itemno).size() > 1) {
  1417. iserr = true;
  1418. row.put("msg", "错误信息:本次导入商品中存在重复的商品编号");
  1419. rowserr.add(row);
  1420. continue;
  1421. }
  1422. if (itemnoRowsMap.containsKey(itemno)) {
  1423. iserr = true;
  1424. row.put("msg", "错误信息:商品编号已存在");
  1425. rowserr.add(row);
  1426. continue;
  1427. }
  1428. if (!unitnameRowsMap.containsKey(unitname)) {
  1429. iserr = true;
  1430. row.put("msg", "错误信息:计量单位不存在");
  1431. rowserr.add(row);
  1432. continue;
  1433. }
  1434. if (!tradefieldList.contains(row.getString("tradefield"))) {
  1435. iserr = true;
  1436. row.put("msg", "错误信息:领域不存在");
  1437. rowserr.add(row);
  1438. continue;
  1439. }
  1440. if (!itemclassRowsMap.containsKey(brandname) || !itemclassRowsMap.get(brandname).toArrayList("itemclassnum").contains(itemclassnum)) {
  1441. iserr = true;
  1442. row.put("msg", "错误信息:品牌不存在或该品牌下没有对应的营销类别");
  1443. rowserr.add(row);
  1444. }
  1445. row.put("unitid", unitnameRowsMap.get(unitname).get(0).getLong("unitid"));
  1446. for (Row row1 : itemclassRowsMap.get(brandname)) {
  1447. if (row1.getString("itemclassnum").equals(itemclassnum)) {
  1448. row.put("sa_brandid", row1.getLong("sa_brandid"));
  1449. row.put("itemclassid", row1.getLong("itemclassid"));
  1450. break;
  1451. }
  1452. }
  1453. rowssuc.add(row);
  1454. }
  1455. if (iserr) {
  1456. ExcelFactory excelFactory = new ExcelFactory("货品档案导入错误信息");
  1457. HashMap<String, String> map = new HashMap<String, String>();
  1458. map.put("itemno", "产品编码");
  1459. map.put("itemname", "产品名称");
  1460. map.put("spec", "型号");
  1461. map.put("model", "规格尺寸");
  1462. map.put("unitname", "计量单位");
  1463. map.put("erpitemname", "品名");
  1464. map.put("erpitemno", "品号");
  1465. map.put("standards", "产品标准");
  1466. map.put("orderminqty", "销售增量");
  1467. map.put("orderaddqty", "销售起订量");
  1468. map.put("material", "材质");
  1469. map.put("stockstatus1", "库存充足标准");
  1470. map.put("stockstatus2", "库存缺货标准");
  1471. map.put("tradefield", "领域");
  1472. map.put("delivery", "销售交期");
  1473. map.put("prodline", "产线");
  1474. map.put("device", "装置");
  1475. map.put("specalnote", "特殊说明");
  1476. map.put("isservice", "是否服务物料");
  1477. map.put("pressure", "压力等级");
  1478. map.put("butterflyplatedrive", "蝶板驱动");
  1479. map.put("connection", "连接形式");
  1480. map.put("valveplatematerial", "阀板材质");
  1481. map.put("bodymaterial", "阀体材质");
  1482. map.put("actuatortype", "执行器类型");
  1483. map.put("actuatorbrand", "执行器品牌");
  1484. map.put("isbutterfly", "是否中线蝶阀");
  1485. map.put("brandname", "品牌");
  1486. map.put("itemclassnum", "营销类别编码");
  1487. map.put("msg", "错误信息");
  1488. ArrayList<String> colNameList = new ArrayList<String>();
  1489. HashMap<String, Class> keytypemap = new HashMap<String, Class>();
  1490. colNameList.add("itemno");
  1491. colNameList.add("itemname");
  1492. colNameList.add("spec");
  1493. colNameList.add("model");
  1494. colNameList.add("unitname");
  1495. colNameList.add("erpitemname");
  1496. colNameList.add("erpitemno");
  1497. colNameList.add("standards");
  1498. colNameList.add("orderminqty");
  1499. colNameList.add("orderaddqty");
  1500. colNameList.add("material");
  1501. colNameList.add("stockstatus1");
  1502. colNameList.add("stockstatus2");
  1503. colNameList.add("tradefield");
  1504. colNameList.add("delivery");
  1505. colNameList.add("prodline");
  1506. colNameList.add("device");
  1507. colNameList.add("specalnote");
  1508. colNameList.add("isservice");
  1509. colNameList.add("pressure");
  1510. colNameList.add("butterflyplatedrive");
  1511. colNameList.add("connection");
  1512. colNameList.add("valveplatematerial");
  1513. colNameList.add("bodymaterial");
  1514. colNameList.add("actuatortype");
  1515. colNameList.add("actuatorbrand");
  1516. colNameList.add("isbutterfly");
  1517. colNameList.add("brandname");
  1518. colNameList.add("itemclassnum");
  1519. colNameList.add("msg");
  1520. keytypemap.put("itemno", String.class);
  1521. keytypemap.put("itemname", String.class);
  1522. keytypemap.put("spec", String.class);
  1523. keytypemap.put("model", String.class);
  1524. keytypemap.put("unitname", String.class);
  1525. keytypemap.put("erpitemname", String.class);
  1526. keytypemap.put("erpitemno", String.class);
  1527. keytypemap.put("standards", String.class);
  1528. keytypemap.put("orderminqty", String.class);
  1529. keytypemap.put("orderaddqty", String.class);
  1530. keytypemap.put("material", String.class);
  1531. keytypemap.put("stockstatus1", String.class);
  1532. keytypemap.put("stockstatus2", String.class);
  1533. keytypemap.put("tradefield", String.class);
  1534. keytypemap.put("delivery", String.class);
  1535. keytypemap.put("prodline", String.class);
  1536. keytypemap.put("device", String.class);
  1537. keytypemap.put("specalnote", String.class);
  1538. keytypemap.put("isservice", String.class);
  1539. keytypemap.put("pressure", String.class);
  1540. keytypemap.put("butterflyplatedrive", String.class);
  1541. keytypemap.put("connection", String.class);
  1542. keytypemap.put("valveplatematerial", String.class);
  1543. keytypemap.put("bodymaterial", String.class);
  1544. keytypemap.put("actuatortype", String.class);
  1545. keytypemap.put("actuatorbrand", String.class);
  1546. keytypemap.put("isbutterfly", String.class);
  1547. keytypemap.put("brandname", String.class);
  1548. keytypemap.put("itemclassnum", String.class);
  1549. keytypemap.put("msg", String.class);
  1550. rowserr.setFieldList(colNameList);
  1551. rowserr.setFieldTypeMap(keytypemap);
  1552. addSheet(excelFactory, "Sheet1", rowserr, map);
  1553. Rows aa = saveToExcelAttachment(excelFactory);
  1554. String url = "";
  1555. if (!aa.isEmpty()) {
  1556. url = aa.get(0).getString("url");
  1557. }
  1558. return getSucReturnObject().setData(url).toString();
  1559. }
  1560. if (!rowssuc.isEmpty()) {
  1561. for (Row row : rowssuc) {
  1562. Long itemid = createTableID("plm_item");
  1563. SQLFactory sqlFactory = new SQLFactory(this, "货品档案新增");
  1564. sqlFactory.addParameter("siteid", siteid);
  1565. sqlFactory.addParameter("itemid", itemid);
  1566. sqlFactory.addParameter("username", username);
  1567. sqlFactory.addParameter("userid", userid);
  1568. sqlFactory.addParameter("itemno", row.getString("itemno"));
  1569. sqlFactory.addParameter("aftersalesitemno","");
  1570. sqlFactory.addParameter("unitid", row.getLong("unitid"));
  1571. sqlFactory.addParameter("isauxunit", 0);
  1572. sqlFactory.addParameter("unitgroupid", "null");
  1573. sqlFactory.addParameter("itemname", row.getString("itemname"));
  1574. sqlFactory.addParameter("isonsale", 0);
  1575. sqlFactory.addParameter("model", row.getString("model"));
  1576. sqlFactory.addParameter("spec", row.getString("spec"));
  1577. // 订单起订量
  1578. sqlFactory.addParameter("orderminqty", row.getBigDecimal("orderminqty"));
  1579. // 订单增量
  1580. sqlFactory.addParameter("orderaddqty", row.getBigDecimal("orderaddqty"));
  1581. // 订单起订量控制单位(0:主单位;1:辅助单位)
  1582. sqlFactory.addParameter("orderminqty_auxunit", 0);
  1583. // 订单增量控制单位(0:主单位;1:辅助单位)
  1584. sqlFactory.addParameter("orderaddqty_auxunit", 0);
  1585. // 说明
  1586. sqlFactory.addParameter("remarks", "null");
  1587. // 商品条形码
  1588. sqlFactory.addParameter("barcode", "null");
  1589. // 是否单品管理
  1590. sqlFactory.addParameter("skucontrol", 0);
  1591. // 是否批次管理
  1592. sqlFactory.addParameter("batchcontrol", 0);
  1593. // 毛重(g)
  1594. sqlFactory.addParameter("grossweight", "null");
  1595. // 净重(g)
  1596. sqlFactory.addParameter("weight", "null");
  1597. // 高度(mm)
  1598. sqlFactory.addParameter("height", "null");
  1599. // 宽度(mm)
  1600. sqlFactory.addParameter("width", "null");
  1601. // 长度(mm)
  1602. sqlFactory.addParameter("length", "null");
  1603. // 交期
  1604. sqlFactory.addParameter("delivery", row.getLong("delivery"));
  1605. // 牌价
  1606. sqlFactory.addParameter("marketprice", 0);
  1607. // 是否工具
  1608. sqlFactory.addParameter("istool", 0);
  1609. // 产品标准
  1610. sqlFactory.addParameter("standards", row.getString("standards"));
  1611. // 库存缺货标准
  1612. sqlFactory.addParameter("stockstatus2", row.getInteger("stockstatus2"));
  1613. // 库存充足标准
  1614. sqlFactory.addParameter("stockstatus1", row.getInteger("stockstatus1"));
  1615. // 保修期(年)
  1616. sqlFactory.addParameter("warrantyday", "null");
  1617. // 是否营销物料
  1618. sqlFactory.addParameter("iswuliao", 0);
  1619. // 是否服务物料
  1620. sqlFactory.addParameter("isservice", row.getString("isservice").equals("是") ? 1 : 0);
  1621. sqlFactory.addParameter("kw", row.getString("kw"));
  1622. sqlFactory.addParameter("gysmc", row.getString("gysmc"));
  1623. sqlFactory.addParameter("poday", row.getLong("poday"));
  1624. sqlFactory.addParameter("sa_supplierid", row.getLong("sa_supplierid"));
  1625. sqlList.add(sqlFactory.getSQL());
  1626. // 货品档案扩展属性字段表
  1627. sqlFactory = new SQLFactory(this, "货品档案-扩展新增");
  1628. Long plm_itemextendid = createTableID("plm_itemextend");
  1629. sqlFactory.addParameter("siteid", siteid);
  1630. sqlFactory.addParameter("userid", userid);
  1631. sqlFactory.addParameter("username", username);
  1632. sqlFactory.addParameter("plm_itemextendid", plm_itemextendid);
  1633. sqlFactory.addParameter("itemid", itemid);
  1634. sqlFactory.addParameter("material", row.getString("material"));
  1635. sqlFactory.addParameter("pressure", row.getString("pressure"));
  1636. sqlFactory.addParameter("caliber", "null");
  1637. sqlFactory.addParameter("butterflyplatedrive", row.getString("butterflyplatedrive"));
  1638. sqlFactory.addParameter("connection", row.getString("connection"));
  1639. sqlFactory.addParameter("valveplatematerial", row.getString("valveplatematerial"));
  1640. sqlFactory.addParameter("bodymaterial", row.getString("bodymaterial"));
  1641. sqlFactory.addParameter("actuatortype", row.getString("actuatortype"));
  1642. sqlFactory.addParameter("actuatorbrand", row.getString("actuatorbrand"));
  1643. sqlFactory.addParameter("isbutterfly", row.getString("isbutterfly").equals("是") ? 1 : 0);
  1644. sqlFactory.addParameter("erpitemno", row.getString("erpitemno"));
  1645. sqlFactory.addParameter("erpitemname", row.getString("erpitemname"));
  1646. sqlFactory.addParameter("specalnote", row.getString("specalnote"));
  1647. sqlFactory.addParameter("prodline", row.getString("prodline"));
  1648. sqlFactory.addParameter("device", row.getString("device"));
  1649. sqlList.add(sqlFactory.getSQL());
  1650. Long plm_item_tradefieldid = createTableID("plm_item_tradefield");
  1651. sqlFactory = new SQLFactory(this, "新增领域");
  1652. sqlFactory.addParameter("siteid", siteid);
  1653. sqlFactory.addParameter("plm_item_tradefieldid", plm_item_tradefieldid);
  1654. sqlFactory.addParameter("tradefield", row.getString("tradefield"));
  1655. sqlFactory.addParameter("userid", userid);
  1656. sqlFactory.addParameter("itemid", itemid);
  1657. sqlList.add(sqlFactory.getSQL());
  1658. Long sa_itemsaleclassid = createTableID("sa_itemsaleclass");
  1659. sqlFactory = new SQLFactory(this, "新增营销类别");
  1660. sqlFactory.addParameter("siteid", siteid);
  1661. sqlFactory.addParameter("sa_itemsaleclassid", sa_itemsaleclassid);
  1662. sqlFactory.addParameter("itemclassid", row.getString("itemclassid"));
  1663. sqlFactory.addParameter("itemno", row.getString("itemno"));
  1664. sqlFactory.addParameter("itemid", itemid);
  1665. sqlList.add(sqlFactory.getSQL());
  1666. sqlList.add(DataContrlLog.createLog(this, "plm_item", itemid, "新增", "货品档案导入").getSQL());
  1667. sqlList.add(DataContrlLog.createLog(this, "plm_itemextend", plm_itemextendid, "新增", "货品档案导入").getSQL());
  1668. sqlList.add(DataContrlLog.createLog(this, "plm_item_tradefield", plm_item_tradefieldid, "新增", "货品档案导入").getSQL());
  1669. sqlList.add(DataContrlLog.createLog(this, "sa_itemsaleclass", sa_itemsaleclassid, "新增", "货品档案导入").getSQL());
  1670. }
  1671. }
  1672. if (!sqlList.isEmpty()) {
  1673. dbConnect.runSqlUpdate(sqlList);
  1674. }
  1675. } catch (Exception e1) {
  1676. e1.printStackTrace();
  1677. return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
  1678. }
  1679. return getSucReturnObject().toString();
  1680. }
  1681. public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows,
  1682. HashMap<String, String> titlemap) {
  1683. ArrayList<String> keylist = datarows.getFieldList();
  1684. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
  1685. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  1686. XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
  1687. XSSFFont font = xssfFWorkbook.createFont();
  1688. font.setColor((short) 0xa);
  1689. font.setFontHeightInPoints((short) 12);
  1690. font.setBold(true);
  1691. xssfCellStyle1.setFont(font);
  1692. CellStyle style = xssfFWorkbook.createCellStyle();
  1693. DataFormat format = xssfFWorkbook.createDataFormat();
  1694. style.setDataFormat(format.getFormat("@"));
  1695. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  1696. for (int i = 0; i <= 32; i++) {
  1697. sheet.setDefaultColumnStyle(i, style);
  1698. }
  1699. ExportExcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
  1700. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  1701. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  1702. XSSFCellStyle titleCellStyle3 = ExportExcel.createTitleCellStyle3(xssfFWorkbook);
  1703. ExportExcel.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook);// 写入标题
  1704. for (int n = 0; n < datarows.size(); n++) {
  1705. Row row = datarows.get(n);
  1706. XSSFRow datarow = sheet.createRow(n + 3);
  1707. for (int i1 = 0; i1 < keylist.size(); i1++) {
  1708. Class fieldclazztype = datarows.getFieldMeta(keylist.get(i1)).getFieldtype();
  1709. if (fieldclazztype == Integer.class) {
  1710. datarow.createCell(i1).setCellValue(row.getInteger((String) keylist.get(i1)));
  1711. } else if (fieldclazztype == Long.class) {
  1712. datarow.createCell(i1).setCellValue(row.getLong((String) keylist.get(i1)));
  1713. } else if (fieldclazztype == Float.class) {
  1714. datarow.createCell(i1).setCellValue(row.getFloat((String) keylist.get(i1)));
  1715. } else if (fieldclazztype == Double.class) {
  1716. datarow.createCell(i1).setCellValue(row.getDouble((String) keylist.get(i1)));
  1717. } else {
  1718. datarow.createCell(i1).setCellValue(row.getString((String) keylist.get(i1)));
  1719. }
  1720. if (i1 == 29) {
  1721. datarow.getCell(i1).setCellStyle(xssfCellStyle1);
  1722. }
  1723. }
  1724. }
  1725. return sheet;
  1726. }
  1727. }