DispatchAutoCloseService.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. package service;
  2. import beans.datacontrllog.DataContrlLog;
  3. import beans.parameter.Parameter;
  4. import beans.uploaderpdata.UploadDataToERP_HY;
  5. import com.alibaba.fastjson.JSONArray;
  6. import com.alibaba.fastjson.JSONObject;
  7. import common.ServiceController;
  8. import common.YosException;
  9. import common.data.Row;
  10. import common.data.Rows;
  11. import common.data.RowsMap;
  12. import common.data.SQLFactory;
  13. import common.parameter.properties;
  14. import org.apache.log4j.Logger;
  15. import restcontroller.webmanage.executorService.Executor;
  16. import utility.ERPDocking;
  17. import utility.tools.WebRequest;
  18. import java.util.ArrayList;
  19. import java.util.HashMap;
  20. import java.util.Properties;
  21. /**
  22. * 发货单自动关闭任务
  23. */
  24. public class DispatchAutoCloseService extends ServiceController {
  25. private static Logger logger = Logger.getLogger(DispatchAutoCloseService.class);
  26. @Override
  27. public void serviceRun() throws YosException {
  28. //
  29. Properties yosProperties = properties.getYosProperties();
  30. if (yosProperties.getProperty("system.runmode.debug").equalsIgnoreCase("false")) {
  31. Rows rows = dbConnect.runSqlQuery("select * from sa_dispatch where status='复核' and siteid='CCYOSG'");
  32. Rows rowsdetail = dbConnect.runSqlQuery("select t1.* from sa_dispatch_items t1 inner join sa_dispatch t2 on t1.sa_dispatchid=t2.sa_dispatchid and t1.siteid=t2.siteid where t2.status='复核' and t1.siteid='CCYOSG'");
  33. RowsMap rowsMap = rowsdetail.toRowsMap("sa_dispatchid");
  34. RowsMap rowsMap1 = rowsdetail.toRowsMap("billno");
  35. ArrayList<String> sqlList = new ArrayList<>();
  36. ERPDocking erpDocking = new ERPDocking();
  37. JSONArray ErpSainvoices = erpDocking.queryErpSainvoices(10000, 1, new JSONArray(), "", "", "", false, false, true);
  38. JSONArray dispatchids = new JSONArray();
  39. JSONArray unclosedispatchids = new JSONArray();
  40. if (!ErpSainvoices.isEmpty()) {
  41. for (Object ErpSainvoice : ErpSainvoices) {
  42. JSONObject erpSainvoice = (JSONObject) ErpSainvoice;
  43. String billno = erpSainvoice.getString("finvonum");
  44. long sa_dispatchid = 0;
  45. if (rowsMap1.containsKey(billno)) {
  46. if (rowsMap1.get(billno).isNotEmpty()) {
  47. sa_dispatchid = rowsMap1.get(billno).get(0).getLong("sa_dispatchid");
  48. dispatchids.add(sa_dispatchid);
  49. } else {
  50. logger.info("发货单【" + billno + "】不存在:");
  51. continue;
  52. }
  53. } else {
  54. logger.info("发货单【" + billno + "】不存在:");
  55. continue;
  56. }
  57. JSONArray jsonArray = erpDocking.queryErpSainvoice(billno);
  58. JSONObject object = new JSONObject();
  59. JSONObject objectdetail = new JSONObject();
  60. object.put("access_token", "basicDrp");
  61. object.put("classname", "Sainvoice");
  62. object.put("method", "closeSainvoice");
  63. objectdetail.put("finvonum", billno);
  64. objectdetail.put("isManual", false);
  65. object.put("content", objectdetail);
  66. HashMap<String, String> map = new HashMap<>();
  67. map.put("content-Type", "application/json");
  68. String result = new WebRequest().doPost(object.toString(), "http://124.71.196.182:8101/rest/ws_v2/basicDrp", map);
  69. JSONObject resultobject = JSONObject.parseObject(result);
  70. try {
  71. Rows erpupdatelogRows = dbConnect.runSqlQuery(
  72. "select * from sys_erpupdatelog where ownertable='sa_dispatch' and type='关闭发货单' and ownerid=" + sa_dispatchid);
  73. SQLFactory sqlFactory;
  74. if (!erpupdatelogRows.isEmpty()) {
  75. sqlFactory = new SQLFactory(new UploadDataToERP_HY(), "erp上传日志更新");
  76. sqlFactory.addParameter("sys_erpupdatelogid", erpupdatelogRows.get(0).getLong("sys_erpupdatelogid"));
  77. } else {
  78. sqlFactory = new SQLFactory(new UploadDataToERP_HY(), "erp上传日志新增");
  79. sqlFactory.addParameter("sys_erpupdatelogid", createTableID("sys_erpupdatelog"));
  80. }
  81. sqlFactory.addParameter("siteid", "CCYOSG");
  82. sqlFactory.addParameter("userid", 1);
  83. sqlFactory.addParameter("username", "admin");
  84. sqlFactory.addParameter("ownerid", sa_dispatchid);
  85. sqlFactory.addParameter("ownertable", "sa_dispatch");
  86. sqlFactory.addParameter("type", "关闭发货单");
  87. sqlFactory.addParameter("request", object.toString());
  88. sqlFactory.addParameter("response", resultobject.toJSONString());
  89. if ("0".equals(resultobject.getString("errcode"))) {
  90. sqlFactory.addParameter("erpbillno", billno);
  91. sqlFactory.addParameter("errmsg", "");
  92. } else {
  93. sqlFactory.addParameter("erpbillno", "");
  94. sqlFactory.addParameter("errmsg", resultobject.getString("errmsg"));
  95. }
  96. sqlFactory.addParameter("status", resultobject.getString("errcode"));
  97. sqlList.add(sqlFactory.getSQL());
  98. } catch (Exception e) {
  99. e.printStackTrace();
  100. }
  101. if (resultobject.getString("errcode").equals("0")) {
  102. sqlList.add("update sa_dispatch set status='关闭',closedate=current_time,closeby='admin' where sa_dispatchid='" + sa_dispatchid + "' and siteid='CCYOSG'");
  103. SQLFactory sqlFactory = new SQLFactory(this, "数据操作日志新增");
  104. sqlFactory.addParameter("sys_contrllogid", createTableID("sys_contrllog"));
  105. sqlFactory.addParameter("ownertable", "sa_dispatch");
  106. sqlFactory.addParameter("ownerid", sa_dispatchid);
  107. sqlFactory.addParameter("action", "自动关闭");
  108. sqlFactory.addParameter("remarks", "发货单自动关闭成功");
  109. sqlFactory.addParameter("actionuserid", "1");
  110. sqlFactory.addParameter("actionby", "admin");
  111. sqlFactory.addParameter("siteid", "CCYOSG");
  112. sqlList.add(sqlFactory.getSQL());
  113. } else {
  114. unclosedispatchids.add(sa_dispatchid);
  115. logger.info("发货单自动关闭错误:" + resultobject.getString("errmsg") + "发货单id:" + sa_dispatchid);
  116. }
  117. if (!jsonArray.isEmpty()) {
  118. for (Object object1 : jsonArray) {
  119. JSONObject jsonObject = (JSONObject) object1;
  120. sqlList.add("update sa_dispatch_items set outwarehousedate=current_time,outwarehouseqty=" + jsonObject.getBigDecimalValue("fqty1") + " where rowno =" + jsonObject.getIntValue("frownum") + " and sa_dispatchid='" + sa_dispatchid + "' and siteid='CCYOSG'");
  121. }
  122. }
  123. }
  124. }
  125. dbConnect.runSqlUpdate(sqlList);
  126. //判断当前单据是否已实际发完货,如果发完,则生把订单变为关闭状态
  127. Rows orderRows = new Rows();
  128. if (dispatchids.size() > 0) {
  129. String sql = "select distinct t1.sa_orderid from sa_orderitems t1 inner join sa_dispatch_items t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.siteid='CCYOSG' and t2.sa_dispatchid in" + dispatchids.toJSONString();
  130. sql = sql.replace("[", "(").replace("]", ")");
  131. logger.info("sql:" + sql);
  132. orderRows = dbConnect.runSqlQuery(sql);
  133. }
  134. //总数量
  135. Rows totalRows = dbConnect.runSqlQuery("select count(1) count,sa_orderid from sa_orderitems where siteid='CCYOSG' group by sa_orderid");
  136. RowsMap totalRowsMap = totalRows.toRowsMap("sa_orderid");
  137. //已发完数量
  138. Rows deliRows = dbConnect.runSqlQuery("select count(1) count,sa_orderid from sa_orderitems t1 inner join (SELECT t1.sa_orderitemsid,t1.siteid,SUM(ifnull(t1.outwarehouseqty,0)) outwarehouseqty FROM sa_dispatch_items t1 WHERE t1.siteid='CCYOSG' group by t1.sa_orderitemsid,t1.siteid) t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid where t1.qty=t2.outwarehouseqty and t1.siteid='CCYOSG' group by sa_orderid");
  139. RowsMap deliRowsMap = deliRows.toRowsMap("sa_orderid");
  140. if (orderRows.size() > 0) {
  141. for (Row row : orderRows) {
  142. logger.info("订单id:" + row.getString("sa_orderid"));
  143. if (totalRowsMap.containsKey(row.getString("sa_orderid")) && deliRowsMap.containsKey(row.getString("sa_orderid"))) {
  144. if (totalRowsMap.get(row.getString("sa_orderid")).get(0).getLong("count") == deliRowsMap.get(row.getString("sa_orderid")).get(0).getLong("count")) {
  145. logger.info("订单关闭:update sa_order set status='关闭',closedate=current_time,closeby='admin' where sa_orderid=" + row.getLong("sa_orderid") + " and siteid='CCYOSG'");
  146. dbConnect.runSqlUpdate("update sa_order set status='关闭',closedate=current_time,closeby='admin' where sa_orderid=" + row.getLong("sa_orderid") + " and siteid='CCYOSG'");
  147. SQLFactory sqlFactory = new SQLFactory(this, "数据操作日志新增");
  148. sqlFactory.addParameter("sys_contrllogid", createTableID("sys_contrllog"));
  149. sqlFactory.addParameter("ownertable", "sa_order");
  150. sqlFactory.addParameter("ownerid", row.getLong("sa_orderid"));
  151. sqlFactory.addParameter("action", "自动关闭");
  152. sqlFactory.addParameter("remarks", "订单数量发完自动关闭");
  153. sqlFactory.addParameter("actionuserid", "1");
  154. sqlFactory.addParameter("actionby", "admin");
  155. sqlFactory.addParameter("siteid", "CCYOSG");
  156. dbConnect.runSqlUpdate(sqlFactory.getSQL());
  157. }
  158. }
  159. }
  160. }
  161. //自动关闭erp发货单接口不成功,则手动关闭e订货的发货单(但状态为关闭)
  162. ArrayList<String> uncloseSqlList = new ArrayList<>();
  163. if (unclosedispatchids.size() > 0) {
  164. for (Object object : unclosedispatchids) {
  165. Long sa_dispatchid = Long.valueOf(object.toString());
  166. String billno = "";
  167. Rows dispatchRows = dbConnect.runSqlQuery("select * from sa_dispatch where sa_dispatchid=" + sa_dispatchid + " and siteid='CCYOSG'");
  168. if (!dispatchRows.isEmpty()) {
  169. billno = dispatchRows.get(0).getString("billno");
  170. } else {
  171. logger.info("发货单" + sa_dispatchid + "不存在:");
  172. continue;
  173. }
  174. //手工关闭发货单
  175. JSONObject jsonobject = new JSONObject();
  176. JSONObject objectdetail = new JSONObject();
  177. jsonobject.put("access_token", "basicDrp");
  178. jsonobject.put("classname", "Sainvoice");
  179. jsonobject.put("method", "closeSainvoice");
  180. objectdetail.put("finvonum", billno);
  181. objectdetail.put("isManual", true);
  182. jsonobject.put("content", objectdetail);
  183. HashMap<String, String> map = new HashMap<>();
  184. map.put("content-Type", "application/json");
  185. String result = new WebRequest().doPost(jsonobject.toString(), "http://124.71.196.182:8101/rest/ws_v2/basicDrp", map);
  186. JSONObject resultobject = JSONObject.parseObject(result);
  187. if (resultobject.getString("errcode").equals("0")) {
  188. Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from sa_dispatch_items where sa_dispatchid=" + sa_dispatchid + ")");
  189. RowsMap rowsOrderDetailMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
  190. Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,sum(t1.outwarehouseqty) outwarehouseqty,t1.sa_orderitemsid,t1.siteid from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where ifnull(t1.isclose,0)=0 and t1.sa_dispatchid=" + sa_dispatchid + " group by t1.sa_orderitemsid,t1.siteid");
  191. if (!rowsDispatchDetailGroup.isEmpty()) {
  192. for (Row row : rowsDispatchDetailGroup) {
  193. logger.info("测试bug:" + "update sa_orderitems set undeliqty=" + rowsOrderDetailMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + ",deliedqty=" + rowsOrderDetailMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
  194. uncloseSqlList.add("update sa_orderitems set undeliqty=" + rowsOrderDetailMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + ",deliedqty=" + rowsOrderDetailMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
  195. }
  196. }
  197. // Rows orderRows =dbConnect.runSqlQuery("select distinct t1.sa_orderid from sa_orderitems t1 inner join sa_dispatch_items t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.siteid='" + siteid + "' and t2.sa_dispatchid=" + sa_dispatchid);
  198. // for (Row row:orderRows) {
  199. // sqlList.add("update sa_order set status='审核' where sa_orderid=" + row.getLong("sa_orderid") + " and siteid='" + siteid + "'");
  200. // }
  201. uncloseSqlList.add("update sa_dispatch set status='关闭',closedate=current_time,closeby='admin' where sa_dispatchid='" + sa_dispatchid + "' and siteid='CCYOSG'");
  202. SQLFactory sqlFactory = new SQLFactory(this, "数据操作日志新增");
  203. sqlFactory.addParameter("sys_contrllogid", createTableID("sys_contrllog"));
  204. sqlFactory.addParameter("ownertable", "sa_dispatch");
  205. sqlFactory.addParameter("ownerid", sa_dispatchid);
  206. sqlFactory.addParameter("action", "自动关闭");
  207. sqlFactory.addParameter("remarks", "发货单自动关闭成功(未全部发完,未发完数量退回订单并自动关闭)");
  208. sqlFactory.addParameter("actionuserid", "1");
  209. sqlFactory.addParameter("actionby", "admin");
  210. sqlFactory.addParameter("siteid", "CCYOSG");
  211. uncloseSqlList.add(sqlFactory.getSQL());
  212. } else {
  213. logger.info("发货单手工关闭错误:" + resultobject.getString("errmsg") + "发货单id:" + sa_dispatchid);
  214. Rows erpupdatelogRows = dbConnect.runSqlQuery(
  215. "select * from sys_erpupdatelog where ownertable='sa_dispatch' and type='手工关闭发货单' and ownerid=" + sa_dispatchid);
  216. SQLFactory sqlFactory;
  217. if (!erpupdatelogRows.isEmpty()) {
  218. sqlFactory = new SQLFactory(new UploadDataToERP_HY(), "erp上传日志更新");
  219. sqlFactory.addParameter("sys_erpupdatelogid", erpupdatelogRows.get(0).getLong("sys_erpupdatelogid"));
  220. } else {
  221. sqlFactory = new SQLFactory(new UploadDataToERP_HY(), "erp上传日志新增");
  222. sqlFactory.addParameter("sys_erpupdatelogid", createTableID("sys_erpupdatelog"));
  223. }
  224. sqlFactory.addParameter("siteid", "CCYOSG");
  225. sqlFactory.addParameter("userid", 1);
  226. sqlFactory.addParameter("username", "admin");
  227. sqlFactory.addParameter("ownerid", sa_dispatchid);
  228. sqlFactory.addParameter("ownertable", "sa_dispatch");
  229. sqlFactory.addParameter("type", "手工关闭发货单");
  230. sqlFactory.addParameter("request", object.toString());
  231. sqlFactory.addParameter("response", resultobject.toJSONString());
  232. sqlFactory.addParameter("erpbillno", "");
  233. sqlFactory.addParameter("errmsg", resultobject.getString("errmsg"));
  234. sqlFactory.addParameter("status", resultobject.getString("errcode"));
  235. uncloseSqlList.add(sqlFactory.getSQL());
  236. }
  237. }
  238. dbConnect.runSqlUpdate(uncloseSqlList);
  239. }
  240. for (Object o : dispatchids) {
  241. Rows rows1 = dbConnect.runSqlQuery("select t2.userid from sa_dispatch t1 inner join sys_enterprise_hr t2 on t1.siteid=t2.siteid and t1.sys_enterpriseid=t2.sys_enterpriseid where sa_dispatchid=" + o);
  242. HashMap<String, Object> dataextra = new HashMap<>();
  243. dataextra.put("extraUseridList", rows1.toArrayList("userid"));
  244. Executor.sendEml(this, "dispatch_close", (Long) o, "CCYOSG", dataextra);
  245. }
  246. }
  247. }
  248. }