DispatchAutoCloseService.java 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. package service;
  2. import beans.accountbalance.Accountbalance;
  3. import beans.accountbalance.CashbillEntity;
  4. import beans.datacontrllog.DataContrlLog;
  5. import beans.itemclass.ItemClass;
  6. import beans.order.Order;
  7. import beans.parameter.Parameter;
  8. import beans.remind.Remind;
  9. import beans.uploaderpdata.UploadDataToERP_HY;
  10. import com.alibaba.fastjson.JSONArray;
  11. import com.alibaba.fastjson.JSONObject;
  12. import common.Controller;
  13. import common.ServiceController;
  14. import common.YosException;
  15. import common.data.*;
  16. import common.parameter.properties;
  17. import org.apache.commons.lang.StringUtils;
  18. import org.apache.log4j.Logger;
  19. import restcontroller.webmanage.executorService.Executor;
  20. import restcontroller.webmanage.sale.order.OrderItemsHelper;
  21. import utility.ERPDocking;
  22. import utility.tools.WebRequest;
  23. import java.math.BigDecimal;
  24. import java.text.SimpleDateFormat;
  25. import java.util.ArrayList;
  26. import java.util.Date;
  27. import java.util.HashMap;
  28. import java.util.Properties;
  29. /**
  30. * 发货单自动关闭任务
  31. */
  32. public class DispatchAutoCloseService extends ServiceController {
  33. private static Logger logger = Logger.getLogger(DispatchAutoCloseService.class);
  34. String[] siteids = {"CCYOSG", "DLB"};
  35. @Override
  36. public void serviceRun() throws Exception {
  37. for (String siteid : siteids) {
  38. if (dbConnect.runSqlQuery("SELECT 1 from sys_site WHERE siteid='" + siteid + "'").isEmpty()) {
  39. continue;
  40. }
  41. Properties yosProperties = properties.getYosProperties();
  42. if (yosProperties.getProperty("system.runmode.debug").equalsIgnoreCase("false")) {
  43. Rows rows = dbConnect.runSqlQuery("select * from sa_dispatch where status='复核' and siteid='" + siteid + "'");
  44. 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='" + siteid + "'");
  45. RowsMap rowsMap = rowsdetail.toRowsMap("sa_dispatchid");
  46. RowsMap rowsMap1 = rowsdetail.toRowsMap("billno");
  47. ArrayList<String> sqlList = new ArrayList<>();
  48. ERPDocking erpDocking = new ERPDocking(siteid);
  49. JSONArray ErpSainvoices = erpDocking.queryErpSainvoices(10000, 1, new JSONArray(), "", "", "", false, false, true);
  50. JSONArray dispatchids = new JSONArray();
  51. JSONArray unclosedispatchids = new JSONArray();
  52. if (!ErpSainvoices.isEmpty()) {
  53. for (Object ErpSainvoice : ErpSainvoices) {
  54. JSONObject erpSainvoice = (JSONObject) ErpSainvoice;
  55. String billno = erpSainvoice.getString("finvonum");
  56. long sa_dispatchid = 0;
  57. if (rowsMap1.containsKey(billno)) {
  58. if (rowsMap1.get(billno).isNotEmpty()) {
  59. sa_dispatchid = rowsMap1.get(billno).get(0).getLong("sa_dispatchid");
  60. dispatchids.add(sa_dispatchid);
  61. } else {
  62. logger.info("发货单【" + billno + "】不存在:");
  63. continue;
  64. }
  65. } else {
  66. logger.info("发货单【" + billno + "】不存在:");
  67. continue;
  68. }
  69. JSONArray jsonArray = erpDocking.queryErpSainvoice(billno);
  70. JSONObject object = new JSONObject();
  71. JSONObject objectdetail = new JSONObject();
  72. object.put("access_token", "basicDrp");
  73. object.put("classname", "Sainvoice");
  74. object.put("method", "closeSainvoice");
  75. objectdetail.put("finvonum", billno);
  76. objectdetail.put("isManual", false);
  77. object.put("content", objectdetail);
  78. HashMap<String, String> map = new HashMap<>();
  79. map.put("content-Type", "application/json");
  80. String result = new WebRequest().doPost(object.toString(), erpDocking.getUrl(), map);
  81. JSONObject resultobject = JSONObject.parseObject(result);
  82. {
  83. Rows erpupdatelogRows = dbConnect.runSqlQuery(
  84. "select * from sys_erpupdatelog where ownertable='sa_dispatch' and type='关闭发货单' and ownerid=" + sa_dispatchid);
  85. SQLFactory sqlFactory;
  86. if (!erpupdatelogRows.isEmpty()) {
  87. sqlFactory = new SQLFactory(new UploadDataToERP_HY(), "erp上传日志更新");
  88. sqlFactory.addParameter("sys_erpupdatelogid", erpupdatelogRows.get(0).getLong("sys_erpupdatelogid"));
  89. } else {
  90. sqlFactory = new SQLFactory(new UploadDataToERP_HY(), "erp上传日志新增");
  91. sqlFactory.addParameter("sys_erpupdatelogid", createTableID("sys_erpupdatelog"));
  92. }
  93. sqlFactory.addParameter("siteid", siteid);
  94. sqlFactory.addParameter("userid", 1);
  95. sqlFactory.addParameter("username", "admin");
  96. sqlFactory.addParameter("ownerid", sa_dispatchid);
  97. sqlFactory.addParameter("ownertable", "sa_dispatch");
  98. sqlFactory.addParameter("type", "关闭发货单");
  99. sqlFactory.addParameter("request", object.toString());
  100. sqlFactory.addParameter("response", resultobject.toJSONString());
  101. if ("0".equals(resultobject.getString("errcode"))) {
  102. sqlFactory.addParameter("erpbillno", billno);
  103. sqlFactory.addParameter("errmsg", "");
  104. } else {
  105. sqlFactory.addParameter("erpbillno", "");
  106. sqlFactory.addParameter("errmsg", resultobject.getString("errmsg"));
  107. }
  108. sqlFactory.addParameter("status", resultobject.getString("errcode"));
  109. sqlList.add(sqlFactory.getSQL());
  110. }
  111. if (resultobject.getString("errcode").equals("0")) {
  112. sqlList.add("update sa_dispatch set status='关闭',closedate=current_time,closeby='admin' where sa_dispatchid='" + sa_dispatchid + "' and siteid='" + siteid + "'");
  113. SQLFactory sqlFactory = new SQLFactory(this, "数据操作日志新增");
  114. sqlFactory.addParameter("sys_contrllogid", createTableID("sys_contrllog"));
  115. sqlFactory.addParameter("ownertable", "sa_dispatch");
  116. sqlFactory.addParameter("ownerid", sa_dispatchid);
  117. sqlFactory.addParameter("action", "自动关闭");
  118. sqlFactory.addParameter("remarks", "发货单自动关闭成功");
  119. sqlFactory.addParameter("actionuserid", "1");
  120. sqlFactory.addParameter("actionby", "admin");
  121. sqlFactory.addParameter("siteid", siteid);
  122. sqlList.add(sqlFactory.getSQL());
  123. } else {
  124. unclosedispatchids.add(sa_dispatchid);
  125. logger.info("发货单自动关闭错误:" + resultobject.getString("errmsg") + "发货单id:" + sa_dispatchid);
  126. }
  127. if (!jsonArray.isEmpty()) {
  128. for (Object object1 : jsonArray) {
  129. JSONObject jsonObject = (JSONObject) object1;
  130. 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='" + siteid + "'");
  131. }
  132. }
  133. }
  134. }
  135. dbConnect.runSqlUpdate(sqlList);
  136. //判断当前单据是否已实际发完货,如果发完,则生把订单变为关闭状态
  137. Rows orderRows = new Rows();
  138. if (dispatchids.size() > 0) {
  139. 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='" + siteid + "' and t2.sa_dispatchid in" + dispatchids.toJSONString();
  140. sql = sql.replace("[", "(").replace("]", ")");
  141. logger.info("sql:" + sql);
  142. orderRows = dbConnect.runSqlQuery(sql);
  143. }
  144. //总数量
  145. Rows totalRows = dbConnect.runSqlQuery("select count(1) count,sa_orderid from sa_orderitems where siteid='" + siteid + "' group by sa_orderid");
  146. RowsMap totalRowsMap = totalRows.toRowsMap("sa_orderid");
  147. //已发完数量
  148. 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='" + siteid + "' 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='" + siteid + "' group by sa_orderid");
  149. RowsMap deliRowsMap = deliRows.toRowsMap("sa_orderid");
  150. if (orderRows.size() > 0) {
  151. for (Row row : orderRows) {
  152. logger.info("订单id:" + row.getString("sa_orderid"));
  153. if (totalRowsMap.containsKey(row.getString("sa_orderid")) && deliRowsMap.containsKey(row.getString("sa_orderid"))) {
  154. if (totalRowsMap.get(row.getString("sa_orderid")).get(0).getLong("count") == deliRowsMap.get(row.getString("sa_orderid")).get(0).getLong("count")) {
  155. logger.info("订单关闭:update sa_order set status='关闭',closedate=current_time,closeby='admin' where sa_orderid=" + row.getLong("sa_orderid") + " and siteid='" + siteid + "'");
  156. dbConnect.runSqlUpdate("update sa_order set status='关闭',closedate=current_time,closeby='admin' where sa_orderid=" + row.getLong("sa_orderid") + " and siteid='" + siteid + "'");
  157. SQLFactory sqlFactory = new SQLFactory(this, "数据操作日志新增");
  158. sqlFactory.addParameter("sys_contrllogid", createTableID("sys_contrllog"));
  159. sqlFactory.addParameter("ownertable", "sa_order");
  160. sqlFactory.addParameter("ownerid", row.getLong("sa_orderid"));
  161. sqlFactory.addParameter("action", "自动关闭");
  162. sqlFactory.addParameter("remarks", "订单数量发完自动关闭");
  163. sqlFactory.addParameter("actionuserid", "1");
  164. sqlFactory.addParameter("actionby", "admin");
  165. sqlFactory.addParameter("siteid", siteid);
  166. dbConnect.runSqlUpdate(sqlFactory.getSQL());
  167. //是否自动返利结算
  168. executeAutoRebate(row.getLong("sa_orderid"), siteid);
  169. }
  170. }
  171. }
  172. }
  173. if(siteid.equalsIgnoreCase("CCYOSG")){
  174. //自动关闭erp发货单接口不成功,则手动关闭e订货的发货单(但状态为关闭)
  175. ArrayList<String> uncloseSqlList = new ArrayList<>();
  176. if (unclosedispatchids.size() > 0) {
  177. for (Object object : unclosedispatchids) {
  178. Long sa_dispatchid = Long.valueOf(object.toString());
  179. String billno = "";
  180. Rows dispatchRows = dbConnect.runSqlQuery("select * from sa_dispatch where sa_dispatchid=" + sa_dispatchid + " and siteid='" + siteid + "'");
  181. if (!dispatchRows.isEmpty()) {
  182. billno = dispatchRows.get(0).getString("billno");
  183. } else {
  184. logger.info("发货单" + sa_dispatchid + "不存在:");
  185. continue;
  186. }
  187. //手工关闭发货单
  188. JSONObject jsonobject = new JSONObject();
  189. JSONObject objectdetail = new JSONObject();
  190. jsonobject.put("access_token", "basicDrp");
  191. jsonobject.put("classname", "Sainvoice");
  192. jsonobject.put("method", "closeSainvoice");
  193. objectdetail.put("finvonum", billno);
  194. objectdetail.put("isManual", true);
  195. jsonobject.put("content", objectdetail);
  196. HashMap<String, String> map = new HashMap<>();
  197. map.put("content-Type", "application/json");
  198. String result = new WebRequest().doPost(jsonobject.toString(), erpDocking.getUrl(), map);
  199. JSONObject resultobject = JSONObject.parseObject(result);
  200. if (resultobject.getString("errcode").equals("0")) {
  201. 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 + ")");
  202. RowsMap rowsOrderDetailMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
  203. 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");
  204. if (!rowsDispatchDetailGroup.isEmpty()) {
  205. for (Row row : rowsDispatchDetailGroup) {
  206. 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"));
  207. 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"));
  208. }
  209. }
  210. // 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);
  211. // for (Row row:orderRows) {
  212. // sqlList.add("update sa_order set status='审核' where sa_orderid=" + row.getLong("sa_orderid") + " and siteid='" + siteid + "'");
  213. // }
  214. uncloseSqlList.add("update sa_dispatch set status='关闭',closedate=current_time,closeby='admin' where sa_dispatchid='" + sa_dispatchid + "' and siteid='" + siteid + "'");
  215. SQLFactory sqlFactory = new SQLFactory(this, "数据操作日志新增");
  216. sqlFactory.addParameter("sys_contrllogid", createTableID("sys_contrllog"));
  217. sqlFactory.addParameter("ownertable", "sa_dispatch");
  218. sqlFactory.addParameter("ownerid", sa_dispatchid);
  219. sqlFactory.addParameter("action", "自动关闭");
  220. sqlFactory.addParameter("remarks", "发货单自动关闭成功(未全部发完,未发完数量退回订单并自动关闭)");
  221. sqlFactory.addParameter("actionuserid", "1");
  222. sqlFactory.addParameter("actionby", "admin");
  223. sqlFactory.addParameter("siteid", siteid);
  224. uncloseSqlList.add(sqlFactory.getSQL());
  225. } else {
  226. logger.info("发货单手工关闭错误:" + resultobject.getString("errmsg") + "发货单id:" + sa_dispatchid);
  227. Rows erpupdatelogRows = dbConnect.runSqlQuery(
  228. "select * from sys_erpupdatelog where ownertable='sa_dispatch' and type='手工关闭发货单' and ownerid=" + sa_dispatchid);
  229. SQLFactory sqlFactory;
  230. if (!erpupdatelogRows.isEmpty()) {
  231. sqlFactory = new SQLFactory(new UploadDataToERP_HY(), "erp上传日志更新");
  232. sqlFactory.addParameter("sys_erpupdatelogid", erpupdatelogRows.get(0).getLong("sys_erpupdatelogid"));
  233. } else {
  234. sqlFactory = new SQLFactory(new UploadDataToERP_HY(), "erp上传日志新增");
  235. sqlFactory.addParameter("sys_erpupdatelogid", createTableID("sys_erpupdatelog"));
  236. }
  237. sqlFactory.addParameter("siteid", siteid);
  238. sqlFactory.addParameter("userid", 1);
  239. sqlFactory.addParameter("username", "admin");
  240. sqlFactory.addParameter("ownerid", sa_dispatchid);
  241. sqlFactory.addParameter("ownertable", "sa_dispatch");
  242. sqlFactory.addParameter("type", "手工关闭发货单");
  243. sqlFactory.addParameter("request", object.toString());
  244. sqlFactory.addParameter("response", resultobject.toJSONString());
  245. sqlFactory.addParameter("erpbillno", "");
  246. sqlFactory.addParameter("errmsg", resultobject.getString("errmsg"));
  247. sqlFactory.addParameter("status", resultobject.getString("errcode"));
  248. uncloseSqlList.add(sqlFactory.getSQL());
  249. }
  250. }
  251. dbConnect.runSqlUpdate(uncloseSqlList);
  252. }
  253. }
  254. for (Object o : dispatchids) {
  255. 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);
  256. HashMap<String, Object> dataextra = new HashMap<>();
  257. dataextra.put("extraUseridList", rows1.toArrayList("userid"));
  258. Executor.sendEml(this, "dispatch_close", (Long) o, siteid, dataextra);
  259. }
  260. }
  261. }
  262. }
  263. public void executeAutoRebate(Long sa_orderid, String siteid) throws YosException {
  264. Rows orderRows = dbConnect.runSqlQuery("SELECT * from sa_order WHERE sa_orderid = " + sa_orderid + " and siteid = '" + siteid + "'");
  265. if (orderRows.get(0).getString("type").equals("促销订单")) {
  266. return;
  267. }
  268. Long sys_enterpriseid = orderRows.get(0).getLong("sys_enterpriseid");
  269. //是否自动返利结算
  270. String isrebate = Parameter.get(siteid, "isrebate");
  271. if (!isrebate.equals("1")) {
  272. return;
  273. }
  274. //查询有效期内,余额大于0 的经销商装修补贴返利
  275. String sql = "select * from sa_agentdecorationtrebate WHERE sys_enterpriseid=" + sys_enterpriseid + " and siteid='" + siteid + "' and begindate <= current_date and enddate>=current_date and balance>0";
  276. Rows agentdecorationtrebatRows = dbConnect.runSqlQuery(sql);
  277. if (agentdecorationtrebatRows.isEmpty()) {
  278. return;
  279. }
  280. //查询装修返利方案
  281. Rows rebateschemeRows = dbConnect.runSqlQuery("select * from sa_rebatescheme where siteid='" + siteid + "'");
  282. if (rebateschemeRows.isEmpty()) {
  283. return;
  284. }
  285. ArrayList<String> sqlList = new ArrayList<>();
  286. Long sa_rebateschemeid = rebateschemeRows.get(0).getLong("sa_rebateschemeid");
  287. Long sa_accountclassid = rebateschemeRows.get(0).getLong("sa_accountclassid");
  288. Rows rebatecategorys = dbConnect.runSqlQuery("select itemclassid from sa_rebatecategory where siteid='" + siteid + "' and sa_rebateschemeid=" + sa_rebateschemeid);
  289. Rows rebateunproducts = dbConnect.runSqlQuery("select itemid from sa_rebateunproducts where siteid='" + siteid + "' and sa_rebateschemeid=" + sa_rebateschemeid);
  290. Rows rebateunjoinproducts = dbConnect.runSqlQuery("select itemid from sa_rebateunjoinproducts where siteid='" + siteid + "' and sa_rebateschemeid=" + sa_rebateschemeid);
  291. ArrayList<Long> itemclsids = rebatecategorys.toArrayList("itemclassid", new ArrayList<Long>());
  292. itemclsids.addAll(ItemClass.getSubItemClassIds(dbConnect, siteid, itemclsids));
  293. itemclsids.add(0l);
  294. ArrayList<Long> itemids = rebateunproducts.toArrayList("itemid", new ArrayList<Long>());
  295. itemids.add(0l);
  296. ArrayList<Long> joinitemids = rebateunjoinproducts.toArrayList("itemid", new ArrayList<Long>());
  297. String where =" 1=1 ";
  298. if(!joinitemids.isEmpty()){
  299. where=where+" and t1.itemid in"+joinitemids;
  300. }
  301. SQLFactory sqlFactory = new SQLFactory(new DispatchAutoCloseService(), "查询返利数据");
  302. sqlFactory.addParameter("sa_orderid", sa_orderid);
  303. sqlFactory.addParameter("siteid", siteid);
  304. sqlFactory.addParameter("siteid", siteid);
  305. sqlFactory.addParameter_in("itemclassid", itemclsids);
  306. sqlFactory.addParameter_in("itemid", itemids);
  307. sqlFactory.addParameter_SQL("where", where);
  308. Rows rows = dbConnect.runSqlQuery(sqlFactory);
  309. BigDecimal saorderamount = BigDecimal.ZERO;
  310. for (Row row : rows) {
  311. saorderamount = saorderamount.add(row.getBigDecimal("amount"));
  312. }
  313. //查询定制费用
  314. sql = "SELECT ifnull(sum(costamount),0) costamount from sa_order_cost WHERE sa_orderid=" + sa_orderid;
  315. BigDecimal costamount = dbConnect.runSqlQuery(0, sql).getBigDecimal("costamount");
  316. saorderamount = saorderamount.add(costamount);
  317. BigDecimal balance = agentdecorationtrebatRows.get(0).getBigDecimal("balance");
  318. BigDecimal brate = agentdecorationtrebatRows.get(0).getBigDecimal("brate");
  319. BigDecimal approvedamount = BigDecimal.ZERO;
  320. if (balance.compareTo(saorderamount.multiply(brate)) >= 0) {
  321. approvedamount = saorderamount.multiply(brate);
  322. } else if (balance.compareTo(BigDecimal.ZERO) > 0) {
  323. approvedamount = balance;
  324. }
  325. System.out.println(saorderamount);
  326. System.out.println(approvedamount);
  327. if (approvedamount.compareTo(BigDecimal.ZERO) > 0) {
  328. ArrayList<Long> sa_orderitemsids = rows.toArrayList("sa_orderitemsid", new ArrayList<>());
  329. sa_orderitemsids.add(0l);
  330. //更新订单明细的装修返利标志
  331. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(dbConnect, "sa_orderitems");
  332. updateSQL.setWhere("sa_orderitemsid", sa_orderitemsids);
  333. updateSQL.setValue("decorationrebateflag", "1");
  334. sqlList.add(updateSQL.getSQL());
  335. //更新sa_agentdecorationtrebate
  336. updateSQL = SQLFactory.createUpdateSQL(dbConnect, "sa_agentdecorationtrebate");
  337. updateSQL.setWhere("sys_enterpriseid", sys_enterpriseid);
  338. updateSQL.setSiteid(siteid);
  339. updateSQL.setValue("balance", balance.subtract(approvedamount));
  340. sqlList.add(updateSQL.getSQL());
  341. //生成收入凭证
  342. CashbillEntity entity = new CashbillEntity();
  343. entity.setAmount(approvedamount);
  344. entity.setOwnerid(sa_orderid);
  345. entity.setOwnertable("sa_order");
  346. entity.setSource("订单自动返利");
  347. entity.setType("公司支持");
  348. entity.setTypemx("装修返利");
  349. entity.setSourcenote(orderRows.get(0).getString("sonum"));
  350. entity.setRemarks(orderRows.get(0).getString("sonum") + "订单自动返利");
  351. JSONObject cashbillIncome = createCashbillIncome(siteid, sys_enterpriseid, sa_accountclassid, entity, true, true);
  352. sqlList.addAll(cashbillIncome.getJSONArray("sqlList").toJavaList(String.class));
  353. System.err.println(sqlList);
  354. dbConnect.runSqlUpdate(sqlList);
  355. }
  356. }
  357. /**
  358. * 创建收入凭证(返回SQL)
  359. *
  360. * @param siteid
  361. * @param sys_enterpriseid 企业id
  362. * @param sa_accountclassid 账户id
  363. * @param cashbillEntity 收支凭证实体
  364. * @param ischeck 是否审核
  365. * @return
  366. * @throws YosException
  367. */
  368. public JSONObject createCashbillIncome(String siteid, long sys_enterpriseid, long sa_accountclassid, CashbillEntity cashbillEntity, boolean ischeck, boolean isupdatek3flag) throws YosException {
  369. long userid = 1;
  370. String username = "admin";
  371. ArrayList<String> sqlList = new ArrayList<>();
  372. long sa_cashbillid = createTableID("sa_cashbill");
  373. String billcode = createBillCode(siteid, "cashbill");
  374. SQLFactory sqlFactory = new SQLFactory(new Accountbalance(), "收支凭证新增");
  375. sqlFactory.addParameter("billno", billcode);
  376. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  377. sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  378. sqlFactory.addParameter("type", 1);
  379. sqlFactory.addParameter("siteid", siteid);
  380. sqlFactory.addParameter("remarks", cashbillEntity.getRemarks());
  381. sqlFactory.addParameter("amount", cashbillEntity.getAmount());
  382. sqlFactory.addParameter("sa_cashbillid", sa_cashbillid);
  383. sqlFactory.addParameter("userid", userid);
  384. sqlFactory.addParameter("username", username);
  385. sqlFactory.addParameter("ownertable", cashbillEntity.getOwnertable());
  386. sqlFactory.addParameter("ownerid", cashbillEntity.getOwnerid());
  387. sqlFactory.addParameter("source", cashbillEntity.getSource());
  388. sqlFactory.addParameter("sourcenote", cashbillEntity.getSourcenote());
  389. sqlFactory.addParameter("sa_cashbillid_rebate", "null");
  390. sqlFactory.addParameter("period",new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
  391. sqlFactory.addParameter("class", cashbillEntity.getType());
  392. sqlFactory.addParameter("subclass", cashbillEntity.getTypemx());
  393. if (ischeck) {
  394. BigDecimal balance = BigDecimal.ZERO; //当前账户余额
  395. sqlFactory.addParameter("status", "审核");
  396. if (isupdatek3flag) {
  397. sqlFactory.addParameter("updatek3flag", "0");
  398. } else {
  399. sqlFactory.addParameter("updatek3flag", "");
  400. }
  401. sqlFactory.addParameter("checkby", username);
  402. sqlFactory.addParameter_SQL("checkdate", "CURRENT_TIME");
  403. // 审核逻辑判断
  404. Rows rowsaccountbalance = dbConnect.runSqlQuery(
  405. "select sa_accountbalanceid,balance,creditquota from sa_accountbalance where sys_enterpriseid ='"
  406. + sys_enterpriseid + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='"
  407. + siteid + "'");
  408. if (rowsaccountbalance.isEmpty()) {
  409. SQLFactory accountbalanceaddSqlFactory = new SQLFactory(new Accountbalance(), "营销账户余额新增");
  410. accountbalanceaddSqlFactory.addParameter("sa_accountbalanceid",
  411. createTableID("sa_accountbalance"));
  412. accountbalanceaddSqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  413. accountbalanceaddSqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  414. accountbalanceaddSqlFactory.addParameter("siteid", siteid);
  415. accountbalanceaddSqlFactory.addParameter("balance", cashbillEntity.getAmount());
  416. accountbalanceaddSqlFactory.addParameter("userid", userid);
  417. accountbalanceaddSqlFactory.addParameter("username", username);
  418. balance = cashbillEntity.getAmount();
  419. sqlList.add(accountbalanceaddSqlFactory.getSQL());
  420. } else {
  421. BigDecimal newbalance = cashbillEntity.getAmount().add(rowsaccountbalance.get(0).getBigDecimal("balance"));
  422. sqlList.add("update sa_accountbalance set balance='" + newbalance
  423. + "',changedate=CURRENT_TIME,changeby ='" + username + "',changeuserid='"
  424. + userid + "' where sys_enterpriseid ='" + sys_enterpriseid
  425. + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='" + siteid
  426. + "'");
  427. balance = newbalance;
  428. }
  429. sqlFactory.addParameter("balance", balance);
  430. Rows accountclassrows = dbConnect.runSqlQuery("select * from sa_accountclass where siteid='" + siteid + "' and sa_accountclassid=" + sa_accountclassid);
  431. if (!accountclassrows.isEmpty()) {
  432. String content = "您的" + accountclassrows.get(0).getString("accountname") + "已收入【" + cashbillEntity.getAmount() + "】元";
  433. new Accountbalance().sendMsg(siteid, content, cashbillEntity.getOwnerid(), sys_enterpriseid);
  434. }
  435. } else {
  436. sqlFactory.addParameter("status", "新建");
  437. sqlFactory.addParameter("checkby", "null");
  438. sqlFactory.addParameter("checkdate", "null");
  439. sqlFactory.addParameter("updatek3flag", "");
  440. sqlFactory.addParameter("balance", 0);
  441. }
  442. sqlList.add(sqlFactory.getSQL());
  443. JSONObject jsonObject = new JSONObject();
  444. jsonObject.put("sa_cashbillid", sa_cashbillid);
  445. jsonObject.put("sqlList", sqlList);
  446. return jsonObject;
  447. }
  448. }