FundManagerOrderServiceImpl.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. package com.goafanti.order.service.impl;
  2. import java.io.UnsupportedEncodingException;
  3. import java.math.BigDecimal;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import javax.mail.MessagingException;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import com.goafanti.admin.bo.AdminListBo;
  11. import com.goafanti.common.bo.EmailBo;
  12. import com.goafanti.common.dao.AdminMapper;
  13. import com.goafanti.common.dao.TOrderBackMapper;
  14. import com.goafanti.common.dao.TOrderBillNewMapper;
  15. import com.goafanti.common.dao.TOrderNewMapper;
  16. import com.goafanti.common.dao.TOrderRefundMapper;
  17. import com.goafanti.common.model.TOrderBack;
  18. import com.goafanti.common.model.TOrderBillNew;
  19. import com.goafanti.common.model.TOrderNew;
  20. import com.goafanti.common.model.TOrderRefund;
  21. import com.goafanti.common.utils.SendEmailUtil;
  22. import com.goafanti.common.utils.StringUtils;
  23. import com.goafanti.core.mybatis.BaseMybatisDao;
  24. import com.goafanti.core.mybatis.JDBCIdGenerator;
  25. import com.goafanti.core.mybatis.page.Pagination;
  26. import com.goafanti.core.shiro.token.TokenManager;
  27. import com.goafanti.order.bo.OrderListBo;
  28. import com.goafanti.order.bo.TOrderNewBo;
  29. import com.goafanti.order.service.FundManageOrderService;
  30. @Service
  31. public class FundManagerOrderServiceImpl extends BaseMybatisDao<TOrderNewMapper> implements FundManageOrderService {
  32. @Autowired
  33. private TOrderNewMapper tOrderNewMapper;
  34. @Autowired
  35. private AdminMapper adminMapper;
  36. @Autowired
  37. private TOrderBillNewMapper billNewMapper;
  38. @Autowired
  39. private TOrderBackMapper backMapper;
  40. @Autowired
  41. private TOrderRefundMapper refundMapper;
  42. @Autowired
  43. JDBCIdGenerator idGenerator;
  44. @SuppressWarnings("unchecked")
  45. @Override
  46. public Pagination<OrderListBo> allUnassignedOrder(OrderListBo order, Integer pageNo,
  47. Integer pageSize,Integer ob) {
  48. Map<String, Object> params = new HashMap<String, Object>();
  49. params.put("o", order);
  50. params.put("ob", ob);
  51. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("getAllUnassignedListOrder", "getAllUnassignedCountOrder", params, pageNo, pageSize);
  52. return data;
  53. }
  54. @Override
  55. public Integer updateDistributionFinance(String orderNo, String financeId, Integer approval) {
  56. // 先判断订单id和财务专员是否存在或者能够使用
  57. //判断是不是特批的数据
  58. if(approval != 2 && approval != 0){//特批未通过
  59. return -1;
  60. }
  61. TOrderNew onew = new TOrderNew();
  62. onew.setOrderNo(orderNo);
  63. onew.setDeleteSign(0);//正常
  64. onew.setProcessStatus(2);//已派财务管理员
  65. onew.setApproval(approval);//特批状态
  66. onew.setOrderStatus(2);//营销管理员审核通过
  67. int idCount = tOrderNewMapper.getCountByIdAndStatus(onew);
  68. int fidCount = adminMapper.getCountById(financeId);
  69. Integer r = null;
  70. if(idCount == 1 && fidCount == 1){
  71. //修改订单流程状态
  72. TOrderNew record = new TOrderNew();
  73. record.setOrderNo(orderNo);
  74. record.setFinanceId(financeId);
  75. record.setProcessStatus(3);
  76. r = tOrderNewMapper.updateByPrimaryKeySelective(record);
  77. }else{
  78. //返回错误标志 提示订单编号或者财务专员选择错误
  79. r = -2;
  80. }
  81. return r;
  82. }
  83. @SuppressWarnings("unchecked")
  84. @Override
  85. public Pagination<OrderListBo> financeList(OrderListBo order,
  86. Integer pageNo, Integer pageSize) {
  87. Map<String, Object> params = new HashMap<String, Object>();
  88. params.put("o", order);
  89. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("financeList", "financeCount", params, pageNo, pageSize);
  90. return data;
  91. }
  92. @Override
  93. public Integer updateReject(TOrderBack back) {
  94. // 是否已经收款
  95. BigDecimal bd = billNewMapper.getAmountByOid(back.getOrderNo());
  96. if(bd.compareTo(new BigDecimal(0.0)) == 1){
  97. return 0;//已经收款不能驳回
  98. }
  99. TOrderNewBo b = tOrderNewMapper.getSaleIdByOno(back.getOrderNo());//订单和订单负责人相关信息
  100. if(null == b || StringUtils.isBlank(b.getSalesmanId())){
  101. return -1;
  102. }
  103. //否 可以处理驳回
  104. //修改订单状态
  105. TOrderNew orderNew = new TOrderNew();
  106. orderNew.setOrderNo(back.getOrderNo());
  107. // TODO
  108. orderNew.setOrderStatus(5);
  109. int c = tOrderNewMapper.updateByPrimaryKeySelective(orderNew);
  110. //新增驳回数据
  111. if(c>0){
  112. back.setBackStatus(0);
  113. back.setInitiate(TokenManager.getAdminId());//发起人
  114. back.setAccept(b.getSalesmanId()); //查看该订单的负责人
  115. c = backMapper.insertSelective(back);
  116. if(StringUtils.isNotBlank(b.getEmail())){ //邮箱不为空发送邮件
  117. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  118. //发送驳回邮件
  119. String content = "<div>客户名称: "+ b.getUserName() +"</div><div>订单编号: " + back.getOrderNo() + "</div>";
  120. EmailBo bo = new EmailBo("订单驳回", b.getEmail(), b.getSalesmanName(), a.getDepartmentName(), a.getName(), content);
  121. try {
  122. SendEmailUtil.send(bo);
  123. } catch (UnsupportedEncodingException e) {
  124. // TODO Auto-generated catch block
  125. e.printStackTrace();
  126. } catch (MessagingException e) {
  127. // TODO Auto-generated catch block
  128. e.printStackTrace();
  129. }
  130. }
  131. }
  132. return c;
  133. }
  134. @Override
  135. public Integer addReceiptsFlow(TOrderBillNew billNew) {
  136. //判断有没有要加入的金额有没有超过总金额
  137. BigDecimal bill = billNewMapper.getAmountByOid(billNew.getOrderNo());
  138. //获得的单个订单金额数据(首付金额和总金额)
  139. TOrderNew o = tOrderNewMapper.selectByPrimaryKey(billNew.getOrderNo());
  140. if(null == o){
  141. return -2;
  142. }
  143. BigDecimal bd = bill.add(billNew.getTransactionAmount().abs());
  144. int lstaus = 0;
  145. //如果订单流水总额大于总金额 return -1
  146. //如果订单流水等于于总金额 lstaus 2
  147. //如果订单流水小于总金额大于首付 lstaus 1
  148. //如果订单流水小于首付 lstaus 0
  149. // 0 相等
  150. // -1 小于
  151. // 1 大于
  152. if(bd.compareTo(o.getTotalAmount()) == 1){
  153. return -1;//超过不能添加
  154. }else if(bd.compareTo(o.getTotalAmount()) == 0){
  155. lstaus = 2;
  156. }else if(bd.compareTo(o.getTotalAmount()) == -1 && bd.compareTo(o.getFirstAmount()) == 1){
  157. lstaus = 1;
  158. }
  159. //否则新增流水信息
  160. billNew.setBillNo(idGenerator.generateId().toString());
  161. billNew.setCreater(TokenManager.getAdminId());
  162. int result = billNewMapper.insertSelective(billNew);
  163. //修改订单结算金额和结算状态
  164. //如果已经首付并且流程状态是没有派给咨询师的修改流程状态为4
  165. TOrderNew orderNew = new TOrderNew();
  166. orderNew.setOrderNo(billNew.getOrderNo());
  167. orderNew.setSettlementAmount(bd);
  168. orderNew.setLiquidationStatus(lstaus);
  169. if(lstaus == 1 && o.getProcessStatus() == 3){
  170. orderNew.setProcessStatus(4);
  171. }
  172. if(result > 0){
  173. result = tOrderNewMapper.updateByPrimaryKeySelective(orderNew);
  174. }
  175. return result;
  176. }
  177. @Override
  178. public Integer updateChangeRefund(TOrderRefund refund) {
  179. //查看当前退单状态
  180. TOrderRefund d = refundMapper.selectByPrimaryKey(refund.getId());
  181. if(d.getRefundStatus() != 0){
  182. return -1;
  183. }
  184. //修改退单审核状态
  185. return refundMapper.updateRefundById(refund);
  186. }
  187. @Override
  188. public Integer addRefundFlow(TOrderBillNew billNew) {
  189. // 查看收款总金额
  190. BigDecimal bd = billNewMapper.getAmountByOid(billNew.getOrderNo());
  191. billNew.setTransactionAmount(billNew.getTransactionAmount().abs());//绝对值
  192. int lstaus = 3;
  193. //如果小于要退的金额 return -1
  194. //如果等于要退的金额 lstatus 4
  195. //如果大于 要退的金额 lstatus 3
  196. if(bd.compareTo(billNew.getTransactionAmount()) == -1){
  197. return -1;
  198. }else if(bd.compareTo(billNew.getTransactionAmount()) == 0){
  199. lstaus = 4;
  200. }
  201. //新增收款流水
  202. billNew.setBillNo(idGenerator.generateId().toString());
  203. billNew.setCreater(TokenManager.getAdminId());
  204. billNew.setTransactionAmount(billNew.getTransactionAmount().negate());// 取负数
  205. int result = billNewMapper.insertSelective(billNew);
  206. //修改订单数据结算状态和结算金额
  207. TOrderNew orderNew = new TOrderNew();
  208. orderNew.setOrderNo(billNew.getOrderNo());
  209. orderNew.setSettlementAmount(bd.add(billNew.getTransactionAmount()));
  210. orderNew.setLiquidationStatus(lstaus);
  211. if(lstaus == 4){//如果款项全部退完就更改订单状态,这里不一定待商榷
  212. orderNew.setProcessStatus(6);
  213. }
  214. if(result > 0){
  215. result = tOrderNewMapper.updateByPrimaryKeySelective(orderNew);
  216. }
  217. return result;
  218. }
  219. @Override
  220. public TOrderBillNew selectOneRefundFlow(String BillNo) {
  221. return billNewMapper.getOneRefundFlow(BillNo);
  222. }
  223. @Override
  224. public List<TOrderBillNew> selectOneOrderAllRefundFlow(String orderNo) {
  225. return billNewMapper.getOneOrderAllRefundFlow(orderNo);
  226. }
  227. }