aftersalesmag.java 58 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
  1. package restcontroller.webmanage.sale.aftersalesmag;
  2. import beans.accountbalance.Accountbalance;
  3. import beans.accountbalance.CashbillEntity;
  4. import beans.aftersalesmag.Aftersalesmag;
  5. import beans.data.BatchDeleteErr;
  6. import beans.datacontrllog.DataContrlLog;
  7. import beans.hr.Hr;
  8. import beans.parameter.Parameter;
  9. import beans.remind.Remind;
  10. import beans.salesforecast.Salesforecast;
  11. import com.alibaba.fastjson.JSONArray;
  12. import com.alibaba.fastjson.JSONObject;
  13. import common.Controller;
  14. import common.YosException;
  15. import common.annotation.API;
  16. import common.annotation.CACHEING;
  17. import common.annotation.CACHEING_CLEAN;
  18. import common.data.*;
  19. import org.apache.commons.lang.StringUtils;
  20. import restcontroller.R;
  21. import restcontroller.sale.cashbill.cashbill;
  22. import restcontroller.webmanage.executorService.Executor;
  23. import restcontroller.webmanage.sale.enterprisetradefield.EnterpriseTradeField;
  24. import restcontroller.webmanage.sale.itemgroup.itemgroup;
  25. import utility.ERPDocking;
  26. import java.math.BigDecimal;
  27. import java.util.ArrayList;
  28. import java.util.HashMap;
  29. /**
  30. * 返退单
  31. */
  32. @API(title = "返退管理")
  33. public class aftersalesmag extends Controller {
  34. public aftersalesmag(JSONObject arg0) throws YosException {
  35. super(arg0);
  36. // TODO Auto-generated constructor stub
  37. }
  38. @API(title = "返退单新增更新", apiversion = R.ID20230104160503.v1.class, intervaltime = 200)
  39. @CACHEING_CLEAN(apiClass = {aftersalesmag.class})
  40. public String insertormodify_aftersalesmag() throws YosException {
  41. ArrayList<String> sqlList = new ArrayList<>();
  42. // 表名
  43. String tableName = "sa_aftersalesmag";
  44. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  45. // String type = content.getString("type");
  46. // String typemx = content.getStringValue("typemx");
  47. // Long sa_orderid = content.getLong("sa_orderid");
  48. if (content.containsKey("sys_enterpriseid")) {
  49. sys_enterpriseid = content.getLong("sys_enterpriseid");
  50. }
  51. // BigDecimal rebate_userate =content.getBigDecimalValue("rebate_userate");
  52. // BigDecimal returnamount = content.getBigDecimalValue("returnamount");
  53. // Long sa_accountclassid = content.getLong("sa_accountclassid");
  54. // String reason = content.getStringValue("reason");
  55. // boolean isitemreturn = content.getBooleanValue("isitemreturn");
  56. //// String logisticno = content.getStringValue("logisticno");
  57. String billdate = content.getStringValue("billdate");
  58. if (sa_aftersalesmagid <= 0 || dbConnect.runSqlQuery(
  59. "select sa_aftersalesmagid from sa_aftersalesmag where sa_aftersalesmagid=" + sa_aftersalesmagid)
  60. .isEmpty()) {
  61. sa_aftersalesmagid = createTableID(tableName);
  62. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
  63. insertSQL.setUniqueid(sa_aftersalesmagid);
  64. insertSQL.setSiteid(siteid);
  65. insertSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  66. if (usertype == 21 || usertype == 22) {
  67. insertSQL.setValue("createflag", 0);
  68. } else {
  69. insertSQL.setValue("createflag", 1);
  70. }
  71. insertSQL.setValue("remarks", content.getStringValue("remarks"));
  72. insertSQL.setValue("billno", createBillCode("aftersalesmagbill"));
  73. insertSQL.setValue("billdate", billdate);
  74. insertSQL.setValue("createby", username);
  75. insertSQL.setDateValue("createdate");
  76. insertSQL.setValue("changeby", username);
  77. insertSQL.setDateValue("changedate");
  78. insertSQL.setValue("status", "新建");
  79. sqlList.add(insertSQL.getSQL());
  80. sqlList.add(
  81. DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "新增", "返退单新增成功").getSQL());
  82. } else {
  83. Rows rows = dbConnect.runSqlQuery(
  84. "SELECT status from sa_aftersalesmag WHERE sa_aftersalesmagid = "
  85. + sa_aftersalesmagid);
  86. if (rows.isNotEmpty()) {
  87. if (rows.get(0).getString("status").equals("新建")) {
  88. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, tableName);
  89. updateSQL.setUniqueid(sa_aftersalesmagid);
  90. updateSQL.setSiteid(siteid);
  91. updateSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  92. updateSQL.setValue("remarks", content.getStringValue("remarks"));
  93. updateSQL.setValue("billdate", billdate);
  94. updateSQL.setValue("changeby", username);
  95. updateSQL.setDateValue("changedate");
  96. sqlList.add(updateSQL.getSQL());
  97. sqlList.add(DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "更新", "返退单更新成功")
  98. .getSQL());
  99. } else {
  100. return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
  101. }
  102. } else {
  103. return getErrReturnObject().setErrMsg("该返退单不存在").toString();
  104. }
  105. }
  106. dbConnect.runSqlUpdate("delete from sa_aftersalesmag_items where siteid='"+siteid+"' and sa_aftersalesmagid="+sa_aftersalesmagid);
  107. InsertSQL insertSQLdetail = SQLFactory.createInsertSQL(this, "sa_aftersalesmag_items");
  108. insertSQLdetail.setUniqueid(createTableID("sa_aftersalesmag_items"));
  109. insertSQLdetail.setSiteid(siteid);
  110. insertSQLdetail.setValue("sa_aftersalesmagid", sa_aftersalesmagid);
  111. insertSQLdetail.setValue("name", content.getStringValue("name"));
  112. insertSQLdetail.setValue("phonenumber", content.getStringValue("phonenumber"));
  113. insertSQLdetail.setValue("address", content.getStringValue("address"));
  114. insertSQLdetail.setValue("stockdate", StringUtils.isBlank(content.getStringValue("stockdate")) ? "null" : content.getStringValue("stockdate"));
  115. insertSQLdetail.setValue("enddate", StringUtils.isBlank(content.getStringValue("enddate")) ? "null" : content.getStringValue("enddate"));
  116. insertSQLdetail.setValue("model", content.getStringValue("model"));
  117. insertSQLdetail.setValue("spec", content.getStringValue("spec"));
  118. insertSQLdetail.setValue("unitname", content.getStringValue("unitname"));
  119. insertSQLdetail.setValue("itemname", content.getStringValue("itemname"));
  120. insertSQLdetail.setValue("itemno", content.getStringValue("itemno"));
  121. insertSQLdetail.setValue("duty", content.getStringValue("duty"));
  122. insertSQLdetail.setValue("demand", content.getStringValue("demand"));
  123. insertSQLdetail.setValue("machinecode", content.getStringValue("machinecode"));
  124. insertSQLdetail.setValue("qty", content.containsKey("qty")?content.getIntValue("qty"):1);
  125. insertSQLdetail.setValue("itemid", content.getLongValue("itemid"));
  126. sqlList.add(insertSQLdetail.getSQL());
  127. dbConnect.runSqlUpdate(sqlList);
  128. content.put("sa_aftersalesmagid", sa_aftersalesmagid);
  129. return queryaftersalesmagMain();
  130. }
  131. @API(title = "返退单更新退货金额及物流单号", apiversion = R.ID20230105100203.v1.class)
  132. @CACHEING_CLEAN(apiversions = {R.ID20230104160603.v1.class, R.ID20230104160703.v1.class, R.ID20230105161503.v1.class})
  133. public String updateaftersalesmag() throws YosException {
  134. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  135. String logisticno = content.getStringValue("logisticno");
  136. BigDecimal returnamount = content.getBigDecimal("returnamount");
  137. BigDecimal payamount = content.getBigDecimal("payamount");
  138. Rows rows = dbConnect
  139. .runSqlQuery("SELECT status from sa_aftersalesmag WHERE sa_aftersalesmagid = " + sa_aftersalesmagid);
  140. if (rows.isNotEmpty()) {
  141. if (rows.get(0).getString("status").equals("复核")) {
  142. return getErrReturnObject().setErrMsg("复核状态下无法编辑退货金额及物流单号").toString();
  143. }
  144. } else {
  145. return getErrReturnObject().setErrMsg("该返退单不存在").toString();
  146. }
  147. SQLFactory sqlFactory = new SQLFactory(this, "更新返退单更新退货金额及物流单号");
  148. sqlFactory.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  149. sqlFactory.addParameter("siteid", siteid);
  150. sqlFactory.addParameter("returnamount", returnamount);
  151. sqlFactory.addParameter("payamount", payamount);
  152. sqlFactory.addParameter("logisticno", logisticno);
  153. sqlFactory.addParameter("userid", userid);
  154. sqlFactory.addParameter("username", username);
  155. dbConnect.runSqlUpdate(sqlFactory);
  156. return queryaftersalesmagMain();
  157. }
  158. @API(title = "可选择商品列表查询", apiversion = R.ID20230105110003.v1.class)
  159. @CACHEING
  160. public String queryCheckOrderList() throws YosException {
  161. if (content.containsKey("sys_enterpriseid")) {
  162. sys_enterpriseid = content.getLong("sys_enterpriseid");
  163. }
  164. /*
  165. * 过滤条件设置
  166. */
  167. StringBuffer where = new StringBuffer(" 1=1 ");
  168. if (content.containsKey("where")) {
  169. JSONObject whereObject = content.getJSONObject("where");
  170. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  171. where.append(" and(");
  172. where.append("t2.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  173. where.append("or t2.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  174. where.append("or t1.sku like'%").append(whereObject.getString("condition")).append("%' ");
  175. where.append(")");
  176. }
  177. }
  178. // String hrid = content.getString("hrid");
  179. // SQLFactory sqlFactory = new SQLFactory(this, "审核订单列表查询", pageSize, pageNumber, pageSorting);
  180. // sqlFactory.addParameter_SQL("where", where);
  181. // sqlFactory.addParameter("siteid", siteid);
  182. // sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  183. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL(false));
  184. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_itemsku ", "sku");
  185. querySQL.setTableAlias("t1");
  186. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t2", "t1.itemid=t2.itemid and t1.siteid=t2.siteid","itemid","itemno","itemname","model","spec");
  187. querySQL.addJoinTable(JOINTYPE.left, "plm_unit", "t3", "t3.unitid=t2.unitid and t3.siteid=t2.siteid","unitname");
  188. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t4", "t4.sa_agentsid=t1.sa_agentsid and t4.siteid=t1.siteid");
  189. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t5", "t5.sys_enterpriseid=t4.sys_enterpriseid and t5.siteid=t4.siteid","contact","phonenumber","address");
  190. querySQL.addJoinTable(JOINTYPE.left, "sa_warrantycard", "t6", "t6.sku=t1.sku and t6.siteid=t1.siteid","cardno","begdate","enddate");
  191. querySQL.setSiteid(siteid);
  192. querySQL.setWhere("t1.sa_agentsid in (select sa_agentsid from sa_agents where sys_enterpriseid="+sys_enterpriseid+")");
  193. querySQL.setWhere("t1.sku not in (select distinct machinecode from sa_aftersalesmag_items where siteid='"+siteid+"' and ifnull(machinecode,'')!='')");
  194. querySQL.setWhere(where.toString());
  195. querySQL.setDistinct(true);
  196. querySQL.setPage(pageSize, pageNumber);
  197. querySQL.setOrderBy(pageSorting);
  198. Rows rows = querySQL.query();
  199. return getSucReturnObject().setData(rows).toString();
  200. }
  201. @API(title = "返退单详情", apiversion = R.ID20230104160603.v1.class)
  202. @CACHEING
  203. public String queryaftersalesmagMain() throws YosException {
  204. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  205. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_aftersalesmag", "*");
  206. querySQL.setTableAlias("t1");
  207. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid","enterprisename");
  208. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid","agentnum");
  209. querySQL.addJoinTable(JOINTYPE.left, "sa_aftersalesmag_items", "t4", "t1.sa_aftersalesmagid = t4.sa_aftersalesmagid AND t1.siteid = t4.siteid","name","phonenumber","address",
  210. "stockdate","enddate","model","spec","unitname","itemname","itemno","duty","demand","machinecode","qty","itemid");
  211. querySQL.addJoinTable(JOINTYPE.left, "sa_warrantycard", "t5", "t5.sku = t4.machinecode AND t5.siteid = t4.siteid","cardno");
  212. querySQL.addQueryFields("remarksdetail","t4.remarks");
  213. querySQL.addQueryFields("reasondetail","t4.reason");
  214. querySQL.setSiteid(siteid);
  215. querySQL.setWhere("t1.sa_aftersalesmagid",sa_aftersalesmagid);
  216. querySQL.setPage(pageSize, pageNumber);
  217. Rows rows = querySQL.query();
  218. return getSucReturnObject().setData(rows).toString();
  219. }
  220. @API(title = "查询返退单列表", apiversion = R.ID20230104160703.v1.class)
  221. @CACHEING
  222. public String queryaftersalesmagList() throws YosException {
  223. StringBuffer where = new StringBuffer(" 1=1 ");
  224. if (content.containsKey("where")) {
  225. JSONObject whereObject = content.getJSONObject("where");
  226. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  227. where.append(" and(");
  228. where.append("t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  229. where.append("or t2.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  230. where.append(")");
  231. }
  232. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  233. // if(content.getString("type").equals("借用归还单")) {
  234. // where.append(" and t1.createdate >='" + whereObject.getString("startdate")).append("' ");
  235. // }else if(content.getString("type").equals("退货单")) {
  236. // where.append(" and t1.checkdate >='" + whereObject.getString("startdate")).append("' ");
  237. // }
  238. where.append(" and t1.billdate >='" + whereObject.getString("begindate")).append("' ");
  239. }
  240. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  241. // if(content.getString("type").equals("借用归还单")) {
  242. // where.append(" and t1.createdate <='" + whereObject.getString("enddate")).append("' ");
  243. // }else if(content.getString("type").equals("退货单")) {
  244. // where.append(" and t1.checkdate <='" + whereObject.getString("enddate")).append("' ");
  245. // }
  246. where.append(" and t1.billdate <='" + whereObject.getString("enddate")).append(" 23:59:59'");
  247. }
  248. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  249. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  250. }
  251. }
  252. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_aftersalesmag", "*");
  253. querySQL.setTableAlias("t1");
  254. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid","enterprisename");
  255. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid","agentnum");
  256. querySQL.addJoinTable(JOINTYPE.left, "sa_aftersalesmag_items", "t4", "t1.sa_aftersalesmagid = t4.sa_aftersalesmagid AND t1.siteid = t4.siteid","name","phonenumber","address",
  257. "stockdate","enddate","model","unitname","itemname","itemno","duty","demand","machinecode","qty","itemid");
  258. querySQL.addQueryFields("remarksdetail","t4.remarks");
  259. querySQL.addQueryFields("reasondetail","t4.reason");
  260. querySQL.setSiteid(siteid);
  261. querySQL.setWhere(where.toString());
  262. querySQL.setWhere("t1.createflag=1 or t1.status !='新建'");
  263. querySQL.setPage(pageSize, pageNumber);
  264. Rows rows = querySQL.query();
  265. // ArrayList<Long> ids = rows.toArrayList("sa_aftersalesmagid", new ArrayList<>());
  266. // //查询反退金额
  267. // RowsMap aftersalesmagReturnAmountRowsMap = Aftersalesmag.getAftersalesmagReturnAmount(this, ids);
  268. // for (Row row : rows) {
  269. //
  270. // Long id = row.getLong("sa_aftersalesmagid");
  271. // if (aftersalesmagReturnAmountRowsMap.get(id.toString()).isNotEmpty()) {
  272. // row.put("returnamount", aftersalesmagReturnAmountRowsMap.get(id.toString()).get(0).getBigDecimal("returnamount").toPlainString());
  273. // } else {
  274. // row.put("returnamount", 0);
  275. // }
  276. //
  277. // }
  278. return getSucReturnObject().setData(rows).toString();
  279. }
  280. @API(title = "删除", apiversion = R.ID20230104160803.v1.class)
  281. @CACHEING_CLEAN(apiClass = {aftersalesmag.class})
  282. public String delete() throws YosException {
  283. JSONArray sa_aftersalesmagids = content.getJSONArray("sa_aftersalesmagids");
  284. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, sa_aftersalesmagids.size());
  285. for (Object o : sa_aftersalesmagids) {
  286. long sa_aftersalesmagid = Long.parseLong(o.toString());
  287. Rows RowsStatus = dbConnect
  288. .runSqlQuery("select sa_aftersalesmagid,status from sa_aftersalesmag where siteid='" + siteid
  289. + "' and sa_aftersalesmagid='" + sa_aftersalesmagid + "'");
  290. if (RowsStatus.isNotEmpty()) {
  291. if (!RowsStatus.get(0).getString("status").equals("新建")) {
  292. batchDeleteErr.addErr(sa_aftersalesmagid, "非新建状态的返退单无法删除");
  293. continue;
  294. }
  295. }
  296. dbConnect.runSqlUpdate("delete from sa_aftersalesmag where siteid='" + siteid + "' and sa_aftersalesmagid="
  297. + sa_aftersalesmagid);
  298. dbConnect.runSqlUpdate("delete from sa_aftersalesmag_items where siteid='" + siteid + "' and sa_aftersalesmagid="
  299. + sa_aftersalesmagid);
  300. }
  301. return batchDeleteErr.getReturnObject().toString();
  302. }
  303. @API(title = "撤回反撤回", apiversion = R.ID2025061316113303.v1.class)
  304. @CACHEING_CLEAN( apiClass = {aftersalesmag.class, aftersalesmagItems.class,restcontroller.sale.aftersalesmag.aftersalesmag.class})
  305. public String chehui() throws YosException {
  306. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  307. boolean ischehui = content.getBooleanValue("ischehui");
  308. Rows rows = dbConnect.runSqlQuery("select t1.*,t3.agentnum,t2.enterprisename from sa_aftersalesmag t1 left join sys_enterprise t2 on t1.sys_enterpriseid=t2.sys_enterpriseid and t1.siteid=t2.siteid left join sa_agents t3 on t1.sys_enterpriseid=t3.sys_enterpriseid and t1.siteid=t3.siteid where t1.sa_aftersalesmagid ='"
  309. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  310. for (Row row : rows) {
  311. if (ischehui) {
  312. if (!row.getString("status").equals("提交")) {
  313. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的返退单为非提交状态,无法撤回")
  314. .toString();
  315. }
  316. } else {
  317. if (!row.getString("status").equals("已撤回")) {
  318. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的返退单为非撤回状态,无法反撤回")
  319. .toString();
  320. }
  321. }
  322. }
  323. ArrayList<String> sqlList = new ArrayList<>();
  324. SQLFactory sqlFactoryupdate;
  325. if (ischehui) {
  326. if(StringUtils.isBlank(content.getStringValue("reason"))){
  327. return getErrReturnObject().setErrMsg("请填写撤回原因")
  328. .toString();
  329. }
  330. sqlFactoryupdate = new SQLFactory(this, "返退单撤回");
  331. sqlFactoryupdate.addParameter("reason", content.getStringValue("reason"));
  332. sqlList.add(
  333. DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "撤回", "返退单撤回成功").getSQL());
  334. } else {
  335. sqlFactoryupdate = new SQLFactory(this, "返退单反撤回");
  336. sqlList.add(
  337. DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "反撤回", "返退单反撤回成功").getSQL());
  338. }
  339. sqlFactoryupdate.addParameter("siteid", siteid);
  340. sqlFactoryupdate.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  341. sqlFactoryupdate.addParameter("checkby", username);
  342. sqlList.add(sqlFactoryupdate.getSQL());
  343. dbConnect.runSqlUpdate(sqlList);
  344. return getSucReturnObject().toString();
  345. }
  346. @API(title = "确认反确认", apiversion = R.ID2025061316240103.v1.class)
  347. public String confirm() throws YosException {
  348. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  349. boolean isconfirm = content.getBooleanValue("isconfirm");
  350. Rows rows = dbConnect.runSqlQuery("select t1.*,t3.agentnum,t2.enterprisename from sa_aftersalesmag t1 left join sys_enterprise t2 on t1.sys_enterpriseid=t2.sys_enterpriseid and t1.siteid=t2.siteid left join sa_agents t3 on t1.sys_enterpriseid=t3.sys_enterpriseid and t1.siteid=t3.siteid where t1.sa_aftersalesmagid ='"
  351. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  352. for (Row row : rows) {
  353. if (isconfirm) {
  354. if (!row.getString("status").equals("提交")) {
  355. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的返退单为非提交状态,无法确认")
  356. .toString();
  357. }
  358. } else {
  359. if (!row.getString("status").equals("确认")) {
  360. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的返退单为非确认状态,无法反确认")
  361. .toString();
  362. }
  363. }
  364. }
  365. ArrayList<String> sqlList = new ArrayList<>();
  366. SQLFactory sqlFactoryupdate;
  367. if (isconfirm) {
  368. sqlFactoryupdate = new SQLFactory(this, "返退单确认");
  369. sqlList.add(
  370. DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "确认", "返退单确认成功").getSQL());
  371. } else {
  372. sqlFactoryupdate = new SQLFactory(this, "返退单反确认");
  373. sqlList.add(
  374. DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "反确认", "返退单反确认成功").getSQL());
  375. }
  376. sqlFactoryupdate.addParameter("siteid", siteid);
  377. sqlFactoryupdate.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  378. sqlFactoryupdate.addParameter("confirmby", username);
  379. sqlList.add(sqlFactoryupdate.getSQL());
  380. dbConnect.runSqlUpdate(sqlList);
  381. return getSucReturnObject().toString();
  382. }
  383. @API(title = "审核反审核", apiversion = R.ID20230104161103.v1.class)
  384. @CACHEING_CLEAN(apiClass = {aftersalesmag.class, aftersalesmagItems.class,restcontroller.sale.aftersalesmag.aftersalesmag.class})
  385. public String check() throws YosException {
  386. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  387. boolean ischeck = content.getBooleanValue("ischeck");
  388. // Rows rows = dbConnect
  389. // .runSqlQuery("select sa_aftersalesmagid,status,billno from sa_aftersalesmag where sa_aftersalesmagid ='"
  390. // + sa_aftersalesmagid + "' and siteid='" + siteid + "'");
  391. long stockid=0;
  392. long st_stockbillidold=0;
  393. Rows stockrows = dbConnect.runSqlQuery("select t1.stockid from st_stock t1 where t1.stockname ='返修仓库' and t1.siteid='" + siteid + "'");
  394. if(!stockrows.isEmpty()){
  395. stockid=stockrows.get(0).getLong("stockid");
  396. }
  397. Rows rows = dbConnect.runSqlQuery("select t1.*,t3.agentnum,t2.enterprisename from sa_aftersalesmag t1 left join sys_enterprise t2 on t1.sys_enterpriseid=t2.sys_enterpriseid and t1.siteid=t2.siteid left join sa_agents t3 on t1.sys_enterpriseid=t3.sys_enterpriseid and t1.siteid=t3.siteid where t1.sa_aftersalesmagid ='"
  398. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  399. Rows rowsdetail = dbConnect.runSqlQuery("select t1.sa_aftersalesmag_itemsid,t1.machinecode,t1.itemid,t4.itemno,t4.model,t2.batchno,t1.qty,t1.price,t1.reason from sa_aftersalesmag_items t1 left join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid left join plm_item t4 on t1.itemid=t4.itemid and t1.siteid=t4.siteid where t1.sa_aftersalesmagid ='"
  400. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  401. if(rows.isEmpty()){
  402. return getErrReturnObject().setErrMsg("返退单不存在")
  403. .toString();
  404. }
  405. if(rowsdetail.isEmpty()){
  406. return getErrReturnObject().setErrMsg("返退单明细为空,无法审核反审核")
  407. .toString();
  408. }
  409. for (Row row : rows) {
  410. if (ischeck) {
  411. if (!row.getString("status").equals("确认")) {
  412. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的返退单为非确认状态,无法审核")
  413. .toString();
  414. }
  415. } else {
  416. if (!row.getString("status").equals("审核")) {
  417. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的返退单为非审核状态,无法反审核")
  418. .toString();
  419. }
  420. Rows stockbillrows =dbConnect.runSqlQuery("select st_stockbillid,status from st_stockbill where sourceobject ='sa_aftersalesmag' and sourceid="+sa_aftersalesmagid+" and siteid='"+siteid+"'");
  421. if(stockbillrows.isNotEmpty()){
  422. st_stockbillidold=stockbillrows.get(0).getLong("st_stockbillid");
  423. if(!stockbillrows.get(0).getString("status").equals("新建")){
  424. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的返退单对应的返退入库单为非新建状态,无法反审核")
  425. .toString();
  426. }
  427. }
  428. }
  429. }
  430. ArrayList<String> sqlList = new ArrayList<>();
  431. SQLFactory sqlFactoryupdate;
  432. if (ischeck) {
  433. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill");
  434. long st_stockbillid = createTableID("st_stockbill");
  435. insertSQL.setUniqueid(st_stockbillid);
  436. insertSQL.setSiteid(siteid);
  437. insertSQL.setValue("billno", createBillCode("stockbill"));
  438. insertSQL.setValue("type", "返修入库");
  439. // insertSQL.setValue("typemx", "");
  440. insertSQL.setValue("sys_enterpriseid",rows.get(0).getLong("sys_enterpriseid"));
  441. insertSQL.setValue("rb", 1);
  442. insertSQL.setValue("sourceobject", "sa_aftersalesmag");
  443. insertSQL.setValue("sourceid", sa_aftersalesmagid);
  444. insertSQL.setValue("stockid", stockid);
  445. insertSQL.setValue("remarks", rows.get(0).getString("remarks"));
  446. insertSQL.setValue("status", "新建");
  447. insertSQL.setValue("createby",username);
  448. insertSQL.setDateValue("createdate");
  449. insertSQL.setDateValue("billdate");
  450. sqlList.add(insertSQL.getSQL());
  451. int i=1;
  452. for(Row row :rowsdetail){
  453. insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
  454. long st_stockbill_itemsid = createTableID("st_stockbill_items");
  455. insertSQL.setUniqueid(st_stockbill_itemsid);
  456. insertSQL.setSiteid(siteid);
  457. insertSQL.setValue("rowno",i);
  458. insertSQL.setValue("sa_dispatch_itemsid",0);
  459. insertSQL.setValue("sourceobject", "sa_aftersalesmag_items");
  460. insertSQL.setValue("sourceid", row.getLong("sa_aftersalesmag_itemsid"));
  461. insertSQL.setValue("stockid", row.getLong("outstockid"));
  462. insertSQL.setValue("itemid",row.getLong("itemid"));
  463. insertSQL.setValue("itemno",row.getString("itemno"));
  464. insertSQL.setValue("itemname",row.getString("itemname"));
  465. insertSQL.setValue("model",row.getString("model"));
  466. insertSQL.setValue("sku",row.getString("machinecode"));
  467. insertSQL.setValue("qty",row.getBigDecimal("qty"));
  468. insertSQL.setValue("isrepair",false);
  469. insertSQL.setValue("st_stockbillid",st_stockbillid);
  470. i++;
  471. sqlList.add(insertSQL.getSQL());
  472. }
  473. sqlFactoryupdate = new SQLFactory(this, "返退单审核");
  474. sqlList.add(
  475. DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "审核", "返退单审核成功").getSQL());
  476. } else {
  477. sqlList.add("delete from st_stockbill where sourceobject ='sa_aftersalesmag' and sourceid="+sa_aftersalesmagid+" and siteid='"+siteid+"'");
  478. sqlList.add("delete from st_stockbill_items where st_stockbillid="+st_stockbillidold+" and siteid='"+siteid+"'");
  479. sqlFactoryupdate = new SQLFactory(this, "返退单反审核");
  480. sqlList.add(
  481. DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "反审核", "返退单反审核成功").getSQL());
  482. }
  483. sqlFactoryupdate.addParameter("siteid", siteid);
  484. sqlFactoryupdate.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  485. sqlFactoryupdate.addParameter("checkby", username);
  486. sqlList.add(sqlFactoryupdate.getSQL());
  487. dbConnect.runSqlUpdate(sqlList);
  488. return getSucReturnObject().toString();
  489. }
  490. @API(title = "更新退货单退款账户", apiversion = R.ID20230706103703.v1.class)
  491. public String updateAccountclass() throws YosException {
  492. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  493. Long sa_accountclassid = content.getLong("sa_accountclassid");
  494. Rows rows = dbConnect.runSqlQuery("select * from sa_aftersalesmag where sa_aftersalesmagid=" + sa_aftersalesmagid + " and siteid='" + siteid + "'");
  495. if (rows.isEmpty()) {
  496. } else {
  497. if (!(rows.get(0).getString("status").equals("新建") || rows.get(0).getString("status").equals("审核"))) {
  498. return getErrReturnObject().setErrMsg("非新建、审核状态无法修改退款账户").toString();
  499. }
  500. }
  501. SQLFactory sqlFactory = new SQLFactory(this, "更新退货单退款账户");
  502. sqlFactory.addParameter("siteid", siteid);
  503. sqlFactory.addParameter("username", username);
  504. sqlFactory.addParameter("userid", userid);
  505. sqlFactory.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  506. sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  507. dbConnect.runSqlUpdate(sqlFactory);
  508. return queryaftersalesmagMain();
  509. }
  510. @API(title = "复核", apiversion = R.ID20230104160903.v1.class)
  511. @CACHEING_CLEAN(apiClass = {aftersalesmag.class, aftersalesmagItems.class, cashbill.class,restcontroller.sale.aftersalesmag.aftersalesmag.class})
  512. public String recheck() throws YosException {
  513. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  514. Long sa_accountclassid = content.getLongValue("sa_accountclassid");
  515. Long sa_orderid = 0L;
  516. Rows rows = dbConnect.runSqlQuery(
  517. "select t1.sa_aftersalesmagid,t1.status,t1.billno,ifnull(t1.sa_orderid,0) sa_orderid ,t1.returnamount,t1.payamount,t1.sys_enterpriseid,t1.sa_accountclassid,t2.sonum,t1.type from sa_aftersalesmag t1 left join sa_order t2 on t1.sa_orderid=t2.sa_orderid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid ='"
  518. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  519. if (rows.isEmpty()) {
  520. return getErrReturnObject().setErrMsg("该返退单不存在").toString();
  521. } else {
  522. sa_orderid = rows.get(0).getLong("sa_orderid");
  523. if (!rows.get(0).getString("status").equals("审核")) {
  524. return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的返退单为非审核状态,无法复核")
  525. .toString();
  526. }
  527. }
  528. // Rows stockbillRows = dbConnect.runSqlQuery("select * from st_stockbill_items t1 inner join st_stockbill t2 on t1.st_stockbillid=t2.st_stockbillid and t1.siteid=t2.siteid inner join sa_aftersalesmag_items t3 on t1.sa_dispatch_itemsid=t3.sa_aftersalesmag_itemsid and t1.siteid=t3.siteid where t2.status='审核' and t2.rb=0 and t1.siteid='" + siteid + "' and t3.sa_aftersalesmagid=" + sa_aftersalesmagid);
  529. // if (stockbillRows.isEmpty()) {
  530. // return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的返退单在K3中还未退货,无法复核")
  531. // .toString();
  532. // }
  533. Long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  534. if(dbConnect.runSqlQuery("SELECT 1 from sa_agents WHERE sys_enterpriseid="+sys_enterpriseid+" and status='启用'").isEmpty()){
  535. return getErrReturnObject().setErrMsg("经销商已禁用,请启用后再试。").toString();
  536. }
  537. ArrayList<String> sqlList = new ArrayList<>();
  538. Rows sa_aftersalesmag_itemsByOrderRows = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.itemid from sa_aftersalesmag_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid=" + sa_aftersalesmagid +" group by t1.itemid");
  539. for (Row row : sa_aftersalesmag_itemsByOrderRows) {
  540. BigDecimal qty = row.getBigDecimal("qty");
  541. if (rows.get(0).getString("type").equals("退货单")) {
  542. sqlList.add("update plm_item set saleqty=if((saleqty-"+qty+")>0,saleqty-"+qty+",0) where itemid=" + row.getLong("itemid"));
  543. }
  544. }
  545. Rows sa_aftersalesmag_itemsRows = dbConnect.runSqlQuery("select t1.qty,t1.sa_orderitemsid,t2.itemno,t2.itemname,t2.skucontrol from sa_aftersalesmag_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid=" + sa_aftersalesmagid);
  546. for (Row row : sa_aftersalesmag_itemsRows) {
  547. BigDecimal returnqty = row.getBigDecimal("qty");
  548. if (rows.get(0).getString("type").equals("退货单")) {
  549. sqlList.add("update sa_orderitems set returnqty=returnqty+" + returnqty + " where sa_orderitemsid=" + row.getString("sa_orderitemsid"));
  550. }
  551. }
  552. if (Parameter.getBoolean("system.ccerp_dockswitch")) {
  553. ERPDocking erpDocking =new ERPDocking(siteid);
  554. if (!erpDocking.getUrl().isEmpty()) {
  555. String billno = rows.get(0).getString("billno");
  556. String result =erpDocking.recheckErpSareturn(billno,false,this,sa_aftersalesmagid);
  557. if(!result.equals("true")){
  558. return getErrReturnObject().setErrMsg(result).toString();
  559. }
  560. }
  561. }
  562. Long sa_cashbillid = 0L;
  563. if (rows.get(0).getString("type").equals("退货单")) {
  564. if (rows.get(0).getDouble("returnamount") > 0) {
  565. /******** 生成支出凭证 ********/
  566. BigDecimal returnamount = rows.get(0).getBigDecimal("returnamount").negate();
  567. CashbillEntity cashbillEntity = new CashbillEntity();
  568. cashbillEntity.setAmount(returnamount);
  569. cashbillEntity.setOwnerid(sa_aftersalesmagid);
  570. cashbillEntity.setOwnertable("sa_aftersalesmag");
  571. cashbillEntity.setRemarks("由返退单号" + rows.get(0).getString("billno") + "复核时生成");
  572. cashbillEntity.setSource("退货单复核");
  573. if (sa_accountclassid == 0) {
  574. JSONObject cashbillPay = Accountbalance.createCashbillPay(this, sys_enterpriseid, rows.get(0).getLong("sa_accountclassid"), cashbillEntity, true);
  575. sqlList.addAll(cashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  576. sa_cashbillid = cashbillPay.getLong("sa_cashbillid");
  577. } else {
  578. sqlList.add("update sa_aftersalesmag set sa_accountclassid=" + sa_accountclassid + " where sa_aftersalesmagid=" + sa_aftersalesmagid + " and siteid='" + siteid + "'");
  579. JSONObject cashbillPay = Accountbalance.createCashbillPay(this, sys_enterpriseid, sa_accountclassid, cashbillEntity, true);
  580. sqlList.addAll(cashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  581. sa_cashbillid = cashbillPay.getLong("sa_cashbillid");
  582. }
  583. }
  584. // /**
  585. // * * 核销对冲计算
  586. // */
  587. // {
  588. // HashMap<Long, Row> orderdetailmap = new HashMap<>();
  589. // HashMap<Long, BigDecimal> orderdetailchangeamount = new HashMap<>();
  590. // Rows rowsOrder = dbConnect.runSqlQuery("select * from sa_order t1 where t1.sa_orderid=" + sa_orderid);
  591. // Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.price,t1.returnqty,t1.amount,t1.sa_orderitemsid,t1.writeoffamount from sa_orderitems t1 where t1.sa_orderid=" + sa_orderid);
  592. // RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
  593. // Rows sa_aftersalesmag_itemsRows = dbConnect.runSqlQuery("select t1.qty,t1.sa_orderitemsid,t2.itemno,t2.itemname from sa_aftersalesmag_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid=" + sa_aftersalesmagid);
  594. // for (Row row : sa_aftersalesmag_itemsRows) {
  595. // Rows orderitemsRows = rowsMap.get(row.getString("sa_orderitemsid"));
  596. // BigDecimal price = orderitemsRows.get(0).getBigDecimal("price");
  597. // BigDecimal qty = row.getBigDecimal("qty");
  598. // BigDecimal returnamount_detail = qty.multiply(price);//退货金额
  599. // BigDecimal writeoffamount = orderitemsRows.get(0).getBigDecimal("writeoffamount");//订单行已核销金额
  600. // if (writeoffamount.compareTo(BigDecimal.ZERO) > 0 && (orderitemsRows.get(0).getBigDecimal("amount").subtract(returnamount_detail)).compareTo(writeoffamount) < 0) {
  601. // //如果已核销金额大于0 且调整后折后金额小于已核销金额,则需要将差价进行回冲
  602. // orderdetailmap.put(orderitemsRows.get(0).getLong("sa_orderitemsid"), orderitemsRows.get(0));
  603. // orderdetailchangeamount.put(orderitemsRows.get(0).getLong("sa_orderitemsid"), writeoffamount.subtract(orderitemsRows.get(0).getBigDecimal("amount").subtract(returnamount_detail)));
  604. // }
  605. // }
  606. //
  607. // /**
  608. // * * 核销对冲
  609. // */
  610. // if (!orderdetailmap.isEmpty()) {
  611. // sqlList.addAll(new twriteoffbill_orderchange(rowsOrder.get(0), orderdetailmap, orderdetailchangeamount).hedging());
  612. // }
  613. // }
  614. }
  615. SQLFactory sqlFactoryupdate = new SQLFactory(this, "返退单复核");
  616. sqlFactoryupdate.addParameter("siteid", siteid);
  617. sqlFactoryupdate.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  618. sqlFactoryupdate.addParameter("recheckby", username);
  619. sqlList.add(sqlFactoryupdate.getSQL());
  620. sqlList.add(DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "复核", "返退单复核成功").getSQL());
  621. dbConnect.runSqlUpdate(sqlList);
  622. String type = rows.get(0).getString("type");
  623. Rows aftersalesmagrows = dbConnect.runSqlQuery(
  624. "select t1.sa_aftersalesmagid,t1.sa_accountclassid,t2.accountname,t1.returnamount from sa_aftersalesmag t1 left join sa_accountclass t2 on t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid ='"
  625. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  626. if (type.equals("退货单")) {
  627. String message = "您的返退申请单" + rows.get(0).getString("billno") + "已复核,,您的【" + aftersalesmagrows.get(0).getString("accountname") + "】账户已收入【" + aftersalesmagrows.get(0).getString("returnamount") + "】元!";
  628. sendMsg(message, sa_aftersalesmagid, sys_enterpriseid);
  629. Accountbalance.remindSend(this, sys_enterpriseid, sa_cashbillid);
  630. ArrayList<Long> userIdList = dbConnect.runSqlQuery("select userid from sys_enterprise_hr where siteid='" + siteid + "' and isleader=1 and sys_enterpriseid=" + sys_enterpriseid).toArrayList("userid", new ArrayList<>());
  631. Executor.sendEml(this, "aftersale_check", sa_aftersalesmagid, siteid, userIdList);
  632. }
  633. return getSucReturnObject().toString();
  634. }
  635. @API(title = "反复核", apiversion = R.ID20230523085403.v1.class)
  636. @CACHEING_CLEAN(apiversions = {R.ID20230104160603.v1.class, R.ID20230104160703.v1.class, R.ID20230105110903.class, R.ID20230105161503.v1.class}, apiClass = {aftersalesmag.class, aftersalesmagItems.class, cashbill.class})
  637. public String unrecheck() throws YosException {
  638. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  639. Long sa_orderid = 0L;
  640. Rows rows = dbConnect.runSqlQuery(
  641. "select t1.sa_aftersalesmagid,t1.status,t1.billno,ifnull(t1.sa_orderid,0) sa_orderid ,t1.returnamount,t1.payamount,t1.sys_enterpriseid,t1.sa_accountclassid,t2.sonum,t1.type from sa_aftersalesmag t1 left join sa_order t2 on t1.sa_orderid=t2.sa_orderid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid ='"
  642. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  643. if (rows.isEmpty()) {
  644. return getErrReturnObject().setErrMsg("该返退单不存在").toString();
  645. } else {
  646. sa_orderid = rows.get(0).getLong("sa_orderid");
  647. if (!rows.get(0).getString("status").equals("复核")) {
  648. return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的返退单为非复核状态,无法反复核")
  649. .toString();
  650. }
  651. }
  652. Rows stockbillRows = dbConnect.runSqlQuery("select * from st_stockbill_items t1 inner join st_stockbill t2 on t1.st_stockbillid=t2.st_stockbillid and t1.siteid=t2.siteid inner join sa_aftersalesmag_items t3 on t1.sa_dispatch_itemsid=t3.sa_aftersalesmag_itemsid and t1.siteid=t3.siteid where t2.status='审核' and t2.rb=0 and t1.siteid='" + siteid + "' and t3.sa_aftersalesmagid=" + sa_aftersalesmagid);
  653. if (stockbillRows.isNotEmpty()) {
  654. return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的返退单在K3中的红字出库单还未删除,无法复核")
  655. .toString();
  656. }
  657. ArrayList<String> sqlList = new ArrayList<>();
  658. Rows sa_aftersalesmag_itemsRows = dbConnect.runSqlQuery("select t1.qty,t1.sa_orderitemsid,t2.itemno,t2.itemname from sa_aftersalesmag_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid=" + sa_aftersalesmagid);
  659. for (Row row : sa_aftersalesmag_itemsRows) {
  660. BigDecimal returnqty = row.getBigDecimal("qty");
  661. if (rows.get(0).getString("type").equals("退货单")) {
  662. sqlList.add("update sa_orderitems set returnqty=returnqty-" + returnqty + " where sa_orderitemsid=" + row.getString("sa_orderitemsid"));
  663. }
  664. }
  665. // if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true") ) {
  666. // ERPDocking erpDocking =new ERPDocking(siteid);
  667. // if (!erpDocking.getUrl().isEmpty()) {
  668. // String billno = rows.get(0).getString("billno");
  669. // String result =erpDocking.recheckErpSareturn(billno,true,this,sa_aftersalesmagid);
  670. // if(!result.equals("true")){
  671. // return getErrReturnObject().setErrMsg(result).toString();
  672. // }
  673. // }
  674. //
  675. // }
  676. Long sa_cashbillid = 0L;
  677. long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  678. String type = rows.get(0).getString("type");
  679. if (type.equals("退货单")) {
  680. if (rows.get(0).getDouble("returnamount") > 0) {
  681. /******** 生成支出凭证 ********/
  682. BigDecimal returnamount = rows.get(0).getBigDecimal("returnamount");
  683. CashbillEntity cashbillEntity = new CashbillEntity();
  684. cashbillEntity.setAmount(returnamount);
  685. cashbillEntity.setOwnerid(sa_aftersalesmagid);
  686. cashbillEntity.setOwnertable("sa_aftersalesmag");
  687. cashbillEntity.setRemarks("由返退单号" + rows.get(0).getString("billno") + "反复核时生成" );
  688. cashbillEntity.setSource("退货单反复核");
  689. if (!Accountbalance.judgeBalance(this, sys_enterpriseid, rows.get(0).getLong("sa_accountclassid"), returnamount)) {
  690. return getErrReturnObject().setErrMsg("经销商账户余额不足无法反复核")
  691. .toString();
  692. }
  693. // Rows sa_aftersalesmag_itemsRows = dbConnect.runSqlQuery("select t1.qty,t1.sa_orderitemsid,t2.itemno,t2.itemname,t2.skucontrol from sa_aftersalesmag_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid=" + sa_aftersalesmagid);
  694. // for (Row row : sa_aftersalesmag_itemsRows) {
  695. // BigDecimal returnqty = row.getBigDecimal("qty");
  696. // if(rows.get(0).getString("type").equals("退货单")){
  697. // sqlList.add("update sa_orderitems set returnqty=returnqty-" + returnqty + " where sa_orderitemsid=" + row.getString("sa_orderitemsid"));
  698. // }
  699. // }
  700. JSONObject cashbillPay = Accountbalance.createCashbillPay(this, sys_enterpriseid, rows.get(0).getLong("sa_accountclassid"), cashbillEntity, true);
  701. sqlList.addAll(cashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  702. sa_cashbillid = cashbillPay.getLong("sa_cashbillid");
  703. }
  704. }
  705. SQLFactory sqlFactoryupdate = new SQLFactory(this, "返退单反复核");
  706. sqlFactoryupdate.addParameter("siteid", siteid);
  707. sqlFactoryupdate.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  708. sqlFactoryupdate.addParameter("recheckby", username);
  709. sqlList.add(sqlFactoryupdate.getSQL());
  710. sqlList.add(DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "反复核", "返退单反复核成功").getSQL());
  711. dbConnect.runSqlUpdate(sqlList);
  712. if (type.equals("退货单")) {
  713. String message = "您的退货单" + rows.get(0).getString("billno") + "已反复核,,退款已从账户扣除,请及时查看!";
  714. sendMsg(message, sa_aftersalesmagid, sys_enterpriseid);
  715. Accountbalance.remindSend(this, sys_enterpriseid, sa_cashbillid);
  716. }
  717. return getSucReturnObject().toString();
  718. }
  719. @API(title = "关闭", apiversion = R.ID20230522090403.v1.class)
  720. @CACHEING_CLEAN(apiversions = {R.ID20230104160603.v1.class, R.ID20230104160703.v1.class, R.ID20230105110903.class, R.ID20230105161503.v1.class}, apiClass = {aftersalesmag.class, aftersalesmagItems.class, cashbill.class})
  721. public String close() throws YosException {
  722. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  723. Long sa_orderid = 0L;
  724. Rows rows = dbConnect.runSqlQuery(
  725. "select t1.sa_aftersalesmagid,t1.status,t1.billno,ifnull(t1.sa_orderid,0) sa_orderid ,t1.returnamount,t1.payamount,t1.sys_enterpriseid,t1.sa_accountclassid,t2.sonum,t1.type from sa_aftersalesmag t1 left join sa_order t2 on t1.sa_orderid=t2.sa_orderid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid ='"
  726. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  727. if (rows.isEmpty()) {
  728. return getErrReturnObject().setErrMsg("该返退单不存在").toString();
  729. } else {
  730. sa_orderid = rows.get(0).getLong("sa_orderid");
  731. if (!rows.get(0).getString("status").equals("审核")) {
  732. return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的返退单为非审核状态,无法关闭")
  733. .toString();
  734. }
  735. }
  736. ArrayList<String> sqlList = new ArrayList<>();
  737. if (Parameter.getBoolean("system.ccerp_dockswitch")) {
  738. ERPDocking erpDocking = new ERPDocking(siteid);
  739. if (!erpDocking.getUrl().isEmpty()) {
  740. String billno = rows.get(0).getString("billno");
  741. String result = erpDocking.recheckErpSareturn(billno, true, this, sa_aftersalesmagid);
  742. if (!result.equals("true")) {
  743. return getErrReturnObject().setErrMsg(result).toString();
  744. }
  745. }
  746. }
  747. if (rows.get(0).getString("type").equals("退货单")) {
  748. Rows sa_aftersalesmag_itemsRows = dbConnect.runSqlQuery("select t1.qty,t1.sa_orderitemsid,t2.itemno,t2.itemname,t2.skucontrol from sa_aftersalesmag_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid=" + sa_aftersalesmagid);
  749. for (Row row : sa_aftersalesmag_itemsRows) {
  750. BigDecimal returnqty = row.getBigDecimal("qty");
  751. if (rows.get(0).getString("type").equals("退货单")) {
  752. sqlList.add("update sa_orderitems set returnqty=returnqty-" + returnqty + " where sa_orderitemsid=" + row.getString("sa_orderitemsid"));
  753. }
  754. }
  755. }
  756. SQLFactory sqlFactoryupdate = new SQLFactory(this, "返退单关闭");
  757. sqlFactoryupdate.addParameter("siteid", siteid);
  758. sqlFactoryupdate.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  759. sqlFactoryupdate.addParameter("closeby", username);
  760. sqlList.add(sqlFactoryupdate.getSQL());
  761. sqlList.add(DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "关闭", "返退单关闭成功").getSQL());
  762. dbConnect.runSqlUpdate(sqlList);
  763. String type = rows.get(0).getString("type");
  764. Long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  765. if (type.equals("退货单")) {
  766. String message = "您的退货单" + rows.get(0).getString("billno") + "已关闭,请及时查收!";
  767. sendMsg(message, sa_aftersalesmagid, sys_enterpriseid);
  768. }
  769. return getSucReturnObject().toString();
  770. }
  771. public void sendMsg(String content, Long sa_aftersalesmagid, Long sys_enterpriseid) throws YosException {
  772. ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid).toArrayList("userid", new ArrayList<>());
  773. Remind remind = new Remind(this);
  774. remind.setTitle("退/换货单消息");
  775. remind.setContent(content);
  776. remind.setType("应用");
  777. remind.setObjectid(sa_aftersalesmagid);
  778. remind.setObjectname("sa_aftersalesmag");
  779. remind.setTouserid(userList);
  780. remind.sendByDialogMsg().createSys_message();
  781. }
  782. @API(title = "查询企业", apiversion = R.ID20230221170804.v1.class)
  783. public String queryenter() throws YosException {
  784. StringBuffer where = new StringBuffer(" 1=1 ");
  785. if (content.containsKey("where")) {
  786. JSONObject whereObject = content.getJSONObject("where");
  787. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  788. where.append(" and(");
  789. where.append("t1.phonenumber like'%").append(whereObject.getString("condition")).append("%' ");
  790. where.append("or t1.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  791. where.append(")");
  792. }
  793. }
  794. ArrayList<Long> agents = Hr.getAgents(this, hrid);
  795. // SQLFactory sqlFactory = new SQLFactory(this, "企业查询", pageSize, pageNumber, pageSorting);
  796. // sqlFactory.addParameter("siteid", siteid);
  797. // sqlFactory.addParameter_in("ids", agents.toArray());
  798. // sqlFactory.addParameter_SQL("where", where);
  799. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  800. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_enterpriseid", "enterprisename", "contact",
  801. "address","phonenumber","province","city","county","grade");
  802. querySQL.setTableAlias("t1");
  803. querySQL.addJoinTable(JOINTYPE.inner, "sa_agents", "t2", "t1.siteid = t2.siteid and t1.sys_enterpriseid = t2.sys_enterpriseid","isservice","sa_agentsid","agentnum"
  804. ,"type","signdate","createby","createdate","status");
  805. querySQL.setSiteid(siteid);
  806. querySQL.setWhere("t1.sys_enterpriseid",agents.toArray());
  807. querySQL.setWhere(where.toString());
  808. querySQL.setPage(pageSize, pageNumber);
  809. querySQL.setOrderBy(pageSorting);
  810. Rows rows = querySQL.query();
  811. return getSucReturnObject().setData(rows).toString();
  812. }
  813. @API(title = "反复核", apiversion = R.ID20230104161003.v1.class)
  814. @CACHEING_CLEAN(apiversions = {R.ID20230104160603.v1.class, R.ID20230104160703.v1.class, R.ID20230105110903.class, R.ID20230105161503.v1.class}, apiClass = {aftersalesmag.class, aftersalesmagItems.class, cashbill.class})
  815. public String uncheck() throws YosException {
  816. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  817. Long sa_orderid = 0L;
  818. Rows rows = dbConnect.runSqlQuery(
  819. "select t1.sa_aftersalesmagid,t1.status,t1.billno,ifnull(t1.sa_orderid,0) sa_orderid ,t1.returnamount,t1.payamount,t1.sys_enterpriseid,t1.sa_accountclassid,t2.sonum,t1.type from sa_aftersalesmag t1 left join sa_order t2 on t1.sa_orderid=t2.sa_orderid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid ='"
  820. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  821. if (rows.isEmpty()) {
  822. return getErrReturnObject().setErrMsg("该返退单不存在").toString();
  823. } else {
  824. sa_orderid = rows.get(0).getLong("sa_orderid");
  825. if (!rows.get(0).getString("status").equals("复核")) {
  826. return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的返退单为非复核状态,无法反复核")
  827. .toString();
  828. }
  829. }
  830. ArrayList<String> sqlList = new ArrayList<>();
  831. if (Parameter.getBoolean("system.ccerp_dockswitch")) {
  832. ERPDocking erpDocking = new ERPDocking(siteid);
  833. if (!erpDocking.getUrl().isEmpty()) {
  834. String billno = rows.get(0).getString("billno");
  835. JSONArray jsonArray = erpDocking.queryErpSareturn(billno);
  836. if (!jsonArray.isEmpty()) {
  837. return getErrReturnObject().setErrMsg("请在erp中删除该返退单后进行此反复核操作").toString();
  838. }
  839. }
  840. }
  841. Long sa_cashbillid = 0L;
  842. long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  843. String type = rows.get(0).getString("type");
  844. if (type.equals("退货单")) {
  845. if (rows.get(0).getDouble("returnamount") != 0) {
  846. /******** 生成支出凭证 ********/
  847. BigDecimal returnamount = rows.get(0).getBigDecimal("returnamount");
  848. CashbillEntity cashbillEntity = new CashbillEntity();
  849. cashbillEntity.setAmount(returnamount);
  850. cashbillEntity.setOwnerid(sa_aftersalesmagid);
  851. cashbillEntity.setOwnertable("sa_aftersalesmag");
  852. cashbillEntity.setRemarks("退货单号:" + rows.get(0).getString("billno") + ";订单号:" + rows.get(0).getString("sonum"));
  853. cashbillEntity.setSource("退货单反复核");
  854. JSONObject cashbillPay = Accountbalance.createCashbillPay(this, sys_enterpriseid, rows.get(0).getLong("sa_accountclassid"), cashbillEntity, true);
  855. sqlList.addAll(cashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  856. sa_cashbillid = cashbillPay.getLong("sa_cashbillid");
  857. }
  858. }
  859. SQLFactory sqlFactoryupdate = new SQLFactory(this, "返退单反复核");
  860. sqlFactoryupdate.addParameter("siteid", siteid);
  861. sqlFactoryupdate.addParameter("sa_aftersalesmagid", sa_aftersalesmagid);
  862. sqlFactoryupdate.addParameter("recheckby", username);
  863. sqlList.add(sqlFactoryupdate.getSQL());
  864. sqlList.add(DataContrlLog.createLog(this, "sa_aftersalesmag", sa_aftersalesmagid, "反复核", "返退单反复核成功").getSQL());
  865. dbConnect.runSqlUpdate(sqlList);
  866. if (type.equals("退货单")) {
  867. Accountbalance.remindSend(this, sys_enterpriseid, sa_cashbillid);
  868. }
  869. return getSucReturnObject().toString();
  870. }
  871. @API(title = "判断当前账户余额是否足够", apiversion = R.ID20230417141103.v1.class)
  872. public String judgeBalance() throws YosException {
  873. Long sa_aftersalesmagid = content.getLong("sa_aftersalesmagid");
  874. Rows rows = dbConnect.runSqlQuery(
  875. "select t1.sa_aftersalesmagid,t1.status,t1.billno,ifnull(t1.sa_orderid,0) sa_orderid ,t1.returnamount,t1.payamount,t1.sys_enterpriseid,t1.sa_accountclassid,t2.sonum,t1.type from sa_aftersalesmag t1 left join sa_order t2 on t1.sa_orderid=t2.sa_orderid and t1.siteid=t2.siteid where t1.sa_aftersalesmagid ='"
  876. + sa_aftersalesmagid + "' and t1.siteid='" + siteid + "'");
  877. if (rows.isEmpty()) {
  878. return getErrReturnObject().setErrMsg("该返退单不存在").toString();
  879. }
  880. boolean flag = Accountbalance.judgeBalance(this, rows.get(0).getLong("sys_enterpriseid"), rows.get(0).getLong("sa_accountclassid"), rows.get(0).getBigDecimal("returnamount"));
  881. return getSucReturnObject().setData(flag).toString();
  882. }
  883. }