LSALogistics.java 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606
  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 utility.WzwlDocking;
  19. import java.io.UnsupportedEncodingException;
  20. import java.math.BigDecimal;
  21. import java.security.NoSuchAlgorithmException;
  22. import java.util.ArrayList;
  23. import static restcontroller.webmanage.sale.logistics.LSALogisticsHelper.*;
  24. /**
  25. * 物流单(LSA)
  26. */
  27. public class LSALogistics extends Controller {
  28. /**
  29. * 构造函数
  30. *
  31. * @param content
  32. */
  33. public LSALogistics(JSONObject content) throws YosException {
  34. super(content);
  35. }
  36. @API(title = "新增或更新", apiversion = R.ID20230719165802.v1.class)
  37. @CACHEING_CLEAN(apiClass = {LSALogistics.class})
  38. public String insertOrUpdate() throws YosException, UnsupportedEncodingException, NoSuchAlgorithmException {
  39. //物流单ID
  40. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  41. //经销商编号(选择经销商)
  42. Long sys_enterpriseid = content.getLong("sys_enterpriseid");
  43. //出入库表货品明细
  44. JSONArray items = content.getJSONArray("items");
  45. String billdate = content.getStringValue("billdate");
  46. if(billdate.equals("")){
  47. return getErrReturnObject().setErrMsg("单据日期不能为空").toString();
  48. }
  49. ArrayList<String> sqlList = new ArrayList<>();
  50. if (sys_enterpriseid <= 0 || isEnterpriseEmpty(this)) {
  51. return getErrReturnObject().setErrMsg("未选择企业").toString();
  52. }
  53. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  54. if (sa_logisticsid <= 0 || rows.isEmpty()) {
  55. sa_logisticsid = createTableID("sa_logistics");
  56. sqlList.add(insert(this, sa_logisticsid).getSQL());
  57. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "新增", "物流单-新增:" + sa_logisticsid).getSQL());
  58. content.put("sa_logisticsid", sa_logisticsid);
  59. } else {
  60. if (!rows.get(0).getString("status").equals("新建")) {
  61. return getErrReturnObject().setErrMsg("该物流单为非新建状态,无法更改").toString();
  62. }
  63. sqlList.add(update(this, sa_logisticsid).getSQL());
  64. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "更新", "物流单-更新:" + sa_logisticsid).getSQL());
  65. }
  66. //更新送货列表
  67. ArrayList<Long> st_stockbill_itemsids = new ArrayList<>();
  68. for (Object obj : items) {
  69. JSONObject object = (JSONObject) obj;
  70. Long st_stockbill_itemsid = object.getLongValue("st_stockbill_itemsid");
  71. BigDecimal qty = object.getBigDecimalValue("qty");
  72. if (isStockbillItemsEmpty(this, st_stockbill_itemsid)) {
  73. System.err.println("出库单不存在");
  74. return getErrReturnObject().setErrMsg("出库单不存在").toString();
  75. }
  76. if (isOut(this, st_stockbill_itemsid, qty)) {
  77. return getErrReturnObject().setErrMsg("超出最大可送货数量").toString();
  78. }
  79. if (isLogisticsItemEmpty(this, st_stockbill_itemsid)) {
  80. sqlList.add(insertLogisticsItem(this, object).getSQL());
  81. } else {
  82. sqlList.add(updateLogisticsItem(this, object).getSQL());
  83. }
  84. st_stockbill_itemsids.add(st_stockbill_itemsid);
  85. }
  86. dbConnect.runSqlUpdate(sqlList);
  87. //删除送货
  88. if (st_stockbill_itemsids.size() > 0) {
  89. deleteLogisticsItem(this, st_stockbill_itemsids);
  90. }
  91. return detail();
  92. }
  93. @API(title = "添加送货明细", apiversion = R.ID20230720141602.v1.class)
  94. @CACHEING_CLEAN(apiClass = {LSALogistics.class})
  95. public String addMX() throws YosException {
  96. //物流单ID
  97. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  98. //出入库表货品明细
  99. JSONArray items = content.getJSONArray("items");
  100. ArrayList<String> sqlList = new ArrayList<>();
  101. for (Object obj : items) {
  102. JSONObject object = (JSONObject) obj;
  103. Long st_stockbill_itemsid = object.getLongValue("st_stockbill_itemsid");
  104. BigDecimal qty = object.getBigDecimalValue("qty");
  105. if (isStockbillItemsEmpty(this, st_stockbill_itemsid)) {
  106. System.err.println("出库单不存在");
  107. return getErrReturnObject().setErrMsg("出库单不存在").toString();
  108. }
  109. if (isOut(this, st_stockbill_itemsid, qty)) {
  110. return getErrReturnObject().setErrMsg("超出最大可送货数量").toString();
  111. }
  112. if (isLogisticsItemEmpty(this, st_stockbill_itemsid)) {
  113. sqlList.add(insertLogisticsItem(this, object).getSQL());
  114. } else {
  115. sqlList.add(updateLogisticsItem(this, object).getSQL());
  116. }
  117. }
  118. dbConnect.runSqlUpdate(sqlList);
  119. return getSucReturnObject().toString();
  120. }
  121. @API(title = "删除送货明细", apiversion = R.ID20230720141902.v1.class)
  122. @CACHEING_CLEAN(apiClass = {LSALogistics.class})
  123. public String delete() throws YosException {
  124. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  125. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  126. if (rows.isEmpty()) {
  127. return getErrReturnObject().setErrMsg("数据不存在").toString();
  128. }
  129. if (!"新建".equals(rows.get(0).getString("status"))) {
  130. return getErrReturnObject().setErrMsg("非新建状态无法删除").toString();
  131. }
  132. JSONArray sa_logistics_itemsids = content.getJSONArray("sa_logistics_itemsids");
  133. String sql = "DELETE from sa_logistics_items where sa_logistics_itemsid in " + sa_logistics_itemsids + " and siteid='" + siteid + "'";
  134. sql = sql.replace("[", "(").replace("]", ")");
  135. dbConnect.runSqlUpdate(sql);
  136. return getSucReturnObject().toString();
  137. }
  138. @API(title = "送货明细列表", apiversion = R.ID20230720141702.v1.class)
  139. @CACHEING
  140. public String selectMXList() throws YosException {
  141. //物流单ID
  142. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  143. pageSorting = pageSorting.equals("''") ? "rowno" : pageSorting;
  144. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics_items");
  145. querySQL.setTableAlias("t1");
  146. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill_items", "t2", "t2.st_stockbill_itemsid=t1.st_stockbill_itemsid and t2.siteid=t1.siteid",
  147. "rowno", "itemid", "unit", "price", "amount", "remarks");
  148. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill", "t3", "t3.st_stockbillid =t2.st_stockbillid and t3.siteid=t2.siteid",
  149. "billno");
  150. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t4", "t4.itemid =t2.itemid and t4.siteid=t2.siteid",
  151. "spec","itemno", "itemname", "model");
  152. querySQL.addJoinTable(JOINTYPE.left, "plm_unit", "t5", "t4.unitid = t5.unitid and t4.siteid=t5.siteid",
  153. "unitname");
  154. querySQL.addJoinTable(JOINTYPE.left, "sa_dispatch_items", "t6", "t6.sa_dispatch_itemsid=t2.sa_dispatch_itemsid and t6.siteid=t2.siteid");
  155. querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t7", "t6.sa_orderitemsid=t7.sa_orderitemsid and t6.siteid=t7.siteid");
  156. querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t8", "t8.sa_orderid=t7.sa_orderid and t8.siteid=t7.siteid","sonum");
  157. querySQL.setWhere("t1.sa_logisticsid=" + sa_logisticsid);
  158. querySQL.setWhere("t1.siteid='" + siteid + "'");
  159. querySQL.setPage(pageSize, pageNumber).setOrderBy(pageSorting);
  160. Rows rows = querySQL.query();
  161. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  162. // 封面cover
  163. RowsMap coverRowsMap = getAttachmentUrl("plm_item", ids, "cover");
  164. for (Row row : rows) {
  165. Rows coverRows = coverRowsMap.get(row.getString("itemid"));
  166. if (coverRows.isEmpty()) {
  167. row.put("cover", "");
  168. } else {
  169. row.put("cover", coverRows.get(0).getString("url"));
  170. }
  171. }
  172. return getSucReturnObject().setData(rows).toString();
  173. }
  174. @API(title = "选择送货明细列表", apiversion = R.ID20230720141802.v1.class)
  175. public String selectChooseMXList() throws YosException {
  176. StringBuffer where = new StringBuffer(" 1=1 ");
  177. if (content.containsKey("where")) {
  178. JSONObject whereObject = content.getJSONObject("where");
  179. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  180. where.append("and (t3.itemname like '%").append(whereObject.getString("condition")).append("%'");
  181. where.append("or t2.billno like '%").append(whereObject.getString("condition")).append("%'");
  182. where.append("or t3.itemno like '%").append(whereObject.getString("condition")).append("%'");
  183. where.append("or t3.spec like '%").append(whereObject.getString("condition")).append("%'");
  184. where.append("or t3.model like '%").append(whereObject.getString("condition")).append("%'");
  185. where.append("or t1.remarks like '%").append(whereObject.getString("condition")).append("%'");
  186. where.append("or t6.sonum like '%").append(whereObject.getString("condition")).append("%')");
  187. }
  188. }
  189. //物流单ID
  190. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  191. Long sys_enterpriseid = content.getLongValue("sys_enterpriseid");
  192. pageSorting = pageSorting.equals("''") ? "t1.rowno" : pageSorting;
  193. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill_items",
  194. "st_stockbill_itemsid","unit","amount","remarks");
  195. querySQL.setTableAlias("t1");
  196. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill", "t2", "t2.st_stockbillid =t1.st_stockbillid and t2.siteid=t1.siteid",
  197. "billno");
  198. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid =t1.itemid and t3.siteid=t1.siteid",
  199. "spec","itemno", "itemname", "model");
  200. querySQL.addJoinTable(JOINTYPE.left, "sa_dispatch_items", "t4", "t4.sa_dispatch_itemsid = t1.sa_dispatch_itemsid AND t4.siteid = t1.siteid");
  201. querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t5", "t5.sa_orderitemsid=t4.sa_orderitemsid and t5.siteid=t4.siteid");
  202. querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t6", "t6.sa_orderid=t5.sa_orderid and t6.siteid=t5.siteid","sonum");
  203. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t7", "t7.sys_enterpriseid=t2.sys_enterpriseid and t7.siteid=t2.siteid","agentnum");
  204. querySQL.addQueryFields("price","t1.amount/t1.qty");
  205. querySQL.addQueryFields("qty","t1.qty-ifnull(t1.transportqty,0)");
  206. querySQL.setWhere("t1.siteid='" + siteid + "'");
  207. querySQL.setWhere("t2.sys_enterpriseid=" + sys_enterpriseid);
  208. querySQL.setWhere("t2.status='审核'");
  209. querySQL.setWhere("ifnull(t1.transportqty,0)<t1.qty");
  210. querySQL.setWhere("NOT EXISTS(SELECT 1 from sa_logistics_items WHERE sa_logisticsid=" + sa_logisticsid + " and st_stockbill_itemsid=t1.st_stockbill_itemsid)");
  211. 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='审核' AND t2.siteid = '"+siteid+"' 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)");
  212. querySQL.setWhere(where.toString());
  213. querySQL.setPage(pageSize, pageNumber).setOrderBy(pageSorting);
  214. System.out.println(querySQL.getSQL());
  215. Rows rows = querySQL.query();
  216. return getSucReturnObject().setData(rows).toString();
  217. }
  218. @API(title = "物流单详情", apiversion = R.ID20230720142002.v1.class)
  219. @CACHEING
  220. public String detail() throws YosException, UnsupportedEncodingException, NoSuchAlgorithmException {
  221. //物流单ID
  222. Long sa_logisticsid = content.getLongValue("sa_logisticsid");
  223. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics");
  224. querySQL.setTableAlias("t1");
  225. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t2.sys_enterpriseid=t1.sys_enterpriseid and t2.siteid=t1.siteid",
  226. "t2.enterprisename");
  227. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t3.sys_enterpriseid=t2.sys_enterpriseid and t3.siteid=t2.siteid",
  228. "t3.agentnum");
  229. querySQL.addJoinTable(JOINTYPE.left, "sa_logiscomp", "t4", "t4.sa_logiscompid=t1.sa_logiscompid and t4.siteid=t1.siteid",
  230. "t4.kd100id","interfacetype");
  231. querySQL.addQueryFields("logiscomp_name", "t4.name");
  232. querySQL.addQueryFields("logisticsamount1","if(ifnull(t1.logisticsamount,'')='',0,t1.logisticsamount)");
  233. querySQL.setWhere("t1.sa_logisticsid=" + sa_logisticsid);
  234. querySQL.setWhere("t1.siteid='" + siteid + "'");
  235. Rows rows = querySQL.query();
  236. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  237. row.putIfAbsent("billdate", "");
  238. row.putIfAbsent("checkdate", "");
  239. row.putIfAbsent("receivedate", "");
  240. //对接万中物流
  241. // if(siteid.equalsIgnoreCase("lsa")){
  242. WzwlDocking wzwlDocking =new WzwlDocking(siteid);
  243. if(!row.getString("logisticsstatus").equals("签收") && !row.get("status").equals("新建")){
  244. JSONObject jsonObject = wzwlDocking.queryWzwlOrderAmountExtendList(row.getString("billno"));
  245. System.out.println(jsonObject.getStringValue("success"));
  246. if(jsonObject.getStringValue("success").equals("true")){
  247. JSONArray data = jsonObject.getJSONArray("data");
  248. dbConnect.runSqlUpdate("update sa_logistics set logisticsamount="+(((JSONObject)data.get(0)).getBigDecimalValue("transportFee").compareTo(BigDecimal.ZERO)>0?((JSONObject)data.get(0)).getBigDecimalValue("transportFee"):row.getDouble("logisticsamount"))+",volume='"+(((JSONObject)data.get(0)).getBigDecimalValue("volume").compareTo(BigDecimal.ZERO)>0?((JSONObject)data.get(0)).getBigDecimalValue("volume"):row.getDouble("volume"))+"',weight='"+(((JSONObject)data.get(0)).getBigDecimalValue("weight").compareTo(BigDecimal.ZERO)>0?((JSONObject)data.get(0)).getBigDecimalValue("weight"):row.getDouble("weight"))+"' where sa_logisticsid="+sa_logisticsid);
  249. row.put("logisticsamount",(((JSONObject)data.get(0)).getBigDecimalValue("transportFee").compareTo(BigDecimal.ZERO)>0?((JSONObject)data.get(0)).getBigDecimalValue("transportFee"):row.getDouble("logisticsamount")));
  250. row.put("volume",(((JSONObject)data.get(0)).getBigDecimalValue("volume").compareTo(BigDecimal.ZERO)>0?((JSONObject)data.get(0)).getBigDecimalValue("volume"):row.getDouble("volume")));
  251. row.put("weight",(((JSONObject)data.get(0)).getBigDecimalValue("weight").compareTo(BigDecimal.ZERO)>0?((JSONObject)data.get(0)).getBigDecimalValue("weight"):row.getDouble("weight")));
  252. }
  253. JSONObject wzwlOrder = wzwlDocking.queryWzwlOrder(row.getString("billno"));
  254. if(wzwlOrder.getStringValue("success").equals("true")){
  255. JSONArray data = wzwlOrder.getJSONArray("data");
  256. dbConnect.runSqlUpdate("update sa_logistics set logisticsstatus='"+((JSONObject)data.get(0)).getStringValue("status")+"',logisticno='"+((JSONObject)data.get(0)).getStringValue("waybillNo")+"' where sa_logisticsid="+sa_logisticsid);
  257. row.put("logisticsstatus",((JSONObject)data.get(0)).getStringValue("status"));
  258. row.put("logisticno",((JSONObject)data.get(0)).getStringValue("waybillNo"));
  259. }
  260. }
  261. // }
  262. return getSucReturnObject().setData(row).toString();
  263. }
  264. @API(title = "物流单列表", apiversion = R.ID20230720142102.v1.class)
  265. @CACHEING
  266. public String selectList() throws YosException {
  267. StringBuffer where = new StringBuffer(" 1=1 ");
  268. if (content.containsKey("where")) {
  269. JSONObject whereObject = content.getJSONObject("where");
  270. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  271. where.append("and (t1.billno like '%").append(whereObject.getString("condition")).append("%'");
  272. where.append("or t1.logisticno like '%").append(whereObject.getString("condition")).append("%'");
  273. where.append("or t1.remarks like '%").append(whereObject.getString("condition")).append("%'");
  274. where.append("or t3.agentnum like '%").append(whereObject.getString("condition")).append("%'");
  275. where.append("or t2.enterprisename like '%").append(whereObject.getString("condition")).append("%'");
  276. where.append("or t4.name like '%").append(whereObject.getString("condition")).append("%')");
  277. }
  278. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  279. where.append(" and t1.billdate >='").append(whereObject.getString("begindate")).append(" 00:00:00'");
  280. }
  281. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  282. where.append(" and t1.billdate <='").append(whereObject.getString("enddate")).append(" 23:59:59'");
  283. }
  284. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  285. where.append(" and t1.status = '").append(whereObject.getString("status")).append("'");
  286. }
  287. }
  288. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics");
  289. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t2.sys_enterpriseid=t1.sys_enterpriseid and t2.siteid=t1.siteid",
  290. "t2.enterprisename");
  291. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t3.sys_enterpriseid=t2.sys_enterpriseid and t3.siteid=t2.siteid",
  292. "t3.agentnum");
  293. querySQL.addJoinTable(JOINTYPE.left, "sa_logiscomp", "t4", "t4.sa_logiscompid=t1.sa_logiscompid and t4.siteid=t1.siteid",
  294. "t4.kd100id");
  295. querySQL.addQueryFields("logiscomp_name", "t4.name");
  296. querySQL.setWhere("t1.siteid='" + siteid + "'");
  297. if (sys_enterpriseid > 0) {
  298. querySQL.setWhere("t1.sys_enterpriseid='" + sys_enterpriseid + "'");
  299. querySQL.setWhere("t1.status !='新建'");
  300. }
  301. querySQL.setWhere(where.toString());
  302. querySQL.setPage(pageSize,pageNumber).setOrderBy(pageSorting).setTableAlias("t1");
  303. Rows rows = querySQL.query();
  304. for (Row row : rows) {
  305. row.putIfAbsent("billdate", "");
  306. row.putIfAbsent("checkdate", "");
  307. row.putIfAbsent("receivedate", "");
  308. }
  309. return getSucReturnObject().setData(rows).toString();
  310. }
  311. @API(title = "物流单列表(区域经理)", apiversion = R.ID20231030093503.v1.class)
  312. @CACHEING
  313. public String selectListManager() throws YosException {
  314. StringBuffer where = new StringBuffer(" 1=1 ");
  315. if (content.containsKey("where")) {
  316. JSONObject whereObject = content.getJSONObject("where");
  317. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  318. where.append("and (t1.billno like '%").append(whereObject.getString("condition")).append("%'");
  319. where.append("or t1.logisticno like '%").append(whereObject.getString("condition")).append("%'");
  320. where.append("or t1.remarks like '%").append(whereObject.getString("condition")).append("%'");
  321. where.append("or t3.agentnum like '%").append(whereObject.getString("condition")).append("%'");
  322. where.append("or t2.enterprisename like '%").append(whereObject.getString("condition")).append("%')");
  323. }
  324. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  325. where.append(" and t1.billdate >='").append(whereObject.getString("begindate")).append(" 00:00:00'");
  326. }
  327. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  328. where.append(" and t1.billdate <='").append(whereObject.getString("enddate")).append(" 23:59:59'");
  329. }
  330. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  331. where.append(" and t1.status = '").append(whereObject.getString("status")).append("'");
  332. }
  333. }
  334. SQLFactory areasqlFactory = new SQLFactory(new promotion(content), "区域经理查询下属营销区域");
  335. areasqlFactory.addParameter("siteid", siteid);
  336. areasqlFactory.addParameter("hrid", hrid);
  337. Rows arearows = dbConnect.runSqlQuery(areasqlFactory);
  338. ArrayList<Long> arrayList =arearows.toArrayList("sa_saleareaid", new ArrayList<Long>());
  339. arrayList.addAll(SaleArea.getSubSaleAreaIds(this, arrayList));
  340. String sql = " and t1.sys_enterpriseid in (select sys_enterpriseid from sys_enterprise_tradefield where sa_saleareaid in "+arrayList+")";
  341. sql = sql.replace("[", "(").replace("]", ")");
  342. where.append(sql);
  343. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics");
  344. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t2.sys_enterpriseid=t1.sys_enterpriseid and t2.siteid=t1.siteid",
  345. "t2.enterprisename");
  346. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t3.sys_enterpriseid=t2.sys_enterpriseid and t3.siteid=t2.siteid",
  347. "t3.agentnum");
  348. querySQL.addJoinTable(JOINTYPE.left, "sa_logiscomp", "t4", "t4.sa_logiscompid=t1.sa_logiscompid and t4.siteid=t1.siteid",
  349. "t4.kd100id");
  350. querySQL.addQueryFields("logiscomp_name", "t4.name");
  351. querySQL.setWhere("t1.siteid='" + siteid + "'");
  352. querySQL.setWhere(where.toString());
  353. querySQL.setPage(pageSize,pageNumber).setOrderBy(pageSorting).setTableAlias("t1");
  354. Rows rows = querySQL.query();
  355. for (Row row : rows) {
  356. row.putIfAbsent("billdate", "");
  357. row.putIfAbsent("checkdate", "");
  358. row.putIfAbsent("receivedate", "");
  359. }
  360. return getSucReturnObject().setData(rows).toString();
  361. }
  362. @API(title = "收货、取消收货", apiversion = R.ID20230721104302.v1.class)
  363. @CACHEING_CLEAN(apiClass = {LSALogistics.class})
  364. public String receive() throws YosException {
  365. ArrayList<String> sqlList = new ArrayList<>();
  366. Long sa_logisticsid = content.getLong("sa_logisticsid");
  367. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  368. if (rows.isEmpty()) {
  369. return getErrReturnObject().setErrMsg("请选择物流单").toString();
  370. }
  371. SQLFactory sqlFactory = new SQLFactory(this, "物流单确认收货");
  372. if (rows.get(0).getString("status").equals("新建")) {
  373. return getErrReturnObject().setErrMsg("该物流单为新建状态,无法确认收货与取消收货").toString();
  374. } else if (rows.get(0).getString("status").equals("收货")) {
  375. String sql = DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "取消收货", "物流单取消收货:" + sa_logisticsid).getSQL();
  376. sqlList.add(sql);
  377. sqlFactory = new SQLFactory(this, "物流单取消收货");
  378. } else {
  379. String sql = DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "收货", "物流单收货:" + sa_logisticsid).getSQL();
  380. sqlList.add(sql);
  381. }
  382. sqlFactory.addParameter("siteid", siteid);
  383. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  384. sqlFactory.addParameter("userid", userid);
  385. sqlFactory.addParameter("username", username);
  386. sqlList.add(sqlFactory.getSQL());
  387. dbConnect.runSqlUpdate(sqlList);
  388. return getSucReturnObject().toString();
  389. }
  390. //TODO 审核时必填字段?
  391. @API(title = "审核、反审核", apiversion = R.ID20230721110502.v1.class)
  392. @CACHEING_CLEAN(apiversions = {R.ID20221122132804.v1.class, R.ID20221122133004.v1.class, R.ID20221114135303.v1.class, R.ID20230219093203.v1.class})
  393. public String checkOrUncheck() throws YosException, NoSuchAlgorithmException {
  394. Long sa_logisticsid = content.getLong("sa_logisticsid");
  395. ArrayList<String> sqlList = new ArrayList<>();
  396. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  397. if (rows.isEmpty()) {
  398. return getErrReturnObject().setErrMsg("请选择物流单").toString();
  399. }
  400. Row logisticsRow = rows.get(0);
  401. String billno = logisticsRow.getString("billno");
  402. String status = logisticsRow.getString("status");
  403. if ("收货".equals(status)) {
  404. return getErrReturnObject().setErrMsg("该物流单为收货状态,无法审核与反审核").toString();
  405. }
  406. SQLFactory sqlFactory = new SQLFactory(this, "物流单审核");
  407. if (status.equals("审核")) {
  408. WzwlDocking wzwlDocking =new WzwlDocking(siteid);
  409. JSONObject wzwlOrder = wzwlDocking.queryWzwlOrder(billno);
  410. System.out.println(wzwlOrder.getStringValue("success"));
  411. if(wzwlOrder.getStringValue("success").equals("true")){
  412. JSONArray data = wzwlOrder.getJSONArray("data");
  413. System.out.println(((JSONObject)data.get(0)).getStringValue("status"));
  414. if(((JSONObject)data.get(0)).getStringValue("status").equals("已签收")){
  415. return getErrReturnObject().setErrMsg("物流单已签收,禁止反审核!").toString();
  416. }
  417. }
  418. sqlFactory = new SQLFactory(this, "物流单反审核");
  419. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "反审核", "反审核:" + sa_logisticsid).getSQL());
  420. Rows itemsrows = dbConnect.runSqlQuery("SELECT * from sa_logistics_items WHERE sa_logisticsid=" + sa_logisticsid + " and siteid='" + siteid + "'");
  421. for (Row item : itemsrows) {
  422. Long st_stockbill_itemsid = item.getLong("st_stockbill_itemsid");
  423. BigDecimal qty = item.getBigDecimal("qty");
  424. sqlList.add("UPDATE st_stockbill_items SET transportqty=ifnull(transportqty,0)-" + qty + " WHERE st_stockbill_itemsid=" + st_stockbill_itemsid + " and siteid='" + siteid + "'");
  425. }
  426. }
  427. if (status.equals("新建")) {
  428. Rows itemrows = LSALogisticsHelper.getLogisticsItemsRows(this);
  429. if (itemrows.isEmpty()) {
  430. return getErrReturnObject().setErrMsg("商品未添加禁止审核").toString();
  431. }
  432. Rows itemsrows = dbConnect.runSqlQuery("SELECT * from sa_logistics_items WHERE sa_logisticsid=" + sa_logisticsid + " and siteid='" + siteid + "'");
  433. for (Row item : itemsrows) {
  434. Long st_stockbill_itemsid = item.getLong("st_stockbill_itemsid");
  435. BigDecimal qty = item.getBigDecimal("qty");
  436. if (isOut(this, st_stockbill_itemsid, qty)) {
  437. return getErrReturnObject().setErrMsg("超出最大可送货数量").toString();
  438. }
  439. sqlList.add("UPDATE st_stockbill_items SET transportqty=ifnull(transportqty,0)+" + qty + " WHERE st_stockbill_itemsid=" + st_stockbill_itemsid + " and siteid='" + siteid + "'");
  440. }
  441. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "审核", "审核:" + sa_logisticsid).getSQL());
  442. 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 + "'");
  443. Long sa_orderid = 0L;
  444. if (dispatchRows.isNotEmpty()) {
  445. sa_orderid = dispatchRows.get(0).getLong("sa_orderid");
  446. }
  447. String sonum = "";
  448. Rows orderRows = Order.getOrderRows(this, sa_orderid);
  449. Long sys_enterpriseid = 0L;
  450. if (orderRows.isNotEmpty()) {
  451. sonum = orderRows.get(0).getString("sonum");
  452. sys_enterpriseid = orderRows.get(0).getLong("sys_enterpriseid");
  453. }
  454. sendMsg("您的订单【" + sonum + "】已发货,物流单号【" + billno + "】 !", sa_orderid, sys_enterpriseid);
  455. }
  456. sqlFactory.addParameter("userid", userid);
  457. sqlFactory.addParameter("username", username);
  458. sqlFactory.addParameter("siteid", siteid);
  459. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  460. sqlList.add(sqlFactory.getSQL());
  461. dbConnect.runSqlUpdate(sqlList);
  462. return getSucReturnObject().toString();
  463. }
  464. @API(title = "发送至物流", apiversion = R.ID2024101114031103.v1.class)
  465. public String SendToLogistics() throws YosException, NoSuchAlgorithmException, UnsupportedEncodingException {
  466. WzwlDocking wzwlDocking =new WzwlDocking(siteid);
  467. Long sa_logisticsid = content.getLong("sa_logisticsid");
  468. Rows rows = LSALogisticsHelper.getLogisticsRows(this);
  469. if (rows.isEmpty()) {
  470. return getErrReturnObject().setErrMsg("请选择物流单").toString();
  471. }
  472. if (!rows.get(0).getString("status").equals("审核")) {
  473. return getErrReturnObject().setErrMsg("该物流单为非审核状态,无法发送至物流").toString();
  474. }
  475. JSONObject wzwlOrder = wzwlDocking.queryWzwlOrder(rows.get(0).getString("billno"));
  476. if(wzwlOrder.getStringValue("success").equals("true")){
  477. JSONArray data = wzwlOrder.getJSONArray("data");
  478. if(((JSONObject)data.get(0)).getStringValue("status").equals("已签收")){
  479. return getErrReturnObject().setErrMsg("物流单已签收,无法再次发送!").toString();
  480. }
  481. }
  482. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics_items");
  483. querySQL.setTableAlias("t1");
  484. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill_items", "t2", "t2.st_stockbill_itemsid=t1.st_stockbill_itemsid and t2.siteid=t1.siteid",
  485. "rowno", "itemid", "unit", "price", "amount", "remarks");
  486. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill", "t3", "t3.st_stockbillid =t2.st_stockbillid and t3.siteid=t2.siteid",
  487. "billno");
  488. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t4", "t4.itemid =t2.itemid and t4.siteid=t2.siteid",
  489. "spec","itemno", "itemname", "model");
  490. querySQL.setWhere("t1.sa_logisticsid=" + sa_logisticsid);
  491. querySQL.setWhere("t1.siteid='" + siteid + "'");
  492. Rows itemsrows = querySQL.query();
  493. String result = wzwlDocking.createWzwlOrder(rows.get(0),itemsrows,this,sa_logisticsid,content.getJSONObject("consigner"));
  494. if(result.equals("true")) {
  495. return getSucReturnObject().toString();
  496. }else{
  497. return getErrReturnObject().setErrMsg(result).toString();
  498. }
  499. }
  500. @API(title = "物流状态查询", apiversion = R.ID2024101114155503.v1.class)
  501. public String queryWzwlOrder() throws YosException, NoSuchAlgorithmException {
  502. WzwlDocking wzwlDocking =new WzwlDocking(siteid);
  503. String billno = content.getString("billno");
  504. JSONObject jsonObject = wzwlDocking.queryWzwlOrder(billno);
  505. return getSucReturnObject().setData(jsonObject).toString();
  506. }
  507. @API(title = "物流费用查询", apiversion = R.ID2024101114265803.v1.class)
  508. public String queryWzwlOrderAmount() throws YosException, NoSuchAlgorithmException, UnsupportedEncodingException {
  509. WzwlDocking wzwlDocking =new WzwlDocking(siteid);
  510. String billno = content.getString("billno");
  511. JSONObject jsonObject = wzwlDocking.queryWzwlOrderAmount(billno);
  512. return getSucReturnObject().setData(jsonObject).toString();
  513. }
  514. @API(title = "物流费用查询", apiversion = R.ID20241019150603.v1.class)
  515. public String queryWzwlOrderAmountExtendList() throws YosException, NoSuchAlgorithmException, UnsupportedEncodingException {
  516. WzwlDocking wzwlDocking =new WzwlDocking(siteid);
  517. String billno = content.getString("billno");
  518. JSONObject jsonObject = wzwlDocking.queryWzwlOrderAmountExtendList(billno);
  519. return getSucReturnObject().setData(jsonObject).toString();
  520. }
  521. public void sendMsg(String content, Long sa_orderid, Long sys_enterpriseid) throws YosException {
  522. ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid).toArrayList("userid", new ArrayList<>());
  523. Remind remind = new Remind(this);
  524. remind.setTitle("物流消息");
  525. remind.setContent(content);
  526. remind.setType("应用");
  527. remind.setObjectid(sa_orderid);
  528. remind.setObjectname("sa_order");
  529. remind.setTouserid(userList);
  530. remind.createSys_message();
  531. }
  532. }