Logistics.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. package restcontroller.webmanage.sale.logistics;
  2. import beans.data.BatchDeleteErr;
  3. import beans.datacontrllog.DataContrlLog;
  4. import beans.order.Order;
  5. import beans.parameter.Parameter;
  6. import beans.remind.Remind;
  7. import com.alibaba.fastjson2.JSONArray;
  8. import com.alibaba.fastjson2.JSONObject;
  9. import common.Controller;
  10. import common.YosException;
  11. import common.annotation.API;
  12. import common.annotation.CACHEING;
  13. import common.annotation.CACHEING_CLEAN;
  14. import common.data.QuerySQL;
  15. import common.data.Rows;
  16. import common.data.RowsMap;
  17. import common.data.SQLFactory;
  18. import restcontroller.R;
  19. import java.math.BigDecimal;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. @API(title = "物流单")
  23. public class Logistics extends Controller {
  24. /**
  25. * 构造函数
  26. *
  27. * @param content
  28. */
  29. public Logistics(JSONObject content) throws YosException {
  30. super(content);
  31. }
  32. @API(title = "新增或更新", apiversion = R.ID20221122132704.v1.class)
  33. @CACHEING_CLEAN(apiversions = {R.ID20221122132804.v1.class, R.ID20230219093203.v1.class})
  34. public String insertOrUpdate() throws YosException {
  35. ArrayList<String> sqlList = new ArrayList<>();
  36. Long sa_logisticsid = content.getLong("sa_logisticsid");
  37. Long sys_enterpriseid = content.getLong("sys_enterpriseid");
  38. Long sa_logiscompid = content.getLongValue("sa_logiscompid");
  39. String remarks = content.getStringValue("remarks");
  40. String logisticno = content.getStringValue("logisticno");
  41. String paytype = content.getStringValue("paytype");
  42. Date billdate = content.getDate("billdate");
  43. BigDecimal freightamount = content.getBigDecimal("freightamount");
  44. String carnum = content.getStringValue("carnum");
  45. String logisphone = content.getStringValue("logisphone");
  46. String logiscontact = content.getStringValue("logiscontact");
  47. if (sys_enterpriseid <= 0 || dbConnect.runSqlQuery("select sys_enterpriseid from sys_enterprise where siteid = '" + siteid + "' and sys_enterpriseid = " + sys_enterpriseid).isEmpty()) {
  48. return getErrReturnObject().setErrMsg("未选择企业").toString();
  49. }
  50. Rows rows = dbConnect.runSqlQuery("select sa_logisticsid,status from sa_logistics where siteid = '" + siteid + "' and sa_logisticsid = " + sa_logisticsid);
  51. SQLFactory sqlFactory = new SQLFactory(this, "物流单新增");
  52. if (sa_logisticsid <= 0 || rows.isEmpty()) {
  53. sa_logisticsid = createTableID("sa_logistics");
  54. sqlFactory.addParameter("billno", createBillCode("logisticsbill"));
  55. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  56. String sql = DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "新增", "物流单新增:" + sa_logisticsid).getSQL();
  57. sqlList.add(sql);
  58. //sqlFactory.addParameter("billno", sa_logisticsid);
  59. } else {
  60. if (!rows.get(0).getString("status").equals("新建")) {
  61. return getErrReturnObject().setErrMsg("该物流单非新建状态,无法修改").toString();
  62. }
  63. sqlFactory = new SQLFactory(this, "物流单更新");
  64. String sql = DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "更新", "物流单更新:" + sa_logisticsid).getSQL();
  65. sqlList.add(sql);
  66. }
  67. sqlFactory.addParameter("sa_logiscompid", sa_logiscompid);
  68. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  69. sqlFactory.addParameter("remarks", remarks);
  70. sqlFactory.addParameter("billdate", billdate);
  71. sqlFactory.addParameter("freightamount", freightamount);
  72. sqlFactory.addParameter("logisticno", logisticno);
  73. sqlFactory.addParameter("paytype", paytype);
  74. sqlFactory.addParameter("carnum", carnum);
  75. sqlFactory.addParameter("logisphone", logisphone);
  76. sqlFactory.addParameter("logiscontact", logiscontact);
  77. sqlFactory.addParameter("username", username);
  78. sqlFactory.addParameter("userid", userid);
  79. sqlFactory.addParameter("siteid", siteid);
  80. sqlList.add(sqlFactory.getSQL());
  81. dbConnect.runSqlUpdate(sqlList);
  82. return getSucReturnObject().toString();
  83. }
  84. @API(title = "列表(管理员端)", apiversion = R.ID20221122132804.v1.class)
  85. @CACHEING
  86. public String queryList_manage() throws YosException {
  87. StringBuffer where = new StringBuffer(" 1=1 ");
  88. if (content.containsKey("where")) {
  89. JSONObject whereObject = content.getJSONObject("where");
  90. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  91. where.append("and (t1.billno like '%").append(whereObject.getString("condition")).append("%'");
  92. where.append("or t1.logisticno like '%").append(whereObject.getString("condition")).append("%'");
  93. where.append("or t3.agentnum like '%").append(whereObject.getString("condition")).append("%'");
  94. where.append("or t2.enterprisename like '%").append(whereObject.getString("condition")).append("%')");
  95. }
  96. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  97. where.append(" and t1.billdate >='").append(whereObject.getString("begindate")).append("'");
  98. }
  99. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  100. where.append(" and t1.billdate <='").append(whereObject.getString("enddate")).append("'");
  101. }
  102. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  103. where.append(" and t1.status = '").append(whereObject.getString("status")).append("'");
  104. }
  105. if (whereObject.containsKey("sonum") && !"".equals(whereObject.getString("sonum"))) {
  106. where.append(" and exists(select 1 from sa_logistics_items s1 left join sa_dispatch s2 on s1.sa_dispatchid=s2.sa_dispatchid and s1.siteid=s2.siteid left join sa_order s3 on s2.sa_orderid=s3.sa_orderid and s2.siteid=s3.siteid where s3.sonum='").append(whereObject.getString("sonum")).append("' and s1.sa_logisticsid=t1.sa_logisticsid)");
  107. }
  108. }
  109. // SQLFactory sqlFactory = new SQLFactory(this, "物流单列表查询", pageSize, pageNumber, pageSorting);
  110. // sqlFactory.addParameter("siteid", siteid);
  111. // sqlFactory.addParameter_SQL("where", where);
  112. // String sql = sqlFactory.getSQL();
  113. // Rows rows = dbConnect.runSqlQuery(sql);
  114. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics", "sa_logisticsid", "siteid",
  115. "billno","rec_contactsid","logisticno","sys_enterpriseid","remarks","name","status","checkdate","receivedate","billdate",
  116. "freightamount","carnum","logiscontact","logisphone","province","city","county","address");
  117. querySQL.setTableAlias("t1");
  118. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.siteid = t2.siteid and t1.sys_enterpriseid = t2.sys_enterpriseid","enterprisename");
  119. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.siteid = t3.siteid and t1.sys_enterpriseid = t3.sys_enterpriseid","agentnum");
  120. querySQL.setSiteid(siteid);
  121. querySQL.setWhere(where.toString());
  122. querySQL.setPage(pageSize, pageNumber);
  123. Rows rows = querySQL.query();
  124. return getSucReturnObject().setData(rows).toString();
  125. }
  126. @API(title = "列表(业务员端)", apiversion = R.ID20230219093203.v1.class)
  127. @CACHEING
  128. public String queryList_Saler() throws YosException {
  129. StringBuffer where = new StringBuffer(" 1=1 ");
  130. if (content.containsKey("where")) {
  131. JSONObject whereObject = content.getJSONObject("where");
  132. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  133. where.append("and (t1.billno like '%").append(whereObject.getString("condition")).append("%'");
  134. where.append("or t1.logisticno like '%").append(whereObject.getString("condition")).append("%'");
  135. where.append("or t3.agentnum like '%").append(whereObject.getString("condition")).append("%'");
  136. where.append("or t2.enterprisename like '%").append(whereObject.getString("condition")).append("%')");
  137. }
  138. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  139. where.append(" and t1.receivedate >='").append(whereObject.getString("begindate")).append("'");
  140. }
  141. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  142. where.append(" and t1.receivedate <='").append(whereObject.getString("enddate")).append("'");
  143. }
  144. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  145. where.append(" and t1.status = '").append(whereObject.getString("status")).append("'");
  146. }
  147. }
  148. // SQLFactory sqlFactory = new SQLFactory(this, "物流单列表查询业务员", pageSize, pageNumber, pageSorting);
  149. // sqlFactory.addParameter("siteid", siteid);
  150. // sqlFactory.addParameter("hrid", hrid);
  151. // sqlFactory.addParameter_SQL("where", where);
  152. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  153. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_logistics", "sa_logisticsid", "siteid",
  154. "billno","rec_contactsid","logisticno","sys_enterpriseid","remarks","name","status","checkdate","receivedate","billdate");
  155. querySQL.setTableAlias("t1");
  156. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.siteid = t2.siteid and t1.sys_enterpriseid = t2.sys_enterpriseid","enterprisename");
  157. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.siteid = t3.siteid and t1.sys_enterpriseid = t3.sys_enterpriseid","agentnum");
  158. querySQL.setSiteid(siteid);
  159. querySQL.setWhere("t1.sys_enterpriseid in (SELECT sys_enterpriseid\n" +
  160. " from sys_enterprise_tradefield\n" +
  161. " WHERE sa_saleareaid in (SELECT sa_saleareaid\n" +
  162. " from sa_salearea_hr t1\n" +
  163. " left join sys_hr t2 on t1.hrid=t2.hrid and t1.siteid=t2.siteid\n" +
  164. " WHERE t2.userid = '"+hrid+"'\n" +
  165. " )\n" +
  166. " and siteid = '"+siteid+"')");
  167. querySQL.setWhere(where.toString());
  168. querySQL.setPage(pageSize, pageNumber);
  169. Rows rows = querySQL.query();
  170. return getSucReturnObject().setData(rows).toString();
  171. }
  172. @API(title = "删除", apiversion = R.ID20221122132904.v1.class)
  173. @CACHEING_CLEAN(apiversions = {R.ID20221122132804.v1.class, R.ID20230219093203.v1.class})
  174. public String delete() throws YosException {
  175. JSONArray sa_logisticsids = content.getJSONArray("sa_logisticsids");
  176. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, sa_logisticsids.size());
  177. ArrayList<String> sqlList = new ArrayList<>();
  178. // String str = sa_logisticsids.toString().replace("[", "(").replace("]", ")");
  179. // RowsMap boxmxidRowsMap = dbConnect.runSqlQuery("select sa_logisticsid,sa_logistics_boxid from sa_logistics_box where siteid='" + siteid + "' and sa_logisticsid in " + str).toRowsMap("sa_logisticsid");
  180. for (Object o : sa_logisticsids) {
  181. Rows rows = dbConnect.runSqlQuery("select billno,status from sa_logistics where siteid = '" + siteid + "' and sa_logisticsid = " + o);
  182. if (rows.isEmpty()) {
  183. batchDeleteErr.addErr(Long.parseLong(o.toString()), "该数据不存在");
  184. continue;
  185. }
  186. if (!rows.get(0).getString("status").equals("新建")) {
  187. batchDeleteErr.addErr(Long.parseLong(o.toString()), "非新建状态,不能删除");
  188. continue;
  189. }
  190. String sql = "delete from sa_logistics where siteid = '" + siteid + "' and sa_logisticsid = " + o;
  191. sqlList.add(sql);
  192. sql = "delete from sa_logistics_items where siteid = '" + siteid + "' and sa_logisticsid = " + o;
  193. sqlList.add(sql);
  194. // sql = "delete from sa_logistics_box where siteid='" + siteid + "' and sa_logisticsid= " + o;
  195. // sqlList.add(sql);
  196. // if (boxmxidRowsMap.containsKey(o.toString())) {
  197. // str = Arrays.toString(boxmxidRowsMap.get(o.toString()).toArray("sa_logistics_boxid")).replace("[", "(").replace("]", ")");
  198. // sql = "delete from sa_logistics_boxmx where siteid='" + siteid + "' and sa_logistics_boxid in " + str;
  199. // sqlList.add(sql);
  200. // }
  201. sql = DataContrlLog.createLog(this, "sa_logistics", Long.parseLong(o.toString()), "删除", "物流单删除:" + Long.parseLong(o.toString())).getSQL();
  202. sqlList.add(sql);
  203. }
  204. dbConnect.runSqlUpdate(sqlList);
  205. return batchDeleteErr.getReturnObject().toString();
  206. }
  207. //TODO 审核时必填字段?
  208. @API(title = "审核、反审核", apiversion = R.ID20221122133104.v1.class)
  209. @CACHEING_CLEAN(apiversions = {R.ID20221122132804.v1.class, R.ID20221122133004.v1.class, R.ID20221114135303.v1.class, R.ID20230219093203.v1.class})
  210. public String checkOrUncheck() throws YosException {
  211. Long sa_logisticsid = content.getLong("sa_logisticsid");
  212. ArrayList<String> sqlList = new ArrayList<>();
  213. Rows rows = dbConnect.runSqlQuery("select * from sa_logistics where siteid = '" + siteid + "' and sa_logisticsid = " + sa_logisticsid);
  214. if (!rows.isEmpty()) {
  215. if (rows.get(0).getString("status").equals("收货")) {
  216. return getErrReturnObject().setErrMsg("该物流单为收货状态,无法审核与反审核").toString();
  217. }
  218. String billno = rows.get(0).getString("billno");
  219. String[] sa_dispatchids = dbConnect.runSqlQuery("select sa_dispatchid from sa_logistics_items where siteid = '" + siteid + "' and sa_logisticsid =" + sa_logisticsid).toArray("sa_dispatchid");
  220. SQLFactory sqlFactory = new SQLFactory(this, "发货单状态查询");
  221. sqlFactory.addParameter("siteid", siteid);
  222. sqlFactory.addParameter_in("sa_dispatchids", sa_dispatchids);
  223. Rows dispatch = dbConnect.runSqlQuery(sqlFactory.getSQL());
  224. RowsMap dispatchRowsMap = dispatch.toRowsMap("status");
  225. sqlFactory = new SQLFactory(this, "发货单关闭");
  226. if (rows.get(0).getString("status").equals("新建")) {
  227. if (dispatchRowsMap.containsKey("新建") || dispatchRowsMap.containsKey("关闭")) {
  228. return getErrReturnObject().setErrMsg("物流单中存在非审核状态或非复核状态的发货单,请检查").toString();
  229. }
  230. } else {
  231. sqlFactory = new SQLFactory(this, "发货单复核");
  232. }
  233. sqlFactory.addParameter("siteid", siteid);
  234. sqlFactory.addParameter("userid", userid);
  235. sqlFactory.addParameter("username", username);
  236. sqlFactory.addParameter_in("sa_dispatchids", sa_dispatchids);
  237. String dispatch_recheck = Parameter.getString(siteid, "dispatch_recheck");
  238. if (dispatch_recheck.equals("1")) {
  239. sqlFactory.addParameter_SQL("sql", "status='复核'");
  240. } else {
  241. sqlFactory.addParameter_SQL("sql", "status='审核'");
  242. }
  243. sqlList.add(sqlFactory.getSQL());
  244. sqlFactory = new SQLFactory(this, "物流单审核");
  245. if (rows.get(0).getString("status").equals("审核")) {
  246. sqlFactory = new SQLFactory(this, "物流单反审核");
  247. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "反审核", "反审核:" + sa_logisticsid).getSQL());
  248. } else {
  249. RowsMap dispatchqtyRowsMap = dbConnect.runSqlQuery("select t2.sa_dispatch_itemsid,t2.qty from sa_logistics_items t1 inner join sa_dispatch_items t2 on t1.siteid=t2.siteid and t1.sa_dispatchid=t2.sa_dispatchid where t1.siteid='"
  250. + siteid + "' and t1.sa_logisticsid=" + sa_logisticsid).toRowsMap("sa_dispatch_itemsid");
  251. RowsMap logisticsboxmxrowsMap = dbConnect.runSqlQuery("select t2.sa_dispatch_itemsid,sum(t2.qty) qty from sa_logistics_box t1 inner join sa_logistics_boxmx t2 on t1.siteid=t2.siteid and t1.sa_logistics_boxid=t2.sa_logistics_boxid where t1.siteid='"
  252. + siteid + "' and t1.sa_logisticsid=" + sa_logisticsid + " group by t1.siteid,t2.sa_dispatch_itemsid").toRowsMap("sa_dispatch_itemsid");
  253. for (String sa_dispatch_itemsid : dispatchqtyRowsMap.keySet()) {
  254. if (!logisticsboxmxrowsMap.containsKey(sa_dispatch_itemsid)) {
  255. return getErrReturnObject().setErrMsg("装箱数量与发货数量不相等,审核失败").toString();
  256. }
  257. Rows dispatchqtyRows = dispatchqtyRowsMap.get(sa_dispatch_itemsid);
  258. Rows logisticsboxmxRows = logisticsboxmxrowsMap.get(sa_dispatch_itemsid);
  259. if (dispatchqtyRows.get(0).getBigDecimal("qty").compareTo(logisticsboxmxRows.get(0).getBigDecimal("qty")) != 0) {
  260. return getErrReturnObject().setErrMsg("装箱数量与发货数量不相等,审核失败").toString();
  261. }
  262. }
  263. sqlList.add(DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "审核", "审核:" + sa_logisticsid).getSQL());
  264. Rows dispatchRows = dbConnect.runSqlQuery("SELECT sa_orderid from sa_dispatch WHERE sa_dispatchid in (SELECT sa_dispatchid from sa_logistics_items WHERE sa_logisticsid = '" + sa_logisticsid + "' and siteid='" + siteid + "') and siteid = '" + siteid + "'");
  265. Long sa_orderid = 0L;
  266. if (dispatchRows.isNotEmpty()) {
  267. sa_orderid = dispatchRows.get(0).getLong("sa_orderid");
  268. }
  269. String sonum = "";
  270. Rows orderRows = Order.getOrderRows(this, sa_orderid);
  271. Long sys_enterpriseid = 0L;
  272. if (orderRows.isNotEmpty()) {
  273. sonum = orderRows.get(0).getString("sonum");
  274. sys_enterpriseid = orderRows.get(0).getLong("sys_enterpriseid");
  275. }
  276. sendMsg("您的订单【" + sonum + "】已发货,物流单号【" + billno + "】 !", sa_orderid, sys_enterpriseid);
  277. }
  278. sqlFactory.addParameter("userid", userid);
  279. sqlFactory.addParameter("username", username);
  280. sqlFactory.addParameter("siteid", siteid);
  281. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  282. sqlList.add(sqlFactory.getSQL());
  283. dbConnect.runSqlUpdate(sqlList);
  284. return getSucReturnObject().toString();
  285. }
  286. return getErrReturnObject().setErrMsg("请选择物流单").toString();
  287. }
  288. public void sendMsg(String content, Long sa_orderid, Long sys_enterpriseid) throws YosException {
  289. ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid).toArrayList("userid", new ArrayList<>());
  290. Remind remind = new Remind(this);
  291. remind.setTitle("物流消息");
  292. remind.setContent(content);
  293. remind.setType("应用");
  294. remind.setObjectid(sa_orderid);
  295. remind.setObjectname("sa_order");
  296. remind.setTouserid(userList);
  297. remind.createSys_message();
  298. }
  299. // @API(title = "收货、取消收货", apiversion = R.ID20221122133204.v1.class)
  300. // @CACHEING_CLEAN(apiversions = {R.ID20221122132804.v1.class, R.ID20230219093203.v1.class})
  301. // public String receive() throws YosException {
  302. // ArrayList<String> sqlList = new ArrayList<>();
  303. // Long sa_logisticsid = content.getLong("sa_logisticsid");
  304. // Rows rows = dbConnect.runSqlQuery("select status from sa_logistics where siteid = '" + siteid + "' and sa_logisticsid = " + sa_logisticsid);
  305. // if (!rows.isEmpty()) {
  306. // SQLFactory sqlFactory = new SQLFactory(this, "物流单确认收货");
  307. // if (rows.get(0).getString("status").equals("新建")) {
  308. // return getErrReturnObject().setErrMsg("该物流单为新建状态,无法确认收货与取消收货").toString();
  309. // } else if (rows.get(0).getString("status").equals("收货")) {
  310. // String sql = DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "取消收货", "物流单取消收货:" + sa_logisticsid).getSQL();
  311. // sqlList.add(sql);
  312. // sqlFactory = new SQLFactory(this, "物流单取消收货");
  313. // } else {
  314. // String sql = DataContrlLog.createLog(this, "sa_logistics", sa_logisticsid, "收货", "物流单收货:" + sa_logisticsid).getSQL();
  315. // sqlList.add(sql);
  316. // }
  317. // sqlFactory.addParameter("siteid", siteid);
  318. // sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  319. // sqlFactory.addParameter("userid", userid);
  320. // sqlFactory.addParameter("username", username);
  321. // sqlList.add(sqlFactory.getSQL());
  322. // dbConnect.runSqlUpdate(sqlList);
  323. // return getSucReturnObject().toString();
  324. // }
  325. // return getErrReturnObject().setErrMsg("请选择物流单").toString();
  326. //
  327. // }
  328. @API(title = "详情", apiversion = R.ID20221204201804.v1.class)
  329. public String queryById() throws YosException {
  330. Long sa_logisticsid = content.getLong("sa_logisticsid");
  331. SQLFactory sqlFactory = new SQLFactory(this, "物流单详情");
  332. sqlFactory.addParameter("siteid", siteid);
  333. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  334. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  335. return getSucReturnObject().setData(rows).toString();
  336. }
  337. @API(title = "一键生成物流单", apiversion = R.ID20230216185104.v1.class)
  338. @CACHEING_CLEAN(apiversions = {R.ID20221122132804.v1.class, R.ID20230219093203.v1.class})
  339. public String generatelogisticsid() throws YosException {
  340. Long sa_dispatchid = content.getLong("sa_dispatchid");
  341. Rows dispatchRows = dbConnect.runSqlQuery("select freightstatus,sys_enterpriseid,rec_contactsid,status from sa_dispatch where siteid='" + siteid + "' and sa_dispatchid=" + sa_dispatchid);
  342. if (dispatchRows.isEmpty()) {
  343. return getErrReturnObject().setErrMsg("发货单无效").toString();
  344. }
  345. Rows siteRows = dbConnect.runSqlQuery("select 1 from sys_site_parameter where siteid='" + siteid + "' and dispatch_recheck=1");
  346. if (siteRows.isEmpty() && (dispatchRows.get(0).getString("status").equals("新建") || dispatchRows.get(0).getString("status").equals("关闭"))) {
  347. return getErrReturnObject().setErrMsg("非审核状态不能生成物流单").toString();
  348. }
  349. if (siteRows.isNotEmpty() && !dispatchRows.get(0).getString("status").equals("复核")) {
  350. return getErrReturnObject().setErrMsg("非复核状态不能生成物流单").toString();
  351. }
  352. Rows contactsRows = dbConnect.runSqlQuery("select name,phonenumber,province,city,county,address from sys_enterprise_contacts where siteid='" + siteid + "' and deleted=0 and contactsid=" + dispatchRows.get(0).getLong("rec_contactsid"));
  353. ArrayList<String> sqlList = new ArrayList<>();
  354. long sa_logisticsid = createTableID("sa_logistics");
  355. SQLFactory sqlFactory = new SQLFactory(this, "发货单生成物流单新增");
  356. sqlFactory.addParameter("siteid", siteid);
  357. sqlFactory.addParameter("userid", userid);
  358. sqlFactory.addParameter("username", username);
  359. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  360. sqlFactory.addParameter("paytype", dispatchRows.get(0).getString("freightstatus"));
  361. sqlFactory.addParameter("sys_enterpriseid", dispatchRows.get(0).getString("sys_enterpriseid"));
  362. sqlFactory.addParameter("sa_logiscompid", 0);
  363. sqlFactory.addParameter("rec_contactsid", dispatchRows.get(0).getString("rec_contactsid"));
  364. sqlFactory.addParameter("billno", createBillCode("logisticsbill"));
  365. sqlFactory.addParameter("name", contactsRows.isNotEmpty() ? contactsRows.get(0).getString("name") : "");
  366. sqlFactory.addParameter("phonenumber", contactsRows.isNotEmpty() ? contactsRows.get(0).getString("phonenumber") : "");
  367. sqlFactory.addParameter("province", contactsRows.isNotEmpty() ? contactsRows.get(0).getString("province") : "");
  368. sqlFactory.addParameter("city", contactsRows.isNotEmpty() ? contactsRows.get(0).getString("city") : "");
  369. sqlFactory.addParameter("county", contactsRows.isNotEmpty() ? contactsRows.get(0).getString("county") : "");
  370. sqlFactory.addParameter("address", contactsRows.isNotEmpty() ? contactsRows.get(0).getString("address") : "");
  371. sqlList.add(sqlFactory.getSQL());
  372. long sa_logistics_itemsid = createTableID("sa_logistics_items");
  373. sqlFactory = new SQLFactory(this, "物流单发货明细新增");
  374. sqlFactory.addParameter("siteid", siteid);
  375. sqlFactory.addParameter("userid", userid);
  376. sqlFactory.addParameter("username", username);
  377. sqlFactory.addParameter("sa_logisticsid", sa_logisticsid);
  378. sqlFactory.addParameter("sa_logistics_itemsid", sa_logistics_itemsid);
  379. sqlFactory.addParameter("sa_dispatchid", sa_dispatchid);
  380. sqlList.add(sqlFactory.getSQL());
  381. dbConnect.runSqlUpdate(sqlList);
  382. content.put("sa_logisticsid", sa_logisticsid);
  383. return queryById();
  384. }
  385. @API(title = "收货人查询", apiversion = R.ID20230220164804.v1.class)
  386. public String querycon() throws YosException {
  387. JSONArray sa_dispatchids = content.getJSONArray("sa_dispatchids");
  388. // SQLFactory sqlFactory = new SQLFactory(this, "发货单收货人查询", pageSize, pageNumber, pageSorting);
  389. // sqlFactory.addParameter("siteid", siteid);
  390. // sqlFactory.addParameter_in("sa_dispatchids", sa_dispatchids.toArray());
  391. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  392. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_dispatch", "rec_contactsid");
  393. querySQL.setTableAlias("t2");
  394. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_contacts", "t3", "t2.siteid = t3.siteid and t2.rec_contactsid = t3.contactsid",
  395. "name","phonenumber","address","city","province","county");
  396. querySQL.setSiteid(siteid);
  397. querySQL.setWhere("t1.sa_dispatchid",sa_dispatchids.toArray());
  398. querySQL.addGroupBy("t2.rec_contactsid,\n" +
  399. " t3.name,\n" +
  400. " t3.phonenumber,\n" +
  401. " t3.address,\n" +
  402. " t3.city,\n" +
  403. " t3.province,\n" +
  404. " t3.county");
  405. querySQL.setPage(pageSize, pageNumber);
  406. Rows rows = querySQL.query();
  407. return getSucReturnObject().setData(rows).toString();
  408. }
  409. }