LSALogistics.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. package restcontroller.webmanage.sale.logistics;
  2. import beans.datacontrllog.DataContrlLog;
  3. import beans.order.Order;
  4. import beans.parameter.Parameter;
  5. import beans.remind.Remind;
  6. import beans.salearea.SaleArea;
  7. import com.alibaba.fastjson.JSONArray;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.huaweicloud.sdk.meeting.v1.model.SearchQosHistoryMeetingsRequest;
  10. import common.Controller;
  11. import common.YosException;
  12. import common.annotation.API;
  13. import common.annotation.CACHEING;
  14. import common.annotation.CACHEING_CLEAN;
  15. import common.data.*;
  16. import restcontroller.R;
  17. import restcontroller.sale.promotion.promotion;
  18. import java.math.BigDecimal;
  19. import java.util.ArrayList;
  20. import static restcontroller.webmanage.sale.logistics.LSALogisticsHelper.*;
  21. /**
  22. * 物流单(LSA)
  23. */
  24. public class LSALogistics extends Controller {
  25. /**
  26. * 构造函数
  27. *
  28. * @param content
  29. */
  30. public LSALogistics(JSONObject content) throws YosException {
  31. super(content);
  32. }
  33. @API(title = "新增或更新", apiversion = R.ID20230719165802.v1.class)
  34. @CACHEING_CLEAN(apiClass = {LSALogistics.class})
  35. public String insertOrUpdate() throws YosException {
  36. //物流单ID
  37. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  38. //经销商编号(选择经销商)
  39. Long sys_enterpriseid = content.getLong("sys_enterpriseid");
  40. //出入库表货品明细
  41. JSONArray items = content.getJSONArray("items");
  42. String billdate = content.getStringValue("billdate");
  43. if(billdate.equals("")){
  44. return getErrReturnObject().setErrMsg("单据日期不能为空").toString();
  45. }
  46. ArrayList<String> sqlList = new ArrayList<>();
  47. if (sys_enterpriseid <= 0 || isEnterpriseEmpty(this)) {
  48. return getErrReturnObject().setErrMsg("未选择企业").toString();
  49. }
  50. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  51. if (sa_logisticsid <= 0 || rows.isEmpty()) {
  52. sa_logisticsid = createTableID("sa_logistics");
  53. sqlList.add(insert(this, sa_logisticsid).getSQL());
  54. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "新增", "物流单-新增:" + sa_logisticsid).getSQL());
  55. content.put("sa_logisticsid", sa_logisticsid);
  56. } else {
  57. if (!rows.get(0).getString("status").equals("新建")) {
  58. return getErrReturnObject().setErrMsg("该物流单为非新建状态,无法更改").toString();
  59. }
  60. sqlList.add(update(this, sa_logisticsid).getSQL());
  61. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "更新", "物流单-更新:" + sa_logisticsid).getSQL());
  62. }
  63. //更新送货列表
  64. ArrayList<Long> st_stockbill_itemsids = new ArrayList<>();
  65. for (Object obj : items) {
  66. JSONObject object = (JSONObject) obj;
  67. Long st_stockbill_itemsid = object.getLongValue("st_stockbill_itemsid");
  68. BigDecimal qty = object.getBigDecimalValue("qty");
  69. if (isStockbillItemsEmpty(this, st_stockbill_itemsid)) {
  70. System.err.println("出库单不存在");
  71. return getErrReturnObject().setErrMsg("出库单不存在").toString();
  72. }
  73. if (isOut(this, st_stockbill_itemsid, qty)) {
  74. return getErrReturnObject().setErrMsg("超出最大可送货数量").toString();
  75. }
  76. if (isLogisticsItemEmpty(this, st_stockbill_itemsid)) {
  77. sqlList.add(insertLogisticsItem(this, object).getSQL());
  78. } else {
  79. sqlList.add(updateLogisticsItem(this, object).getSQL());
  80. }
  81. st_stockbill_itemsids.add(st_stockbill_itemsid);
  82. }
  83. dbConnect.runSqlUpdate(sqlList);
  84. //删除送货
  85. if (st_stockbill_itemsids.size() > 0) {
  86. deleteLogisticsItem(this, st_stockbill_itemsids);
  87. }
  88. return detail();
  89. }
  90. @API(title = "添加送货明细", apiversion = R.ID20230720141602.v1.class)
  91. @CACHEING_CLEAN(apiClass = {LSALogistics.class})
  92. public String addMX() throws YosException {
  93. //物流单ID
  94. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  95. //出入库表货品明细
  96. JSONArray items = content.getJSONArray("items");
  97. ArrayList<String> sqlList = new ArrayList<>();
  98. for (Object obj : items) {
  99. JSONObject object = (JSONObject) obj;
  100. Long st_stockbill_itemsid = object.getLongValue("st_stockbill_itemsid");
  101. BigDecimal qty = object.getBigDecimalValue("qty");
  102. if (isStockbillItemsEmpty(this, st_stockbill_itemsid)) {
  103. System.err.println("出库单不存在");
  104. return getErrReturnObject().setErrMsg("出库单不存在").toString();
  105. }
  106. if (isOut(this, st_stockbill_itemsid, qty)) {
  107. return getErrReturnObject().setErrMsg("超出最大可送货数量").toString();
  108. }
  109. if (isLogisticsItemEmpty(this, st_stockbill_itemsid)) {
  110. sqlList.add(insertLogisticsItem(this, object).getSQL());
  111. } else {
  112. sqlList.add(updateLogisticsItem(this, object).getSQL());
  113. }
  114. }
  115. dbConnect.runSqlUpdate(sqlList);
  116. return getSucReturnObject().toString();
  117. }
  118. @API(title = "删除送货明细", apiversion = R.ID20230720141902.v1.class)
  119. @CACHEING_CLEAN(apiClass = {LSALogistics.class})
  120. public String delete() throws YosException {
  121. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  122. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  123. if (rows.isEmpty()) {
  124. return getErrReturnObject().setErrMsg("数据不存在").toString();
  125. }
  126. if (!"新建".equals(rows.get(0).getString("status"))) {
  127. return getErrReturnObject().setErrMsg("非新建状态无法删除").toString();
  128. }
  129. JSONArray sa_logistics_itemsids = content.getJSONArray("sa_logistics_itemsids");
  130. String sql = "DELETE from sa_logistics_items where sa_logistics_itemsid in " + sa_logistics_itemsids + " and siteid='" + siteid + "'";
  131. sql = sql.replace("[", "(").replace("]", ")");
  132. dbConnect.runSqlUpdate(sql);
  133. return getSucReturnObject().toString();
  134. }
  135. @API(title = "送货明细列表", apiversion = R.ID20230720141702.v1.class)
  136. @CACHEING
  137. public String selectMXList() throws YosException {
  138. //物流单ID
  139. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  140. pageSorting = pageSorting.equals("''") ? "rowno" : pageSorting;
  141. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics_items");
  142. querySQL.setTableAlias("t1");
  143. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill_items", "t2", "t2.st_stockbill_itemsid=t1.st_stockbill_itemsid and t2.siteid=t1.siteid",
  144. "rowno", "itemid", "unit", "price", "amount", "remarks");
  145. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill", "t3", "t3.st_stockbillid =t2.st_stockbillid and t3.siteid=t2.siteid",
  146. "billno");
  147. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t4", "t4.itemid =t2.itemid and t4.siteid=t2.siteid",
  148. "spec","itemno", "itemname", "model");
  149. querySQL.setWhere("t1.sa_logisticsid=" + sa_logisticsid);
  150. querySQL.setWhere("t1.siteid='" + siteid + "'");
  151. querySQL.setPage(pageSize, pageNumber).setOrderBy(pageSorting);
  152. Rows rows = querySQL.query();
  153. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  154. // 封面cover
  155. RowsMap coverRowsMap = getAttachmentUrl("plm_item", ids, "cover");
  156. for (Row row : rows) {
  157. Rows coverRows = coverRowsMap.get(row.getString("itemid"));
  158. if (coverRows.isEmpty()) {
  159. row.put("cover", "");
  160. } else {
  161. row.put("cover", coverRows.get(0).getString("url"));
  162. }
  163. }
  164. return getSucReturnObject().setData(rows).toString();
  165. }
  166. @API(title = "选择送货明细列表", apiversion = R.ID20230720141802.v1.class)
  167. public String selectChooseMXList() throws YosException {
  168. StringBuffer where = new StringBuffer(" 1=1 ");
  169. if (content.containsKey("where")) {
  170. JSONObject whereObject = content.getJSONObject("where");
  171. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  172. where.append("and (t3.itemname like '%").append(whereObject.getString("condition")).append("%'");
  173. where.append("or t2.billno like '%").append(whereObject.getString("condition")).append("%'");
  174. where.append("or t3.itemno like '%").append(whereObject.getString("condition")).append("%'");
  175. where.append("or t3.spec like '%").append(whereObject.getString("condition")).append("%'");
  176. where.append("or t3.model like '%").append(whereObject.getString("condition")).append("%'");
  177. where.append("or t1.remarks like '%").append(whereObject.getString("condition")).append("%'");
  178. where.append("or t6.sonum like '%").append(whereObject.getString("condition")).append("%')");
  179. }
  180. }
  181. //物流单ID
  182. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  183. Long sys_enterpriseid = content.getLongValue("sys_enterpriseid");
  184. pageSorting = pageSorting.equals("''") ? "t1.rowno" : pageSorting;
  185. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill_items",
  186. "st_stockbill_itemsid","unit","amount","remarks");
  187. querySQL.setTableAlias("t1");
  188. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill", "t2", "t2.st_stockbillid =t1.st_stockbillid and t2.siteid=t1.siteid",
  189. "billno");
  190. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid =t1.itemid and t3.siteid=t1.siteid",
  191. "spec","itemno", "itemname", "model");
  192. querySQL.addJoinTable(JOINTYPE.left, "sa_dispatch_items", "t4", "t4.sa_dispatch_itemsid = t1.sa_dispatch_itemsid AND t4.siteid = t1.siteid");
  193. querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t5", "t5.sa_orderitemsid=t4.sa_orderitemsid and t5.siteid=t4.siteid");
  194. querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t6", "t6.sa_orderid=t5.sa_orderid and t6.siteid=t5.siteid","sonum");
  195. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t7", "t7.sys_enterpriseid=t2.sys_enterpriseid and t7.siteid=t2.siteid","agentnum");
  196. querySQL.addQueryFields("price","t1.amount/t1.qty");
  197. querySQL.addQueryFields("qty","t1.qty-ifnull(t1.transportqty,0)");
  198. querySQL.setWhere("t1.siteid='" + siteid + "'");
  199. querySQL.setWhere("t2.sys_enterpriseid=" + sys_enterpriseid);
  200. querySQL.setWhere("t2.status='审核'");
  201. querySQL.setWhere("ifnull(t1.transportqty,0)<t1.qty");
  202. querySQL.setWhere("NOT EXISTS(SELECT 1 from sa_logistics_items WHERE sa_logisticsid=" + sa_logisticsid + " and st_stockbill_itemsid=t1.st_stockbill_itemsid)");
  203. querySQL.setWhere("exists(select 1 from st_stockbill_items s1 left join (select st_stockbill_itemsid,t1.siteid,sum(qty) yifaqty from sa_logistics_items t1 inner join sa_logistics t2 on t1.sa_logisticsid=t2.sa_logisticsid and t1.siteid=t2.siteid where t2.status='审核' group by st_stockbill_itemsid,t1.siteid) s2 on s1.st_stockbill_itemsid=s2.st_stockbill_itemsid and s1.siteid=s2.siteid where s1.qty>ifnull(s2.yifaqty,0) and s1.st_stockbill_itemsid=t1.st_stockbill_itemsid)");
  204. querySQL.setWhere(where.toString());
  205. querySQL.setPage(pageSize, pageNumber).setOrderBy(pageSorting);
  206. System.out.println(querySQL.getSQL());
  207. Rows rows = querySQL.query();
  208. return getSucReturnObject().setData(rows).toString();
  209. }
  210. @API(title = "物流单详情", apiversion = R.ID20230720142002.v1.class)
  211. @CACHEING
  212. public String detail() throws YosException {
  213. //物流单ID
  214. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  215. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics");
  216. querySQL.setTableAlias("t1");
  217. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t2.sys_enterpriseid=t1.sys_enterpriseid and t2.siteid=t1.siteid",
  218. "t2.enterprisename");
  219. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t3.sys_enterpriseid=t2.sys_enterpriseid and t3.siteid=t2.siteid",
  220. "t3.agentnum");
  221. querySQL.addJoinTable(JOINTYPE.left, "sa_logiscomp", "t4", "t4.sa_logiscompid=t1.sa_logiscompid and t4.siteid=t1.siteid",
  222. "t4.kd100id");
  223. querySQL.addQueryFields("logiscomp_name", "t4.name");
  224. querySQL.setWhere("t1.sa_logisticsid=" + sa_logisticsid);
  225. querySQL.setWhere("t1.siteid='" + siteid + "'");
  226. Rows rows = querySQL.query();
  227. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  228. row.putIfAbsent("billdate", "");
  229. row.putIfAbsent("checkdate", "");
  230. row.putIfAbsent("receivedate", "");
  231. return getSucReturnObject().setData(row).toString();
  232. }
  233. @API(title = "物流单列表", apiversion = R.ID20230720142102.v1.class)
  234. @CACHEING
  235. public String selectList() throws YosException {
  236. StringBuffer where = new StringBuffer(" 1=1 ");
  237. if (content.containsKey("where")) {
  238. JSONObject whereObject = content.getJSONObject("where");
  239. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  240. where.append("and (t1.billno like '%").append(whereObject.getString("condition")).append("%'");
  241. where.append("or t1.logisticno like '%").append(whereObject.getString("condition")).append("%'");
  242. where.append("or t1.remarks like '%").append(whereObject.getString("condition")).append("%'");
  243. where.append("or t3.agentnum like '%").append(whereObject.getString("condition")).append("%'");
  244. where.append("or t2.enterprisename like '%").append(whereObject.getString("condition")).append("%'");
  245. where.append("or t4.name like '%").append(whereObject.getString("condition")).append("%')");
  246. }
  247. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  248. where.append(" and t1.billdate >='").append(whereObject.getString("begindate")).append(" 00:00:00'");
  249. }
  250. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  251. where.append(" and t1.billdate <='").append(whereObject.getString("enddate")).append(" 23:59:59'");
  252. }
  253. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  254. where.append(" and t1.status = '").append(whereObject.getString("status")).append("'");
  255. }
  256. }
  257. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics");
  258. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t2.sys_enterpriseid=t1.sys_enterpriseid and t2.siteid=t1.siteid",
  259. "t2.enterprisename");
  260. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t3.sys_enterpriseid=t2.sys_enterpriseid and t3.siteid=t2.siteid",
  261. "t3.agentnum");
  262. querySQL.addJoinTable(JOINTYPE.left, "sa_logiscomp", "t4", "t4.sa_logiscompid=t1.sa_logiscompid and t4.siteid=t1.siteid",
  263. "t4.kd100id");
  264. querySQL.addQueryFields("logiscomp_name", "t4.name");
  265. querySQL.setWhere("t1.siteid='" + siteid + "'");
  266. if (sys_enterpriseid > 0) {
  267. querySQL.setWhere("t1.sys_enterpriseid='" + sys_enterpriseid + "'");
  268. querySQL.setWhere("t1.status !='新建'");
  269. }
  270. querySQL.setWhere(where.toString());
  271. querySQL.setPage(pageSize,pageNumber).setOrderBy(pageSorting).setTableAlias("t1");
  272. Rows rows = querySQL.query();
  273. for (Row row : rows) {
  274. row.putIfAbsent("billdate", "");
  275. row.putIfAbsent("checkdate", "");
  276. row.putIfAbsent("receivedate", "");
  277. }
  278. return getSucReturnObject().setData(rows).toString();
  279. }
  280. @API(title = "物流单列表(区域经理)", apiversion = R.ID20231030093503.v1.class)
  281. @CACHEING
  282. public String selectListManager() throws YosException {
  283. StringBuffer where = new StringBuffer(" 1=1 ");
  284. if (content.containsKey("where")) {
  285. JSONObject whereObject = content.getJSONObject("where");
  286. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  287. where.append("and (t1.billno like '%").append(whereObject.getString("condition")).append("%'");
  288. where.append("or t1.logisticno like '%").append(whereObject.getString("condition")).append("%'");
  289. where.append("or t1.remarks like '%").append(whereObject.getString("condition")).append("%'");
  290. where.append("or t3.agentnum like '%").append(whereObject.getString("condition")).append("%'");
  291. where.append("or t2.enterprisename like '%").append(whereObject.getString("condition")).append("%')");
  292. }
  293. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  294. where.append(" and t1.billdate >='").append(whereObject.getString("begindate")).append(" 00:00:00'");
  295. }
  296. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  297. where.append(" and t1.billdate <='").append(whereObject.getString("enddate")).append(" 23:59:59'");
  298. }
  299. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  300. where.append(" and t1.status = '").append(whereObject.getString("status")).append("'");
  301. }
  302. }
  303. SQLFactory areasqlFactory = new SQLFactory(new promotion(content), "区域经理查询下属营销区域");
  304. areasqlFactory.addParameter("siteid", siteid);
  305. areasqlFactory.addParameter("hrid", hrid);
  306. Rows arearows = dbConnect.runSqlQuery(areasqlFactory);
  307. ArrayList<Long> arrayList =arearows.toArrayList("sa_saleareaid", new ArrayList<Long>());
  308. arrayList.addAll(SaleArea.getSubSaleAreaIds(this, arrayList));
  309. String sql = " and t1.sys_enterpriseid in (select sys_enterpriseid from sys_enterprise_tradefield where sa_saleareaid in "+arrayList+")";
  310. sql = sql.replace("[", "(").replace("]", ")");
  311. where.append(sql);
  312. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics");
  313. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t2.sys_enterpriseid=t1.sys_enterpriseid and t2.siteid=t1.siteid",
  314. "t2.enterprisename");
  315. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t3.sys_enterpriseid=t2.sys_enterpriseid and t3.siteid=t2.siteid",
  316. "t3.agentnum");
  317. querySQL.addJoinTable(JOINTYPE.left, "sa_logiscomp", "t4", "t4.sa_logiscompid=t1.sa_logiscompid and t4.siteid=t1.siteid",
  318. "t4.kd100id");
  319. querySQL.addQueryFields("logiscomp_name", "t4.name");
  320. querySQL.setWhere("t1.siteid='" + siteid + "'");
  321. querySQL.setWhere(where.toString());
  322. querySQL.setPage(pageSize,pageNumber).setOrderBy(pageSorting).setTableAlias("t1");
  323. Rows rows = querySQL.query();
  324. for (Row row : rows) {
  325. row.putIfAbsent("billdate", "");
  326. row.putIfAbsent("checkdate", "");
  327. row.putIfAbsent("receivedate", "");
  328. }
  329. return getSucReturnObject().setData(rows).toString();
  330. }
  331. @API(title = "收货、取消收货", apiversion = R.ID20230721104302.v1.class)
  332. @CACHEING_CLEAN(apiClass = {LSALogistics.class})
  333. public String receive() throws YosException {
  334. ArrayList<String> sqlList = new ArrayList<>();
  335. Long sa_logisticsid = content.getLong("sa_logisticsid");
  336. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  337. if (rows.isEmpty()) {
  338. return getErrReturnObject().setErrMsg("请选择物流单").toString();
  339. }
  340. SQLFactory sqlFactory = new SQLFactory(this, "物流单确认收货");
  341. if (rows.get(0).getString("status").equals("新建")) {
  342. return getErrReturnObject().setErrMsg("该物流单为新建状态,无法确认收货与取消收货").toString();
  343. } else if (rows.get(0).getString("status").equals("收货")) {
  344. String sql = DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "取消收货", "物流单取消收货:" + sa_logisticsid).getSQL();
  345. sqlList.add(sql);
  346. sqlFactory = new SQLFactory(this, "物流单取消收货");
  347. } else {
  348. String sql = DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "收货", "物流单收货:" + sa_logisticsid).getSQL();
  349. sqlList.add(sql);
  350. }
  351. sqlFactory.addParameter("siteid", siteid);
  352. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  353. sqlFactory.addParameter("userid", userid);
  354. sqlFactory.addParameter("username", username);
  355. sqlList.add(sqlFactory.getSQL());
  356. dbConnect.runSqlUpdate(sqlList);
  357. return getSucReturnObject().toString();
  358. }
  359. //TODO 审核时必填字段?
  360. @API(title = "审核、反审核", apiversion = R.ID20230721110502.v1.class)
  361. @CACHEING_CLEAN(apiversions = {R.ID20221122132804.v1.class, R.ID20221122133004.v1.class, R.ID20221114135303.v1.class, R.ID20230219093203.v1.class})
  362. public String checkOrUncheck() throws YosException {
  363. Long sa_logisticsid = content.getLong("sa_logisticsid");
  364. ArrayList<String> sqlList = new ArrayList<>();
  365. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  366. if (rows.isEmpty()) {
  367. return getErrReturnObject().setErrMsg("请选择物流单").toString();
  368. }
  369. Row logisticsRow = rows.get(0);
  370. String billno = logisticsRow.getString("billno");
  371. String status = logisticsRow.getString("status");
  372. if ("收货".equals(status)) {
  373. return getErrReturnObject().setErrMsg("该物流单为收货状态,无法审核与反审核").toString();
  374. }
  375. SQLFactory sqlFactory = new SQLFactory(this, "物流单审核");
  376. if (status.equals("审核")) {
  377. sqlFactory = new SQLFactory(this, "物流单反审核");
  378. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "反审核", "反审核:" + sa_logisticsid).getSQL());
  379. Rows itemsrows = dbConnect.runSqlQuery("SELECT * from sa_logistics_items WHERE sa_logisticsid=" + sa_logisticsid + " and siteid='" + siteid + "'");
  380. for (Row item : itemsrows) {
  381. Long st_stockbill_itemsid = item.getLong("st_stockbill_itemsid");
  382. BigDecimal qty = item.getBigDecimal("qty");
  383. sqlList.add("UPDATE st_stockbill_items SET transportqty=ifnull(transportqty,0)-" + qty + " WHERE st_stockbill_itemsid=" + st_stockbill_itemsid + " and siteid='" + siteid + "'");
  384. }
  385. }
  386. if (status.equals("新建")) {
  387. Rows itemsrows = dbConnect.runSqlQuery("SELECT * from sa_logistics_items WHERE sa_logisticsid=" + sa_logisticsid + " and siteid='" + siteid + "'");
  388. for (Row item : itemsrows) {
  389. Long st_stockbill_itemsid = item.getLong("st_stockbill_itemsid");
  390. BigDecimal qty = item.getBigDecimal("qty");
  391. if (isOut(this, st_stockbill_itemsid, qty)) {
  392. return getErrReturnObject().setErrMsg("超出最大可送货数量").toString();
  393. }
  394. sqlList.add("UPDATE st_stockbill_items SET transportqty=ifnull(transportqty,0)+" + qty + " WHERE st_stockbill_itemsid=" + st_stockbill_itemsid + " and siteid='" + siteid + "'");
  395. }
  396. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "审核", "审核:" + sa_logisticsid).getSQL());
  397. Rows dispatchRows = dbConnect.runSqlQuery("SELECT sa_orderid FROM st_stockbill_items t1 INNER JOIN sa_logistics_items t2 ON t2.st_stockbill_itemsid=t1.st_stockbill_itemsid AND t2.siteid=t1.siteid WHERE t2.sa_logisticsid=" + sa_logisticsid + " AND t2.siteid='" + siteid + "'");
  398. Long sa_orderid = 0L;
  399. if (dispatchRows.isNotEmpty()) {
  400. sa_orderid = dispatchRows.get(0).getLong("sa_orderid");
  401. }
  402. String sonum = "";
  403. Rows orderRows = Order.getOrderRows(this, sa_orderid);
  404. Long sys_enterpriseid = 0L;
  405. if (orderRows.isNotEmpty()) {
  406. sonum = orderRows.get(0).getString("sonum");
  407. sys_enterpriseid = orderRows.get(0).getLong("sys_enterpriseid");
  408. }
  409. sendMsg("您的订单【" + sonum + "】已发货,物流单号【" + billno + "】 !", sa_orderid, sys_enterpriseid);
  410. }
  411. sqlFactory.addParameter("userid", userid);
  412. sqlFactory.addParameter("username", username);
  413. sqlFactory.addParameter("siteid", siteid);
  414. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  415. sqlList.add(sqlFactory.getSQL());
  416. dbConnect.runSqlUpdate(sqlList);
  417. return getSucReturnObject().toString();
  418. }
  419. public void sendMsg(String content, Long sa_orderid, Long sys_enterpriseid) throws YosException {
  420. ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid).toArrayList("userid", new ArrayList<>());
  421. Remind remind = new Remind(this);
  422. remind.setTitle("物流消息");
  423. remind.setContent(content);
  424. remind.setType("应用");
  425. remind.setObjectid(sa_orderid);
  426. remind.setObjectname("sa_order");
  427. remind.setTouserid(userList);
  428. remind.createSys_message();
  429. }
  430. }