tpartreimbursement.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. package restcontroller.webmanage.sale.tpartreimbursement;
  2. import beans.accountbalance.Accountbalance;
  3. import beans.accountbalance.CashbillEntity;
  4. import beans.data.BatchDeleteErr;
  5. import beans.datacontrllog.DataContrlLog;
  6. import com.alibaba.fastjson2.JSONArray;
  7. import com.alibaba.fastjson2.JSONObject;
  8. import common.Controller;
  9. import common.YosException;
  10. import common.annotation.API;
  11. import common.annotation.CACHEING;
  12. import common.annotation.CACHEING_CLEAN;
  13. import common.data.*;
  14. import org.apache.commons.lang.StringUtils;
  15. import restcontroller.R;
  16. import restcontroller.sale.stockbill.stockbill;
  17. import restcontroller.webmanage.sale.order.Order;
  18. import restcontroller.webmanage.sale.order.OrderItems;
  19. import java.math.BigDecimal;
  20. import java.text.SimpleDateFormat;
  21. import java.util.ArrayList;
  22. import java.util.Calendar;
  23. import java.util.List;
  24. import static beans.stockbill.bills.XSCK.getCashbillEntity;
  25. @API(title = "配件核销单")
  26. public class tpartreimbursement extends Controller {
  27. public tpartreimbursement(JSONObject content) throws YosException {
  28. super(content);
  29. }
  30. @API(title = "新增更新配件核销单", apiversion = R.ID2025081811143103.v1.class)
  31. @CACHEING_CLEAN(apiClass = {tpartreimbursement.class})
  32. public String insertormodify_tpartreimbursement() throws YosException {
  33. ArrayList<String> sqlList = new ArrayList<>();
  34. // 表名
  35. String tableName = "sa_tpartreimbursement";
  36. Long sa_tpartreimbursementid = content.getLong("sa_tpartreimbursementid");
  37. String remarks = content.getStringValue("remarks");
  38. String billdate = content.getStringValue("billdate");
  39. if (sys_enterpriseid <= 0) {
  40. sys_enterpriseid = content.getLong("sys_enterpriseid");
  41. }
  42. if (sa_tpartreimbursementid <= 0) {
  43. sa_tpartreimbursementid = createTableID(tableName);
  44. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
  45. insertSQL.setUniqueid(sa_tpartreimbursementid);
  46. insertSQL.setSiteid(siteid);
  47. insertSQL.setValue("billdate", StringUtils.isBlank(billdate) ? getDateTime_Str() : billdate);
  48. insertSQL.setValue("remarks", remarks);
  49. insertSQL.setValue("billno", createBillCode("tpartreimbursement"));
  50. insertSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  51. insertSQL.setValue("createby", username);
  52. insertSQL.setDateValue("createdate");
  53. insertSQL.setValue("changeby", username);
  54. insertSQL.setDateValue("changedate");
  55. insertSQL.setValue("status", "新建");
  56. //制单方 1表示工厂方,0表示客户方
  57. if (usertype == 21 || usertype == 22) {
  58. insertSQL.setValue("createflag", 0);
  59. } else {
  60. insertSQL.setValue("createflag", 1);
  61. }
  62. sqlList.add(insertSQL.getSQL());
  63. sqlList.add(DataContrlLog.createLog(this, "sa_tpartreimbursement", sa_tpartreimbursementid, "新增", "配件核销单新增成功").getSQL());
  64. } else {
  65. Rows rows = dbConnect.runSqlQuery(
  66. "SELECT status from sa_tpartreimbursement WHERE sa_tpartreimbursementid = "
  67. + sa_tpartreimbursementid);
  68. if (rows.isNotEmpty()) {
  69. if (rows.get(0).getString("status").equals("新建")) {
  70. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, tableName);
  71. updateSQL.setUniqueid(sa_tpartreimbursementid);
  72. updateSQL.setSiteid(siteid);
  73. updateSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  74. updateSQL.setValue("remarks", remarks);
  75. updateSQL.setValue("changeby", username);
  76. updateSQL.setDateValue("changedate");
  77. sqlList.add(updateSQL.getSQL());
  78. sqlList.add(DataContrlLog.createLog(this, "sa_tpartreimbursement", sa_tpartreimbursementid, "更新", "配件核销单更新成功").getSQL());
  79. } else {
  80. return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
  81. }
  82. } else {
  83. return getErrReturnObject().setErrMsg("该配件核销单不存在").toString();
  84. }
  85. }
  86. dbConnect.runSqlUpdate(sqlList);
  87. content.put("sa_tpartreimbursementid", sa_tpartreimbursementid);
  88. return query_tpartreimbursementMain();
  89. }
  90. @API(title = "配件核销单详情", apiversion = R.ID2025081811144603.v1.class)
  91. @CACHEING
  92. public String query_tpartreimbursementMain() throws YosException {
  93. long sa_tpartreimbursementid = content.getLong("sa_tpartreimbursementid");
  94. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursement", "*");
  95. querySQL.setTableAlias("t1");
  96. querySQL.setWhere("t1.siteid", siteid);
  97. querySQL.setWhere("t1.sa_tpartreimbursementid", sa_tpartreimbursementid);
  98. Rows rows = querySQL.query();
  99. // QuerySQL querySQLdetail = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementid", "sa_tpartreimbursementdetailid","qty");
  100. // querySQLdetail.setTableAlias("t1");
  101. // querySQLdetail.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid", "price");
  102. // querySQLdetail.setWhere("t1.siteid", siteid);
  103. // querySQLdetail.setWhere("t1.sa_tpartreimbursementid", rows.toArrayList("sa_tpartreimbursementid"));
  104. // Rows rowsdetail = querySQL.query();
  105. // RowsMap rowsMap = rowsdetail.toRowsMap("sa_tpartreimbursementid");
  106. // for (Row row : rows) {
  107. // row.put("totalamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).sum("amount"));
  108. // row.put("offamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).toRowsMap("offstatus").get("已核销").sum("amount"));
  109. // }
  110. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  111. return getSucReturnObject().setData(row).toString();
  112. }
  113. @API(title = "配件核销单列表", apiversion = R.ID2025081811145503.v1.class)
  114. @CACHEING
  115. public String querysa_tpartreimbursementList() throws YosException {
  116. StringBuffer where = new StringBuffer(" 1=1 ");
  117. if (sys_enterpriseid > 0) {
  118. where.append(" and t1.sys_enterpriseid=" + sys_enterpriseid);
  119. }
  120. if (content.containsKey("where")) {
  121. JSONObject whereObject = content.getJSONObject("where");
  122. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  123. where.append(" and(");
  124. where.append("t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
  125. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  126. where.append(")");
  127. }
  128. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  129. where.append(" and t1.billdate >='").append(whereObject.getString("begindate")).append("' ");
  130. }
  131. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  132. where.append(" and t1.billdate <='").append(whereObject.getString("enddate")).append("' ");
  133. }
  134. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  135. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  136. }
  137. }
  138. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursement", "*");
  139. querySQL.setTableAlias("t1");
  140. querySQL.setWhere("t1.siteid", siteid);
  141. querySQL.setWhere(where);
  142. querySQL.setPage(pageSize, pageNumber);
  143. Rows rows = querySQL.query();
  144. // QuerySQL querySQLdetail = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementid", "sa_tpartreimbursementdetailid");
  145. // querySQLdetail.setTableAlias("t1");
  146. // querySQLdetail.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid", "*");
  147. // querySQLdetail.setWhere("t1.siteid", siteid);
  148. // querySQLdetail.setWhere("t1.sa_tpartreimbursementid", rows.toArrayList("sa_tpartreimbursementid"));
  149. // Rows rowsdetail = querySQL.query();
  150. // RowsMap rowsMap = rowsdetail.toRowsMap("sa_tpartreimbursementid");
  151. // for (Row row : rows) {
  152. // row.put("totalamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).sum("amount"));
  153. // row.put("offamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).toRowsMap("offstatus").get("已核销").sum("amount"));
  154. // }
  155. return getSucReturnObject().setData(rows).toString();
  156. }
  157. @API(title = "删除", apiversion = R.ID2025081811150603.v1.class)
  158. @CACHEING_CLEAN(apiClass = {tpartreimbursement.class})
  159. public String delete() throws YosException {
  160. JSONArray sa_tpartreimbursementids = content.getJSONArray("sa_tpartreimbursementids");
  161. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, sa_tpartreimbursementids.size());
  162. for (Object o : sa_tpartreimbursementids) {
  163. long sa_tpartreimbursementid = Long.parseLong(o.toString());
  164. Rows RowsStatus = dbConnect.runSqlQuery("select sa_tpartreimbursementid,status from sa_tpartreimbursement where siteid='"
  165. + siteid + "' and sa_tpartreimbursementid='" + sa_tpartreimbursementid + "'");
  166. if (RowsStatus.isNotEmpty()) {
  167. if (!RowsStatus.get(0).getString("status").equals("新建")) {
  168. batchDeleteErr.addErr(sa_tpartreimbursementid, "非新建状态的配件核销单无法删除");
  169. continue;
  170. }
  171. }
  172. ArrayList<String> sqllist = new ArrayList<>();
  173. sqllist.add("delete from sa_tpartreimbursement where siteid='" + siteid + "' and sa_tpartreimbursementid=" + sa_tpartreimbursementid);
  174. sqllist.add("delete from sa_tpartreimbursementdetail where siteid='" + siteid + "' and sa_tpartreimbursementid=" + sa_tpartreimbursementid);
  175. dbConnect.runSqlUpdate(sqllist);
  176. }
  177. return batchDeleteErr.getReturnObject().toString();
  178. }
  179. @API(title = "提交反提交", apiversion = R.ID2025081811223203.v1.class)
  180. @CACHEING_CLEAN(apiClass = {tpartreimbursement.class})
  181. public String submit() throws YosException {
  182. Long sa_tpartreimbursementid = content.getLong("sa_tpartreimbursementid");
  183. boolean issubmit = content.getBooleanValue("issubmit");
  184. Rows rows = dbConnect.runSqlQuery("select t1.billno,t1.status,createflag from sa_tpartreimbursement t1 where t1.sa_tpartreimbursementid ='"
  185. + sa_tpartreimbursementid + "' and t1.siteid='" + siteid + "'");
  186. for (Row row : rows) {
  187. if (issubmit) {
  188. if (!row.getString("status").equals("新建")) {
  189. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的配件核销单为非新建状态,无法提交")
  190. .toString();
  191. }
  192. } else {
  193. if (!row.getString("status").equals("提交")) {
  194. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的配件核销单为非提交状态,无法反提交")
  195. .toString();
  196. }
  197. }
  198. }
  199. ArrayList<String> sqlList = new ArrayList<>();
  200. if (issubmit) {
  201. Rows rowsdetail = dbConnect.runSqlQuery("select t1.sa_orderitemsid from sa_tpartreimbursementdetail t1 where t1.sa_tpartreimbursementid ='"
  202. + sa_tpartreimbursementid + "' and t1.siteid='" + siteid + "'");
  203. QuerySQL tpartreimbursementdetailQuery = SQLFactory.createQuerySQL(dbConnect, "sa_tpartreimbursementdetail", "sa_orderitemsid");
  204. tpartreimbursementdetailQuery.addQueryFields("sumqty", "sum(qty)");
  205. tpartreimbursementdetailQuery.setWhere("sa_orderitemsid", rowsdetail.toArrayList("sa_orderitemsid"));
  206. tpartreimbursementdetailQuery.addGroupBy("sa_orderitemsid");
  207. QuerySQL orderitemsQuery = SQLFactory.createQuerySQL(dbConnect, "sa_orderitems", "sa_orderitemsid");
  208. orderitemsQuery.setTableAlias("t1");
  209. orderitemsQuery.addJoinTable(JOINTYPE.left,tpartreimbursementdetailQuery,"t2","t1.sa_orderitemsid=t2.sa_orderitemsid");
  210. orderitemsQuery.setWhere("t1.sa_orderitemsid", rowsdetail.toArrayList("sa_orderitemsid"));
  211. orderitemsQuery.addQueryFields("qty", "t1.tobeoffqty-ifnull(t2.sumqty,0)");
  212. Rows orderitemsrows = orderitemsQuery.query();
  213. if(!rows.get(0).getBoolean("createflag")){
  214. for (Row row :orderitemsrows) {
  215. if(row.getBigDecimal("qty").compareTo(BigDecimal.ZERO)<0){
  216. return getErrReturnObject().setErrMsg("该配件核销单数量不符合要求,请检查").toString();
  217. }
  218. }
  219. }
  220. sqlList.add(
  221. DataContrlLog.createLog(this, "sa_tpartreimbursement", sa_tpartreimbursementid, "提交", "配件核销单提交成功").getSQL());
  222. } else {
  223. sqlList.add(
  224. DataContrlLog.createLog(this, "sa_tpartreimbursement", sa_tpartreimbursementid, "反提交", "配件核销单反提交成功").getSQL());
  225. }
  226. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_tpartreimbursement");
  227. updateSQL.setUniqueid(sa_tpartreimbursementid);
  228. updateSQL.setSiteid(siteid);
  229. updateSQL.setValue("status", issubmit ? "提交" : "新建");
  230. updateSQL.setValue("submitby", issubmit ? username : "");
  231. if (issubmit) {
  232. updateSQL.setDateValue("submitdate");
  233. } else {
  234. updateSQL.setValue("submitdate", "null");
  235. }
  236. sqlList.add(updateSQL.getSQL());
  237. dbConnect.runSqlUpdate(sqlList);
  238. return getSucReturnObject().toString();
  239. }
  240. @API(title = "审核", apiversion = R.ID2025081811295903.v1.class)
  241. @CACHEING_CLEAN(apiClass = {tpartreimbursement.class})
  242. public String check() throws YosException {
  243. Long sa_tpartreimbursementid = content.getLong("sa_tpartreimbursementid");
  244. Rows rows = dbConnect.runSqlQuery("select t1.billno,t1.status from sa_tpartreimbursement t1 where t1.sa_tpartreimbursementid ='"
  245. + sa_tpartreimbursementid + "' and t1.siteid='" + siteid + "'");
  246. for (Row row : rows) {
  247. if (!row.getString("status").equals("提交")) {
  248. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的配件核销单为非提交状态,无法审核")
  249. .toString();
  250. }
  251. }
  252. ArrayList<String> sqlList = new ArrayList<>();
  253. sqlList.add(
  254. DataContrlLog.createLog(this, "sa_tpartreimbursement", sa_tpartreimbursementid, "审核", "配件核销单审核成功").getSQL());
  255. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_tpartreimbursement");
  256. updateSQL.setUniqueid(sa_tpartreimbursementid);
  257. updateSQL.setSiteid(siteid);
  258. updateSQL.setValue("status", "审核");
  259. updateSQL.setValue("checkby", username);
  260. updateSQL.setDateValue("checkdate");
  261. sqlList.add(updateSQL.getSQL());
  262. dbConnect.runSqlUpdate(sqlList);
  263. return getSucReturnObject().toString();
  264. }
  265. @API(title = "选择要核销的配件核销单明细", apiversion = R.ID2025081909593203.v1.class)
  266. @CACHEING
  267. public String quertpartreimbursementdetailList() throws YosException {
  268. /*
  269. * 过滤条件设置
  270. */
  271. long sys_enterpriseid = content.getLong("sys_enterpriseid");
  272. StringBuffer where = new StringBuffer(" 1=1 ");
  273. if (content.containsKey("where")) {
  274. JSONObject whereObject = content.getJSONObject("where");
  275. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  276. where.append(" and(");
  277. where.append("t3.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  278. where.append("or t3.model like'%").append(whereObject.getString("condition")).append("%' ");
  279. where.append("or t3.spec like'%").append(whereObject.getString("condition")).append("%' ");
  280. where.append("or t3.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  281. where.append(")");
  282. }
  283. }
  284. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid", "remarks","qty", "sa_orderitemsid", "sa_tpartreimbursementid");
  285. querySQL.setTableAlias("t1");
  286. querySQL.addJoinTable(JOINTYPE.inner, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid","price", "amount", "rowno", "cardno", "offstatus", "billingstatus");
  287. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t2.itemid = t3.itemid AND t2.siteid = t3.siteid", "itemno", "itemname", "spec", "model");
  288. querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t4", "t2.sa_orderid = t4.sa_orderid AND t2.siteid = t4.siteid", "sonum");
  289. querySQL.addJoinTable(JOINTYPE.left, "sa_warrantycard", "t5", "t2.cardno = t5.cardno AND t2.siteid = t5.siteid", "name", "phonenumber");
  290. querySQL.addJoinTable(JOINTYPE.inner, "sa_tpartreimbursement", "t6", "t1.sa_tpartreimbursementid = t6.sa_tpartreimbursementid AND t1.siteid = t6.siteid", "billno", "submitdate", "checkdate", "remarks");
  291. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t7", "t6.sys_enterpriseid = t7.sys_enterpriseid AND t6.siteid = t7.siteid", "abbreviation", "enterprisename");
  292. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t8", "t8.sys_enterpriseid = t6.sys_enterpriseid AND t8.siteid = t6.siteid", "agentnum");
  293. querySQL.setSiteid(siteid);
  294. querySQL.setWhere("t6.status='审核' and t1.isverified=0 and t6.sys_enterpriseid=" + sys_enterpriseid);
  295. querySQL.setWhere(where.toString());
  296. querySQL.setPage(pageSize, pageNumber);
  297. Rows rows = querySQL.query();
  298. return getSucReturnObject().setData(rows).toString();
  299. }
  300. @API(title = "查询当月剩余可核销金额", apiversion = R.ID2025081815152503.v1.class)
  301. @CACHEING
  302. public String queryReimbursableAmount() throws YosException {
  303. sys_enterpriseid = content.getLong("sys_enterpriseid");
  304. Rows sumamountRows = dbConnect.runSqlQuery("select amount from st_stockbill t1 " +
  305. "inner join st_stockbill_items t2 on t1.st_stockbillid=t2.st_stockbillid and t1.siteid=t2.siteid " +
  306. "inner join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid" +
  307. " where t1.siteid='" + siteid + "' and t1.status='审核' and t1.type='销售出库' and t3.type='配件订单' and t3.sys_enterpriseid='" + sys_enterpriseid + "' and DATE_FORMAT( t1.checkdate, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )");
  308. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill");
  309. querySQL.setTableAlias("t1");
  310. querySQL.addJoinTable(JOINTYPE.left, "st_stockbill_items", "t2", "t2.st_stockbillid = t1.st_stockbillid AND t2.siteid = t1.siteid","amount");
  311. querySQL.setSiteid(siteid);
  312. querySQL.setWhere("t1.sys_enterpriseid", sys_enterpriseid);
  313. querySQL.setWhere("t1.sourceobject='tpartreimbursement' and t1.status='审核' and t1.type='销售出库' and DATE_FORMAT(t1.checkdate, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )");
  314. Rows rows = querySQL.query();
  315. return getSucReturnObject().setData(sumamountRows.sum("amount").subtract(rows.sum("amount"))).toString();
  316. }
  317. @API(title = "查询审核需核销金额", apiversion = R.ID2025081815213903.v1.class)
  318. @CACHEING
  319. public String queryCheckAmount() throws YosException {
  320. JSONArray sa_tpartreimbursementdetailids = content.getJSONArray("sa_tpartreimbursementdetailids");
  321. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "qty");
  322. querySQL.setTableAlias("t1");
  323. querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid","price");
  324. querySQL.setSiteid(siteid);
  325. querySQL.addQueryFields("amount","ROUND(t1.qty*t2.price, 2)");
  326. querySQL.setWhere("t1.sa_tpartreimbursementdetailid", sa_tpartreimbursementdetailids);
  327. Rows rows = querySQL.query();
  328. return getSucReturnObject().setData(rows.sum("amount")).toString();
  329. }
  330. @API(title = "核销", apiversion = R.ID2025081814422703.v1.class)
  331. @CACHEING_CLEAN(apiClass = {tpartreimbursement.class, stockbill.class, Order.class, OrderItems.class})
  332. public String hexiao() throws YosException {
  333. ArrayList<String> sqllist = new ArrayList<>();
  334. long sys_enterpriseid = content.getLong("sys_enterpriseid");
  335. JSONArray sa_tpartreimbursementdetailids = content.getJSONArray("sa_tpartreimbursementdetailids");
  336. JSONArray iteminfos = content.getJSONArray("iteminfos");
  337. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid","isverified","qty","sa_orderitemsid");
  338. querySQL.setTableAlias("t1");
  339. querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid");
  340. querySQL.setSiteid(siteid);
  341. querySQL.setWhere("t1.sa_tpartreimbursementdetailid", sa_tpartreimbursementdetailids);
  342. Rows rows = querySQL.query();
  343. QuerySQL querySQLgroup = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_orderitemsid");
  344. querySQLgroup.setTableAlias("t1");
  345. querySQLgroup.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid");
  346. querySQLgroup.setSiteid(siteid);
  347. querySQLgroup.addQueryFields("sumqty", "sum(t1.qty)");
  348. querySQLgroup.setWhere("t1.sa_tpartreimbursementdetailid", sa_tpartreimbursementdetailids);
  349. querySQLgroup.addGroupBy("sa_orderitemsid");
  350. Rows rowsgroup = querySQLgroup.query();
  351. for (Row row : rows) {
  352. if (row.getBoolean("isverified")) {
  353. return getErrReturnObject().setErrMsg("存在记录已核销,请检查").toString();
  354. }
  355. sqllist.add("update sa_tpartreimbursementdetail set isverified=1 where sa_tpartreimbursementdetailid=" + row.getLong("sa_tpartreimbursementdetailid"));
  356. }
  357. for (Row row : rowsgroup) {
  358. sqllist.add("update sa_orderitems set verifiedqty=ifnull(verifiedqty,0)+"+row.getBigDecimal("sumqty")+" where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
  359. }
  360. String tableName = "st_stockbill";
  361. Rows stocks = dbConnect.runSqlQuery("select stockid from st_stock where stockname='配件仓库' and siteid='" + siteid + "'");
  362. Rows department = dbConnect.runSqlQuery("select departmentid from sys_department where depname='售后部' and siteid='" + siteid + "'");
  363. List<Long> list = new ArrayList<>();
  364. for (Object object : iteminfos) {
  365. list.add(((JSONObject)object).getLong("itemid"));
  366. }
  367. RowsMap itemRowsMap = SQLFactory.createQuerySQL(this, "plm_item", "*").setWhere("itemid", list).query().toRowsMap("itemid");
  368. long st_stockbillid = createTableID(tableName);
  369. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
  370. insertSQL.setUniqueid(st_stockbillid);
  371. insertSQL.setSiteid(siteid);
  372. insertSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  373. insertSQL.setValue("rec_contactsid", 0);
  374. if (department.isEmpty()) {
  375. insertSQL.setValue("departmentid", 0);
  376. } else {
  377. insertSQL.setValue("departmentid", department.get(0).getLong("departmentid"));
  378. }
  379. if (stocks.isEmpty()) {
  380. insertSQL.setValue("stockid", 0);
  381. } else {
  382. insertSQL.setValue("stockid", stocks.get(0).getLong("stockid"));
  383. }
  384. insertSQL.setValue("type", "销售出库");
  385. insertSQL.setValue("typemx", "");
  386. insertSQL.setValue("sa_supplierid", content.getLongValue("sa_supplierid"));
  387. insertSQL.setValue("rb", 0);
  388. insertSQL.setValue("remarks", "配件核销;" + content.getStringValue("remarks"));
  389. insertSQL.setValue("billdate", getDate_Str());
  390. String billno = createBillCode("stockbill");
  391. insertSQL.setValue("billno", billno);
  392. insertSQL.setValue("outplace", "谈桥");
  393. insertSQL.setValue("delivery", "");
  394. insertSQL.setValue("invoice_enterprisename", "");
  395. insertSQL.setValue("invoice_address", "");
  396. insertSQL.setValue("invoice_taxno", "");
  397. insertSQL.setValue("tracknumber", "");
  398. insertSQL.setValue("isconfirm", 0);
  399. insertSQL.setValue("sourceobject", "tpartreimbursement");
  400. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
  401. Calendar calendar = Calendar.getInstance();
  402. insertSQL.setValue("period", dateFormat.format(calendar.getTime()));
  403. insertSQL.setValue("createby", username);
  404. insertSQL.setDateValue("createdate");
  405. insertSQL.setValue("changeby", username);
  406. insertSQL.setDateValue("changedate");
  407. insertSQL.setValue("checkby", username);
  408. insertSQL.setDateValue("checkdate");
  409. insertSQL.setValue("status", "审核");
  410. int i = 0;
  411. long maxid = 0;
  412. long[] st_stockbill_itemsid = createTableID("st_stockbill_items", iteminfos.size());
  413. Rows maxidRows = dbConnect
  414. .runSqlQuery("select MAX(rowno) rowno from st_stockbill_items where st_stockbillid=" + st_stockbillid);
  415. if (!maxidRows.isEmpty()) {
  416. maxid = maxidRows.get(0).getLong("rowno");
  417. }
  418. BigDecimal totalamount = BigDecimal.ZERO;
  419. for (Object obj : iteminfos) {
  420. JSONObject iteminfo = (JSONObject) obj;
  421. if (iteminfo.getLong("st_stockbill_itemsid") <= 0 || dbConnect
  422. .runSqlQuery("select st_stockbill_itemsid from st_stockbill_items where st_stockbill_itemsid="
  423. + iteminfo.getLong("st_stockbill_itemsid"))
  424. .isEmpty()) {
  425. InsertSQL insertDetailSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
  426. insertDetailSQL.setUniqueid(st_stockbill_itemsid[i]);
  427. insertDetailSQL.setSiteid(siteid);
  428. insertDetailSQL.setValue("rowno", maxid + i + 1);
  429. insertDetailSQL.setValue("st_stockbillid", st_stockbillid);
  430. insertDetailSQL.setValue("sa_orderitemsid", 0);
  431. insertDetailSQL.setValue("itemid", iteminfo.getLongValue("itemid"));
  432. insertDetailSQL.setValue("sa_orderid", 0);
  433. insertDetailSQL.setValue("qty", iteminfo.getBigDecimal("qty"));
  434. insertDetailSQL.setValue("discountrate", iteminfo.getBigDecimal("discountrate"));
  435. insertDetailSQL.setValue("sa_dispatch_itemsid", 0);
  436. insertDetailSQL.setValue("defaultprice", iteminfo.getBigDecimal("defaultprice"));
  437. insertDetailSQL.setValue("remarks", "");
  438. insertDetailSQL.setValue("itemno", itemRowsMap.containsKey(iteminfo.getStringValue("itemid"))?itemRowsMap.get(iteminfo.getStringValue("itemid")).get(0).getString("itemno"):iteminfo.getString("itemno"));
  439. insertDetailSQL.setValue("itemname", itemRowsMap.containsKey(iteminfo.getStringValue("itemid"))?itemRowsMap.get(iteminfo.getStringValue("itemid")).get(0).getString("itemname"):iteminfo.getString("itemname"));
  440. insertDetailSQL.setValue("model", itemRowsMap.containsKey(iteminfo.getStringValue("itemid"))?itemRowsMap.get(iteminfo.getStringValue("itemid")).get(0).getString("model"):iteminfo.getString("model"));
  441. insertDetailSQL.setValue("price", iteminfo.getBigDecimal("price"));
  442. insertDetailSQL.setValue("amount", iteminfo.getBigDecimal("qty").multiply(iteminfo.getBigDecimal("price")));
  443. insertDetailSQL.setValue("untaxedprice", iteminfo.getBigDecimal("price").divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP));
  444. insertDetailSQL.setValue("untaxedamount", iteminfo.getBigDecimal("qty").multiply(iteminfo.getBigDecimal("price").divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP)));
  445. insertDetailSQL.setValue("skucontrol", itemRowsMap.containsKey(iteminfo.getStringValue("itemid"))?itemRowsMap.get(iteminfo.getStringValue("itemid")).get(0).getBoolean("skucontrol"):iteminfo.getBooleanValue("skucontrol"));
  446. i++;
  447. sqllist.add(insertDetailSQL.getSQL());
  448. totalamount = totalamount.add(iteminfo.getBigDecimal("qty").multiply(iteminfo.getBigDecimal("price")));
  449. }
  450. }
  451. insertSQL.setValue("payamount", totalamount);
  452. insertSQL.setValue("paydiscountamount", 0);
  453. sqllist.add(insertSQL.getSQL());
  454. Rows accountbalancerows = dbConnect.runSqlQuery("select * from sa_accountbalance t1 inner join sa_accountclass t2 on t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
  455. CashbillEntity entity = getCashbillEntity(totalamount.negate(), BigDecimal.ZERO, st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成");
  456. JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
  457. sqllist.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  458. dbConnect.runSqlUpdate(sqllist);
  459. return getSucReturnObject().toString();
  460. }
  461. }