Accountbalance.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. package beans.accountbalance;
  2. import beans.remind.Remind;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.sun.xml.internal.rngom.parse.host.Base;
  5. import common.BaseClass;
  6. import common.Controller;
  7. import common.YosException;
  8. import common.data.Rows;
  9. import common.data.SQLFactory;
  10. import org.apache.commons.lang.StringUtils;
  11. import restcontroller.webmanage.executorService.Executor;
  12. import java.math.BigDecimal;
  13. import java.util.ArrayList;
  14. import java.util.HashMap;
  15. public class Accountbalance extends BaseClass {
  16. /**
  17. * @param controller
  18. * @param sys_enterpriseid //企业id
  19. * @param sa_accountclassid //营销账户id
  20. * @return AccountbalanceEntity //营销账户实体(可用余额(getCanuseamount),账户余额(getBalance),信用额度(getCreditquota))
  21. * @throws YosException
  22. */
  23. public static AccountbalanceEntity getAccountbalance(Controller controller, long sys_enterpriseid, long sa_accountclassid) throws YosException {
  24. SQLFactory sqlFactory = new SQLFactory(new Accountbalance(), "账户余额查询");
  25. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  26. sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  27. sqlFactory.addParameter("siteid", controller.siteid);
  28. Rows rows = controller.dbConnect.runSqlQuery(sqlFactory.getSQL());
  29. AccountbalanceEntity accountbalanceEntity = new AccountbalanceEntity();
  30. if (!rows.isEmpty()) {
  31. accountbalanceEntity.setBalance(rows.get(0).getBigDecimal("balance"));
  32. accountbalanceEntity.setCreditquota(rows.get(0).getBigDecimal("creditquota"));
  33. accountbalanceEntity.setCanuseamount(rows.get(0).getBigDecimal("balance").add(rows.get(0).getBigDecimal("creditquota")));
  34. }
  35. return accountbalanceEntity;
  36. }
  37. /**
  38. * 判断当前账户余额是否足够
  39. *
  40. * @param controller
  41. * @param sys_enterpriseid
  42. * @param sa_accountclassid
  43. * @param amount
  44. * @return
  45. * @throws YosException
  46. */
  47. public static boolean judgeBalance(Controller controller, long sys_enterpriseid, long sa_accountclassid, BigDecimal amount) throws YosException {
  48. AccountbalanceEntity accountbalanceEntity = getAccountbalance(controller, sys_enterpriseid, sa_accountclassid);
  49. BigDecimal canuseamount = accountbalanceEntity.getCanuseamount();
  50. if (canuseamount != null) {
  51. if (canuseamount.compareTo(amount) == 1 || canuseamount.compareTo(amount) == 0) {
  52. return true;
  53. } else {
  54. return false;
  55. }
  56. } else {
  57. return false;
  58. }
  59. }
  60. /**
  61. * 返回不足金额
  62. *
  63. * @param controller
  64. * @param sys_enterpriseid
  65. * @param sa_accountclassid
  66. * @param amount
  67. * @return
  68. * @throws YosException
  69. */
  70. public static BigDecimal InsufficientBalance(Controller controller, long sys_enterpriseid, long sa_accountclassid, BigDecimal amount) throws YosException {
  71. AccountbalanceEntity accountbalanceEntity = getAccountbalance(controller, sys_enterpriseid, sa_accountclassid);
  72. BigDecimal canuseamount = accountbalanceEntity.getCanuseamount();
  73. if (canuseamount != null) {
  74. if (canuseamount.compareTo(amount) == 1 || canuseamount.compareTo(amount) == 0) {
  75. return BigDecimal.ZERO;
  76. } else {
  77. return amount.subtract(canuseamount);
  78. }
  79. } else {
  80. return amount;
  81. }
  82. }
  83. /**
  84. * 创建收入凭证(返回SQL)
  85. *
  86. * @param controller
  87. * @param sys_enterpriseid 企业id
  88. * @param sa_accountclassid 账户id
  89. * @param cashbillEntity 收支凭证实体
  90. * @param ischeck 是否审核
  91. * @return
  92. * @throws YosException
  93. */
  94. public static JSONObject createCashbillIncome(Controller controller, long sys_enterpriseid, long sa_accountclassid, CashbillEntity cashbillEntity, boolean ischeck, boolean isupdatek3flag) throws YosException {
  95. ArrayList<String> sqlList = new ArrayList<>();
  96. long sa_cashbillid = controller.createTableID("sa_cashbill");
  97. String billcode = controller.createBillCode("cashbill");
  98. SQLFactory sqlFactory = new SQLFactory(new Accountbalance(), "收支凭证新增");
  99. sqlFactory.addParameter("billno", billcode);
  100. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  101. sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  102. sqlFactory.addParameter("type", 1);
  103. sqlFactory.addParameter("siteid", controller.siteid);
  104. sqlFactory.addParameter("remarks", cashbillEntity.getRemarks());
  105. sqlFactory.addParameter("amount", cashbillEntity.getAmount());
  106. sqlFactory.addParameter("sa_cashbillid", sa_cashbillid);
  107. sqlFactory.addParameter("userid", controller.userid);
  108. sqlFactory.addParameter("username", controller.username);
  109. sqlFactory.addParameter("ownertable", cashbillEntity.getOwnertable());
  110. sqlFactory.addParameter("ownerid", cashbillEntity.getOwnerid());
  111. sqlFactory.addParameter("source", cashbillEntity.getSource());
  112. sqlFactory.addParameter("sourcenote", cashbillEntity.getSourcenote());
  113. sqlFactory.addParameter("sa_cashbillid_rebate", "null");
  114. sqlFactory.addParameter("class", cashbillEntity.getType());
  115. sqlFactory.addParameter("subclass", cashbillEntity.getTypemx());
  116. sqlFactory.addParameter("period", cashbillEntity.getPeriod());
  117. if (ischeck) {
  118. BigDecimal balance = BigDecimal.ZERO; //当前账户余额
  119. sqlFactory.addParameter("status", "审核");
  120. if (isupdatek3flag) {
  121. sqlFactory.addParameter("updatek3flag", "0");
  122. } else {
  123. sqlFactory.addParameter("updatek3flag", "");
  124. }
  125. sqlFactory.addParameter("checkby", StringUtils.isBlank(controller.username) ? "autocheck" : controller.username);
  126. sqlFactory.addParameter_SQL("checkdate", "CURRENT_TIME");
  127. // 审核逻辑判断
  128. Rows rowsaccountbalance = controller.dbConnect.runSqlQuery(
  129. "select sa_accountbalanceid,balance,creditquota from sa_accountbalance where sys_enterpriseid ='"
  130. + sys_enterpriseid + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='"
  131. + controller.siteid + "'");
  132. if (rowsaccountbalance.isEmpty()) {
  133. SQLFactory accountbalanceaddSqlFactory = new SQLFactory(new Accountbalance(), "营销账户余额新增");
  134. accountbalanceaddSqlFactory.addParameter("sa_accountbalanceid",
  135. controller.createTableID("sa_accountbalance"));
  136. accountbalanceaddSqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  137. accountbalanceaddSqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  138. accountbalanceaddSqlFactory.addParameter("siteid", controller.siteid);
  139. accountbalanceaddSqlFactory.addParameter("balance", cashbillEntity.getAmount());
  140. accountbalanceaddSqlFactory.addParameter("userid", controller.userid);
  141. accountbalanceaddSqlFactory.addParameter("username", controller.username);
  142. balance = cashbillEntity.getAmount();
  143. sqlList.add(accountbalanceaddSqlFactory.getSQL());
  144. } else {
  145. BigDecimal newbalance = cashbillEntity.getAmount().add(rowsaccountbalance.get(0).getBigDecimal("balance"));
  146. sqlList.add("update sa_accountbalance set balance='" + newbalance
  147. + "',changedate=CURRENT_TIME,changeby ='" + controller.username + "',changeuserid='"
  148. + controller.userid + "' where sys_enterpriseid ='" + sys_enterpriseid
  149. + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='" + controller.siteid
  150. + "'");
  151. balance = newbalance;
  152. }
  153. sqlFactory.addParameter("balance", balance);
  154. Rows accountclassrows = controller.dbConnect.runSqlQuery("select * from sa_accountclass where siteid='" + controller.siteid + "' and sa_accountclassid=" + sa_accountclassid);
  155. if (!accountclassrows.isEmpty()) {
  156. String content = "您的" + accountclassrows.get(0).getString("accountname") + "已收入【" + cashbillEntity.getAmount() + "】元";
  157. new Accountbalance().sendMsg(controller, content, cashbillEntity.getOwnerid(), sys_enterpriseid);
  158. }
  159. } else {
  160. sqlFactory.addParameter("status", "新建");
  161. sqlFactory.addParameter("checkby", "null");
  162. sqlFactory.addParameter("checkdate", "null");
  163. sqlFactory.addParameter("updatek3flag", "");
  164. sqlFactory.addParameter("balance", 0);
  165. }
  166. sqlList.add(sqlFactory.getSQL());
  167. JSONObject jsonObject = new JSONObject();
  168. jsonObject.put("sa_cashbillid", sa_cashbillid);
  169. jsonObject.put("sqlList", sqlList);
  170. return jsonObject;
  171. }
  172. /**
  173. * 创建支出凭证(返回SQL)
  174. *
  175. * @param controller
  176. * @param sys_enterpriseid 企业id
  177. * @param sa_accountclassid 账户id
  178. * @param cashbillEntity 收支凭证实体
  179. * @param ischeck 是否审核
  180. * @return
  181. * @throws YosException
  182. */
  183. public static JSONObject createCashbillPay(Controller controller, long sys_enterpriseid, long sa_accountclassid, CashbillEntity cashbillEntity, boolean ischeck) throws YosException {
  184. ArrayList<String> sqlList = new ArrayList<>();
  185. long sa_cashbillid = controller.createTableID("sa_cashbill");
  186. String billcode = controller.createBillCode("cashbill");
  187. SQLFactory sqlFactory = new SQLFactory(new Accountbalance(), "收支凭证新增");
  188. sqlFactory.addParameter("billno", billcode);
  189. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  190. sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  191. sqlFactory.addParameter("type", 0);
  192. sqlFactory.addParameter("siteid", controller.siteid);
  193. sqlFactory.addParameter("remarks", cashbillEntity.getRemarks());
  194. sqlFactory.addParameter("amount", cashbillEntity.getAmount());
  195. sqlFactory.addParameter("sa_cashbillid", sa_cashbillid);
  196. sqlFactory.addParameter("userid", controller.userid);
  197. sqlFactory.addParameter("username", controller.username);
  198. sqlFactory.addParameter("ownertable", cashbillEntity.getOwnertable());
  199. sqlFactory.addParameter("ownerid", cashbillEntity.getOwnerid());
  200. sqlFactory.addParameter("source", cashbillEntity.getSource());
  201. sqlFactory.addParameter("sourcenote", cashbillEntity.getSourcenote());
  202. sqlFactory.addParameter("class", cashbillEntity.getType());
  203. sqlFactory.addParameter("subclass", cashbillEntity.getTypemx());
  204. sqlFactory.addParameter("sa_cashbillid_rebate", "null");
  205. sqlFactory.addParameter("updatek3flag", "");
  206. sqlFactory.addParameter("period", cashbillEntity.getPeriod());
  207. if (ischeck) {
  208. BigDecimal balance = BigDecimal.ZERO; //当前账户余额
  209. sqlFactory.addParameter("status", "审核");
  210. sqlFactory.addParameter("checkby", controller.username);
  211. sqlFactory.addParameter_SQL("checkdate", "CURRENT_TIME");
  212. // 审核逻辑判断
  213. Rows rowsaccountbalance = controller.dbConnect.runSqlQuery(
  214. "select sa_accountbalanceid,balance,creditquota from sa_accountbalance where sys_enterpriseid ='"
  215. + sys_enterpriseid + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='"
  216. + controller.siteid + "'");
  217. if (rowsaccountbalance.isEmpty()) {
  218. // SQLFactory sqlFactory = new SQLFactory(this, "营销账户余额新增");
  219. // sqlFactory.addParameter("sa_accountbalanceid", createTableID("sa_accountbalance"));
  220. // sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  221. // sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  222. // sqlFactory.addParameter("siteid", siteid);
  223. // sqlFactory.addParameter("balance", -rows.get(0).getLong("amount"));
  224. // sqlFactory.addParameter("userid", userid);
  225. // sqlFactory.addParameter("username", username);
  226. // sqlList.add(sqlFactory.getSQL());
  227. throw new YosException(false, "该营销账户不存在,支出凭证无法审核");
  228. } else {
  229. BigDecimal canuseamount = rowsaccountbalance.get(0).getBigDecimal("creditquota").add(rowsaccountbalance.get(0).getBigDecimal("balance"));
  230. if (cashbillEntity.getAmount().compareTo(canuseamount) == 1) {
  231. throw new YosException(false, "该营销账户可用余额不足,支出凭证无法审核");
  232. }
  233. BigDecimal newbalance = rowsaccountbalance.get(0).getBigDecimal("balance").subtract(cashbillEntity.getAmount());
  234. sqlList.add("update sa_accountbalance set balance='" + newbalance + "',changedate=CURRENT_TIME,changeby ='" + controller.username + "',changeuserid='" + controller.userid + "' where sys_enterpriseid ='" + sys_enterpriseid + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='" + controller.siteid + "'");
  235. balance = newbalance;
  236. }
  237. sqlFactory.addParameter("balance", balance);
  238. Rows accountclassrows = controller.dbConnect.runSqlQuery("select * from sa_accountclass where siteid='" + controller.siteid + "' and sa_accountclassid=" + sa_accountclassid);
  239. if (!accountclassrows.isEmpty()) {
  240. String content = "您的" + accountclassrows.get(0).getString("accountname") + "已支出【" + cashbillEntity.getAmount() + "】元";
  241. new Accountbalance().sendMsg(controller, content, cashbillEntity.getOwnerid(), sys_enterpriseid);
  242. }
  243. } else {
  244. sqlFactory.addParameter("status", "新建");
  245. sqlFactory.addParameter("checkby", "");
  246. sqlFactory.addParameter("checkdate", "");
  247. sqlFactory.addParameter("balance", 0);
  248. sqlFactory.addParameter("updatek3flag", "");
  249. }
  250. sqlList.add(sqlFactory.getSQL());
  251. JSONObject jsonObject = new JSONObject();
  252. jsonObject.put("sa_cashbillid", sa_cashbillid);
  253. jsonObject.put("sqlList", sqlList);
  254. return jsonObject;
  255. }
  256. //订单手动关闭专用
  257. public static JSONObject createCashbillPay2(Controller controller, long sys_enterpriseid, long sa_accountclassid, CashbillEntity cashbillEntity, boolean ischeck) throws YosException {
  258. ArrayList<String> sqlList = new ArrayList<>();
  259. long sa_cashbillid = controller.createTableID("sa_cashbill");
  260. String billcode = controller.createBillCode("cashbill");
  261. SQLFactory sqlFactory = new SQLFactory(new Accountbalance(), "收支凭证新增");
  262. sqlFactory.addParameter("billno", billcode);
  263. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  264. sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  265. sqlFactory.addParameter("type", 0);
  266. sqlFactory.addParameter("siteid", controller.siteid);
  267. sqlFactory.addParameter("remarks", cashbillEntity.getRemarks());
  268. sqlFactory.addParameter("amount", cashbillEntity.getAmount());
  269. sqlFactory.addParameter("sa_cashbillid", sa_cashbillid);
  270. sqlFactory.addParameter("userid", controller.userid);
  271. sqlFactory.addParameter("username", controller.username);
  272. sqlFactory.addParameter("ownertable", cashbillEntity.getOwnertable());
  273. sqlFactory.addParameter("ownerid", cashbillEntity.getOwnerid());
  274. sqlFactory.addParameter("source", cashbillEntity.getSource());
  275. sqlFactory.addParameter("sourcenote", cashbillEntity.getSourcenote());
  276. sqlFactory.addParameter("class", cashbillEntity.getType());
  277. sqlFactory.addParameter("subclass", cashbillEntity.getTypemx());
  278. sqlFactory.addParameter("sa_cashbillid_rebate", "null");
  279. sqlFactory.addParameter("updatek3flag", "");
  280. sqlFactory.addParameter("period", cashbillEntity.getPeriod());
  281. if (ischeck) {
  282. BigDecimal balance = BigDecimal.ZERO; //当前账户余额
  283. sqlFactory.addParameter("status", "审核");
  284. sqlFactory.addParameter("checkby", controller.username);
  285. sqlFactory.addParameter_SQL("checkdate", "CURRENT_TIME");
  286. // 审核逻辑判断
  287. Rows rowsaccountbalance = controller.dbConnect.runSqlQuery(
  288. "select sa_accountbalanceid,balance,creditquota from sa_accountbalance where sys_enterpriseid ='"
  289. + sys_enterpriseid + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='"
  290. + controller.siteid + "'");
  291. if (rowsaccountbalance.isEmpty()) {
  292. // SQLFactory sqlFactory = new SQLFactory(this, "营销账户余额新增");
  293. // sqlFactory.addParameter("sa_accountbalanceid", createTableID("sa_accountbalance"));
  294. // sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  295. // sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  296. // sqlFactory.addParameter("siteid", siteid);
  297. // sqlFactory.addParameter("balance", -rows.get(0).getLong("amount"));
  298. // sqlFactory.addParameter("userid", userid);
  299. // sqlFactory.addParameter("username", username);
  300. // sqlList.add(sqlFactory.getSQL());
  301. throw new YosException(false, "该营销账户不存在,支出凭证无法审核");
  302. } else {
  303. // BigDecimal canuseamount = rowsaccountbalance.get(0).getBigDecimal("creditquota").add(rowsaccountbalance.get(0).getBigDecimal("balance"));
  304. // if (cashbillEntity.getAmount().compareTo(canuseamount) == 1) {
  305. // throw new YosException(false, "该营销账户可用余额不足,支出凭证无法审核");
  306. // }
  307. BigDecimal newbalance = rowsaccountbalance.get(0).getBigDecimal("balance").subtract(cashbillEntity.getAmount());
  308. sqlList.add("update sa_accountbalance set balance='" + newbalance + "',changedate=CURRENT_TIME,changeby ='" + controller.username + "',changeuserid='" + controller.userid + "' where sys_enterpriseid ='" + sys_enterpriseid + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='" + controller.siteid + "'");
  309. balance = newbalance;
  310. }
  311. sqlFactory.addParameter("balance", balance);
  312. Rows accountclassrows = controller.dbConnect.runSqlQuery("select * from sa_accountclass where siteid='" + controller.siteid + "' and sa_accountclassid=" + sa_accountclassid);
  313. if (!accountclassrows.isEmpty()) {
  314. String content = "您的" + accountclassrows.get(0).getString("accountname") + "已支出【" + cashbillEntity.getAmount() + "】元";
  315. new Accountbalance().sendMsg(controller, content, cashbillEntity.getOwnerid(), sys_enterpriseid);
  316. }
  317. } else {
  318. sqlFactory.addParameter("status", "新建");
  319. sqlFactory.addParameter("checkby", "");
  320. sqlFactory.addParameter("checkdate", "");
  321. sqlFactory.addParameter("balance", 0);
  322. sqlFactory.addParameter("updatek3flag", "");
  323. }
  324. sqlList.add(sqlFactory.getSQL());
  325. JSONObject jsonObject = new JSONObject();
  326. jsonObject.put("sa_cashbillid", sa_cashbillid);
  327. jsonObject.put("sqlList", sqlList);
  328. return jsonObject;
  329. }
  330. public static JSONObject createCashbillPay(Controller controller, long sys_enterpriseid, long sa_accountclassid, CashbillEntity cashbillEntity, boolean ischeck, Long sa_cashbillid_rebate) throws YosException {
  331. ArrayList<String> sqlList = new ArrayList<>();
  332. long sa_cashbillid = controller.createTableID("sa_cashbill");
  333. String billcode = controller.createBillCode("cashbill");
  334. SQLFactory sqlFactory = new SQLFactory(new Accountbalance(), "收支凭证新增");
  335. sqlFactory.addParameter("billno", billcode);
  336. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  337. sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
  338. sqlFactory.addParameter("type", 0);
  339. sqlFactory.addParameter("siteid", controller.siteid);
  340. sqlFactory.addParameter("remarks", cashbillEntity.getRemarks());
  341. sqlFactory.addParameter("amount", cashbillEntity.getAmount());
  342. sqlFactory.addParameter("sa_cashbillid", sa_cashbillid);
  343. sqlFactory.addParameter("userid", controller.userid);
  344. sqlFactory.addParameter("username", controller.username);
  345. sqlFactory.addParameter("ownertable", cashbillEntity.getOwnertable());
  346. sqlFactory.addParameter("ownerid", cashbillEntity.getOwnerid());
  347. sqlFactory.addParameter("source", cashbillEntity.getSource());
  348. sqlFactory.addParameter("sourcenote", cashbillEntity.getSourcenote());
  349. sqlFactory.addParameter("sa_cashbillid_rebate", sa_cashbillid_rebate);
  350. sqlFactory.addParameter("class", cashbillEntity.getType());
  351. sqlFactory.addParameter("subclass", cashbillEntity.getTypemx());
  352. sqlFactory.addParameter("period", cashbillEntity.getPeriod());
  353. if (ischeck) {
  354. BigDecimal balance = BigDecimal.ZERO; //当前账户余额
  355. sqlFactory.addParameter("status", "审核");
  356. sqlFactory.addParameter("checkby", controller.username);
  357. sqlFactory.addParameter_SQL("checkdate", "CURRENT_TIME");
  358. // 审核逻辑判断
  359. Rows rowsaccountbalance = controller.dbConnect.runSqlQuery(
  360. "select sa_accountbalanceid,balance,creditquota from sa_accountbalance where sys_enterpriseid ='"
  361. + sys_enterpriseid + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='"
  362. + controller.siteid + "'");
  363. if (rowsaccountbalance.isEmpty()) {
  364. throw new YosException(false, "该营销账户不存在,支出凭证无法审核");
  365. } else {
  366. BigDecimal canuseamount = rowsaccountbalance.get(0).getBigDecimal("creditquota").add(rowsaccountbalance.get(0).getBigDecimal("balance"));
  367. if (cashbillEntity.getAmount().compareTo(canuseamount) == 1 ) {
  368. throw new YosException(false, "该营销账户可用余额不足,支出凭证无法审核");
  369. }
  370. BigDecimal newbalance = rowsaccountbalance.get(0).getBigDecimal("balance").subtract(cashbillEntity.getAmount());
  371. sqlList.add("update sa_accountbalance set balance='" + newbalance + "',changedate=CURRENT_TIME,changeby ='" + controller.username + "',changeuserid='" + controller.userid + "' where sys_enterpriseid ='" + sys_enterpriseid + "' and sa_accountclassid='" + sa_accountclassid + "' and siteid='" + controller.siteid + "'");
  372. balance = newbalance;
  373. }
  374. sqlFactory.addParameter("balance", balance);
  375. Rows accountclassrows = controller.dbConnect.runSqlQuery("select * from sa_accountclass where siteid='" + controller.siteid + "' and sa_accountclassid=" + sa_accountclassid);
  376. if (!accountclassrows.isEmpty()) {
  377. String content = "您的" + accountclassrows.get(0).getString("accountname") + "已支出【" + cashbillEntity.getAmount() + "】元";
  378. new Accountbalance().sendMsg(controller, content, cashbillEntity.getOwnerid(), sys_enterpriseid);
  379. }
  380. } else {
  381. sqlFactory.addParameter("status", "新建");
  382. sqlFactory.addParameter("checkby", "");
  383. sqlFactory.addParameter("checkdate", "");
  384. sqlFactory.addParameter("balance", 0);
  385. }
  386. sqlList.add(sqlFactory.getSQL());
  387. JSONObject jsonObject = new JSONObject();
  388. jsonObject.put("sa_cashbillid", sa_cashbillid);
  389. jsonObject.put("sqlList", sqlList);
  390. return jsonObject;
  391. }
  392. /**
  393. * 创建收入凭证(直接执行SQL语句)
  394. *
  395. * @param controller
  396. * @param sys_enterpriseid 企业id
  397. * @param sa_accountclassid 账户id
  398. * @param cashbillEntity 凭证实体
  399. * @param ischeck 是否审核
  400. * @throws YosException
  401. */
  402. public static void createCashbillIncomeWithoutSQL(Controller controller, long sys_enterpriseid, long sa_accountclassid,
  403. CashbillEntity cashbillEntity,
  404. boolean ischeck, boolean isupdatek3flag) throws YosException {
  405. JSONObject jsonObject = createCashbillIncome(controller, sys_enterpriseid, sa_accountclassid, cashbillEntity, ischeck, isupdatek3flag);
  406. controller.dbConnect.runSqlUpdate(new ArrayList<>(jsonObject.getJSONArray("sqlList").toJavaList(String.class)));
  407. if (ischeck) {
  408. remindSend(controller, sys_enterpriseid, jsonObject.getLong("sa_cashbillid"));
  409. }
  410. }
  411. /**
  412. * 创建支出凭证(直接执行SQL语句)
  413. *
  414. * @param controller
  415. * @param sys_enterpriseid 企业id
  416. * @param sa_accountclassid 账户id
  417. * @param cashbillEntity 凭证实体
  418. * @param ischeck 是否审核
  419. * @throws YosException
  420. */
  421. public static void createCashbillPayWithoutSQL(Controller controller, long sys_enterpriseid, long sa_accountclassid,
  422. CashbillEntity cashbillEntity,
  423. boolean ischeck) throws YosException {
  424. JSONObject jsonObject = createCashbillPay(controller, sys_enterpriseid, sa_accountclassid, cashbillEntity, ischeck);
  425. controller.dbConnect.runSqlUpdate(new ArrayList<>(jsonObject.getJSONArray("sqlList").toJavaList(String.class)));
  426. if (ischeck) {
  427. remindSend(controller, sys_enterpriseid, jsonObject.getLong("sa_cashbillid"));
  428. }
  429. }
  430. /**
  431. * 查询企业审核通过的有效期内的返利金余额
  432. *
  433. * @param controller
  434. * @param sys_enterpriseid
  435. * @return
  436. * @throws YosException
  437. */
  438. public static BigDecimal getRebateBalance(Controller controller, Long sys_enterpriseid) throws YosException {
  439. Rows rows = controller.dbConnect.runSqlQuery("SELECT sum(rebate_balance) rebate_balance from sa_cashbill WHERE class='返利金' and STATUS ='审核' and rebate_enddate>=CURRENT_TIME and sys_enterpriseid= " + sys_enterpriseid + " and siteid ='" + controller.siteid + "'");
  440. return rows.get(0).getBigDecimal("rebate_balance");
  441. }
  442. /**
  443. * 更新经销商装修返利表金额
  444. *
  445. * @param controller
  446. * @param sys_enterpriseid
  447. * @param isrebateupdate
  448. * @param amount
  449. * @return
  450. * @throws YosException
  451. */
  452. public static ArrayList<String> rebateupdate(Controller controller, Long sys_enterpriseid, boolean isrebateupdate, BigDecimal amount) throws YosException {
  453. ArrayList<String> sqlList = new ArrayList<>();
  454. Rows rows = controller.dbConnect.runSqlQuery("SELECT * from sa_agentdecorationtrebate where sys_enterpriseid= " + sys_enterpriseid + " and siteid ='" + controller.siteid + "'");
  455. if (!rows.isEmpty()) {
  456. if (isrebateupdate) {
  457. sqlList.add("update sa_agentdecorationtrebate set balance=" + rows.get(0).getBigDecimal("balance").subtract(amount) + " where sa_agentdecorationtrebateid=" + rows.get(0).getLong("sa_agentdecorationtrebateid") + " and siteid ='" + controller.siteid + "'");
  458. } else {
  459. sqlList.add("update sa_agentdecorationtrebate set balance=" + rows.get(0).getBigDecimal("balance").add(amount) + " where sa_agentdecorationtrebateid=" + rows.get(0).getLong("sa_agentdecorationtrebateid") + " and siteid ='" + controller.siteid + "'");
  460. }
  461. }
  462. return sqlList;
  463. }
  464. public void sendMsg(Controller controller, String content, Long sa_orderid, Long sys_enterpriseid) throws YosException {
  465. ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid, controller.siteid).toArrayList("userid", new ArrayList<>());
  466. Remind remind = new Remind(controller);
  467. remind.setTitle("凭证消息");
  468. remind.setContent(content);
  469. remind.setType("应用");
  470. remind.setObjectid(sa_orderid);
  471. remind.setObjectname("sa_order");
  472. remind.setTouserid(userList);
  473. remind.createSys_message();
  474. }
  475. public void sendMsg(String siteid, String content, Long sa_orderid, Long sys_enterpriseid) throws YosException {
  476. ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid, siteid).toArrayList("userid", new ArrayList<>());
  477. Remind remind = new Remind(siteid);
  478. remind.setTitle("凭证消息");
  479. remind.setContent(content);
  480. remind.setType("应用");
  481. remind.setObjectid(sa_orderid);
  482. remind.setObjectname("sa_order");
  483. remind.setTouserid(userList);
  484. remind.createSys_message();
  485. }
  486. public static void remindSend(Controller controller, Long sys_enterpriseid, Long sa_cashbillid) throws YosException {
  487. if (sa_cashbillid != 0) {
  488. String siteid = controller.siteid;
  489. Rows enterpriseHrRows = controller.dbConnect.runSqlQuery("select userid from sys_enterprise_hr where siteid='" + siteid + "' and isleader=1 and sys_enterpriseid=" + sys_enterpriseid);
  490. ArrayList<Long> extraUserList = enterpriseHrRows.toArrayList("userid", new ArrayList<>());
  491. HashMap<String, Object> extradata = new HashMap<>();
  492. extradata.put("extraUserList", extraUserList);
  493. Executor.sendEml(controller, "cashbill_check", sa_cashbillid, siteid, extradata);
  494. }
  495. }
  496. }