Paybill.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. package restcontroller.webmanage.sale.paybill;
  2. import beans.accountbalance.Accountbalance;
  3. import beans.accountbalance.CashbillEntity;
  4. import beans.data.BatchDeleteErr;
  5. import beans.datacontrllog.DataContrlLog;
  6. import beans.remind.Remind;
  7. import com.alibaba.fastjson.JSONArray;
  8. import com.alibaba.fastjson.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.Row;
  15. import common.data.Rows;
  16. import common.data.SQLFactory;
  17. import restcontroller.R;
  18. import java.util.ArrayList;
  19. @API(title = "打款凭证")
  20. public class Paybill extends Controller {
  21. /**
  22. * 构造函数
  23. *
  24. * @param content
  25. */
  26. public Paybill(JSONObject content) throws YosException {
  27. super(content);
  28. }
  29. @API(title = "列表", apiversion = R.ID20221226152904.v1.class)
  30. @CACHEING
  31. public String query() throws YosException {
  32. StringBuffer where = new StringBuffer(" 1=1 ");
  33. if (content.containsKey("where")) {
  34. JSONObject whereObject = content.getJSONObject("where");
  35. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  36. where.append("and (t1.billno like '%").append(whereObject.getString("condition")).append("%'");
  37. where.append("or t2.agentnum like '%").append(whereObject.getString("condition")).append("%'");
  38. where.append("or t3.enterprisename like '%").append(whereObject.getString("condition")).append("%')");
  39. }
  40. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  41. where.append("and t1.status = '").append(whereObject.getString("status")).append("'");
  42. }
  43. if (whereObject.containsKey("startdate") && !"".equals(whereObject.getString("startdate"))) {
  44. where.append(" and(");
  45. where.append("t1.createdate >='").append(whereObject.getString("startdate")).append("' ");
  46. where.append(")");
  47. }
  48. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  49. where.append(" and(");
  50. where.append("t1.createdate <='").append(whereObject.getString("enddate")).append("' ");
  51. where.append(")");
  52. }
  53. }
  54. if (usertype == 21 || usertype == 22) {
  55. where.append(" and t1.sys_enterpriseid=").append(sys_enterpriseid);
  56. } else {
  57. where.append(" and t1.status!='新建'");
  58. }
  59. SQLFactory sqlFactory = new SQLFactory(this, "打款凭证列表", pageSize, pageNumber, pageSorting);
  60. sqlFactory.addParameter("siteid", siteid);
  61. sqlFactory.addParameter_SQL("where", where);
  62. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  63. return getSucReturnObject().setData(rows).toString();
  64. }
  65. @API(title = "新增或更新", apiversion = R.ID20221226153004.v1.class)
  66. @CACHEING_CLEAN(apiversions = {R.ID20221226152904.v1.class, R.ID20230202100104.v1.class})
  67. public String insertOrUpdate() throws YosException {
  68. ArrayList<String> sqlList = new ArrayList<>();
  69. Long sa_paybillid = content.getLong("sa_paybillid");
  70. if (content.containsKey("sys_enterpriseid")) {
  71. sys_enterpriseid = content.getLong("sys_enterpriseid");
  72. }
  73. String payer = content.getString("payer");
  74. String paydate = content.getString("paydate");
  75. String amount = content.getString("amount");
  76. String remarks = content.getString("remarks");
  77. String bank = content.getString("bank");
  78. String bankcardno = content.getString("bankcardno");
  79. String inbank = content.getString("inbank");
  80. String inbankcardno = content.getString("inbankcardno");
  81. Rows rows = dbConnect.runSqlQuery("select status from sa_paybill where siteid='" + siteid + "' and sa_paybillid=" + sa_paybillid);
  82. SQLFactory sqlFactory = new SQLFactory(this, "打款凭证新增");
  83. if (sa_paybillid <= 0 || rows.isEmpty()) {
  84. sa_paybillid = createTableID("sa_paybill");
  85. String billno = createBillCode("paybill");
  86. sqlFactory.addParameter("billno", billno);
  87. //sqlFactory.addParameter("billno", sa_paybillid);
  88. sqlList.add(DataContrlLog.createLog(this, "sa_paybill", sa_paybillid, "新增", "打款凭证新增").getSQL());
  89. } else {
  90. if (!rows.get(0).getString("status").equals("新建")) {
  91. return getErrReturnObject().setErrMsg("非新建状态不能更改").toString();
  92. }
  93. sqlFactory = new SQLFactory(this, "打款凭证更新");
  94. sqlList.add(DataContrlLog.createLog(this, "sa_paybill", sa_paybillid, "更新", "打款凭证更新").getSQL());
  95. }
  96. sqlFactory.addParameter("siteid", siteid);
  97. sqlFactory.addParameter("sa_paybillid", sa_paybillid);
  98. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  99. sqlFactory.addParameter("payer", payer);
  100. sqlFactory.addParameter("paydate", paydate);
  101. sqlFactory.addParameter("amount", amount);
  102. sqlFactory.addParameter("remarks", remarks);
  103. sqlFactory.addParameter("bank", bank);
  104. sqlFactory.addParameter("bankcardno", bankcardno);
  105. sqlFactory.addParameter("inbank", inbank);
  106. sqlFactory.addParameter("inbankcardno", inbankcardno);
  107. sqlFactory.addParameter("userid", userid);
  108. sqlFactory.addParameter("username", username);
  109. sqlList.add(sqlFactory.getSQL());
  110. dbConnect.runSqlUpdate(sqlList);
  111. content.put("sa_paybillid", sa_paybillid);
  112. return queryById();
  113. }
  114. @API(title = "删除", apiversion = R.ID20221226153104.v1.class)
  115. @CACHEING_CLEAN(apiversions = {R.ID20221226152904.v1.class, R.ID20230202100104.v1.class})
  116. public String delete() throws YosException {
  117. ArrayList<String> sqlList = new ArrayList<>();
  118. JSONArray sa_paybillids = content.getJSONArray("sa_paybillids");
  119. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, sa_paybillids.size());
  120. for (Object o : sa_paybillids) {
  121. long sa_paybillid = Long.parseLong(o.toString());
  122. Rows rows = dbConnect.runSqlQuery("select status from sa_paybill where siteid='" + siteid + "' and sa_paybillid=" + sa_paybillid);
  123. if (!rows.get(0).getString("status").equals("新建")) {
  124. batchDeleteErr.addErr(sa_paybillid, "非新建状态下无法删除");
  125. continue;
  126. }
  127. sqlList.add("delete from sa_paybill where siteid='" + siteid + "' and sa_paybillid=" + sa_paybillid);
  128. sqlList.add("delete from sa_paybilldetail where siteid='" + siteid + "' and sa_paybillid=" + sa_paybillid);
  129. sqlList.add(DataContrlLog.createLog(this, "sa_paybill", sa_paybillid, "删除", "打款凭证删除").getSQL());
  130. }
  131. dbConnect.runSqlUpdate(sqlList);
  132. return batchDeleteErr.getReturnObject().toString();
  133. }
  134. @API(title = "提交", apiversion = R.ID20221226153204.v1.class)
  135. @CACHEING_CLEAN(apiversions = {R.ID20221226152904.v1.class, R.ID20230202100104.v1.class})
  136. public String submit() throws YosException {
  137. ArrayList<String> sqlList = new ArrayList<>();
  138. Long sa_paybillid = content.getLong("sa_paybillid");
  139. Rows rows = dbConnect.runSqlQuery("select status,amount from sa_paybill where siteid='" + siteid + "' and sa_paybillid=" + sa_paybillid);
  140. Rows accountsumamount = dbConnect.runSqlQuery("select sum(amount) amount from sa_paybilldetail where siteid='" + siteid + "' and sa_paybillid=" + sa_paybillid);
  141. if (rows.isEmpty()) {
  142. return getErrReturnObject().setErrMsg("未选择打款凭证").toString();
  143. }
  144. if (!"新建".equals(rows.get(0).getString("status"))) {
  145. return getErrReturnObject().setErrMsg("非新建状态无法提交").toString();
  146. }
  147. if (rows.get(0).getBigDecimal("amount").compareTo(accountsumamount.get(0).getBigDecimal("amount")) == -1) {
  148. return getErrReturnObject().setErrMsg("账户打款金额总值超出打款总金额").toString();
  149. }
  150. if (rows.get(0).getBigDecimal("amount").compareTo(accountsumamount.get(0).getBigDecimal("amount")) == 1) {
  151. return getErrReturnObject().setErrMsg("打款总金额余" + rows.get(0).getBigDecimal("amount").subtract(accountsumamount.get(0).getBigDecimal("amount")) + "未分配").toString();
  152. }
  153. SQLFactory sqlFactory = new SQLFactory(this, "打款凭证提交");
  154. sqlFactory.addParameter("siteid", siteid);
  155. sqlFactory.addParameter("username", username);
  156. sqlFactory.addParameter("sa_paybillid", sa_paybillid);
  157. sqlList.add(sqlFactory.getSQL());
  158. sqlList.add(DataContrlLog.createLog(this, "sa_paybill", sa_paybillid, "提交", "打款凭证提交").getSQL());
  159. dbConnect.runSqlUpdate(sqlList);
  160. return getSucReturnObject().toString();
  161. }
  162. @API(title = "审核", apiversion = R.ID20221226153304.v1.class)
  163. @CACHEING_CLEAN(apiversions = {R.ID20221226152904.v1.class, R.ID20221010102903.v1.class, R.ID20230111103403.v1.class, R.ID20230202100104.v1.class})
  164. public String check() throws YosException {
  165. ArrayList<String> sqlList = new ArrayList<>();
  166. Long sa_paybillid = content.getLong("sa_paybillid");
  167. Rows rows = dbConnect.runSqlQuery("select sys_enterpriseid,status,billno,remarks from sa_paybill where siteid='" + siteid + "' and sa_paybillid=" + sa_paybillid);
  168. Rows accountclassRows = dbConnect.runSqlQuery("select sa_accountclassid,amount from sa_paybilldetail where siteid='" + siteid + "' and amount>0 and sa_paybillid=" + sa_paybillid);
  169. if (rows.isEmpty()) {
  170. return getErrReturnObject().setErrMsg("未选择打款凭证").toString();
  171. }
  172. if (!"提交".equals(rows.get(0).getString("status"))) {
  173. return getErrReturnObject().setErrMsg("非提交状态无法审核").toString();
  174. }
  175. if (content.containsKey("period") && !"".equals(content.getString("period"))) {
  176. sqlList.add("update sa_paybill set period='" + content.getString("period") + "' where siteid='" + siteid + "' and sa_paybillid=" + sa_paybillid);
  177. } else {
  178. return getErrReturnObject().setErrMsg("未填写会计日期").toString();
  179. }
  180. SQLFactory sqlFactory = new SQLFactory(this, "打款凭证审核");
  181. sqlFactory.addParameter("siteid", siteid);
  182. sqlFactory.addParameter("sa_paybillid", sa_paybillid);
  183. sqlFactory.addParameter("username", username);
  184. sqlList.add(sqlFactory.getSQL());
  185. sqlList.add(DataContrlLog.createLog(this, "sa_paybill", sa_paybillid, "审核", "打款凭证审核").getSQL());
  186. long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  187. String billno = rows.get(0).getString("billno");
  188. CashbillEntity cashbillEntity = new CashbillEntity();
  189. cashbillEntity.setOwnerid(sa_paybillid);
  190. cashbillEntity.setOwnertable("sa_paybill");
  191. cashbillEntity.setSource("打款凭证");
  192. cashbillEntity.setSourcenote(billno);
  193. cashbillEntity.setRemarks(rows.get(0).getString("remarks"));
  194. for (Row row : accountclassRows) {
  195. cashbillEntity.setAmount(row.getBigDecimal("amount"));
  196. sqlList.addAll(Accountbalance.createCashbillIncome(this, sys_enterpriseid, row.getLong("sa_accountclassid"), cashbillEntity, false));
  197. }
  198. dbConnect.runSqlUpdate(sqlList);
  199. String message="打款单审核:“您的打款单"+billno+"关联的收入凭证已审核,款已打入您的账户,请及时查收!”";
  200. sendMsg(message, sa_paybillid, sys_enterpriseid);
  201. return getSucReturnObject().toString();
  202. }
  203. public void sendMsg(String content, Long sa_paybillid, Long sys_enterpriseid) throws YosException {
  204. ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid).toArrayList("userid", new ArrayList<>());
  205. Remind remind = new Remind(this);
  206. remind.setTitle("打款消息");
  207. remind.setContent(content);
  208. remind.setType("应用");
  209. remind.setObjectid(sa_paybillid);
  210. remind.setObjectname("sa_paybill");
  211. remind.setTouserid(userList);
  212. remind.sendByDialogMsg().createSys_message();
  213. }
  214. @API(title = "详情", apiversion = R.ID20221226153404.v1.class)
  215. public String queryById() throws YosException {
  216. Long sa_paybillid = content.getLong("sa_paybillid");
  217. SQLFactory sqlFactory = new SQLFactory(this, "打款凭证详情");
  218. sqlFactory.addParameter("siteid", siteid);
  219. sqlFactory.addParameter("sa_paybillid", sa_paybillid);
  220. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  221. if (rows.isNotEmpty()) {
  222. rows.get(0).put("attinfos", getAttachmentUrl("sa_paybill", sa_paybillid));
  223. }
  224. return getSucReturnObject().setData(rows.get(0)).toString();
  225. }
  226. @API(title = "退回", apiversion = R.ID20221227110104.v1.class)
  227. @CACHEING_CLEAN(apiversions = {R.ID20221226152904.v1.class, R.ID20230202100104.v1.class})
  228. public String reback() throws YosException {
  229. Long sa_paybillid = content.getLong("sa_paybillid");
  230. SQLFactory sqlFactory = new SQLFactory(this, "打款凭证退回");
  231. sqlFactory.addParameter("siteid", siteid);
  232. sqlFactory.addParameter("sa_paybillid", sa_paybillid);
  233. dbConnect.runSqlUpdate(sqlFactory.getSQL());
  234. return getSucReturnObject().toString();
  235. }
  236. @API(title = "查询营销账户类型", apiversion = R.ID20221228085004.v1.class)
  237. public String queryAccountclass() throws YosException {
  238. Long sa_paybillid = content.getLong("sa_paybillid");
  239. StringBuffer where = new StringBuffer(" 1=1 ");
  240. if (content.containsKey("where")) {
  241. JSONObject whereObject = content.getJSONObject("where");
  242. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  243. where.append(" and(accountname like'%").append(whereObject.getString("condition")).append("%'");
  244. where.append(" or accountno like '%").append(whereObject.getString("condition")).append("%')");
  245. }
  246. }
  247. SQLFactory sqlFactory = new SQLFactory(this, "营销账户类型列表查询");
  248. sqlFactory.addParameter("siteid", siteid);
  249. sqlFactory.addParameter_SQL("where", where);
  250. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  251. return getSucReturnObject().setData(rows).toString();
  252. }
  253. }