Accountbalance.java 22 KB

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