OrderInvoiceServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. package com.goafanti.order.service.impl;
  2. import java.math.BigDecimal;
  3. import java.util.ArrayList;
  4. import java.util.Date;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import com.goafanti.admin.service.DepartmentService;
  9. import com.goafanti.common.dao.*;
  10. import com.goafanti.common.model.InvoiceLog;
  11. import com.goafanti.order.bo.*;
  12. import com.goafanti.organization.bo.OrganizationListOut;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import com.goafanti.common.constant.AFTConstants;
  17. import com.goafanti.common.enums.NoticeStatus;
  18. import com.goafanti.common.model.Admin;
  19. import com.goafanti.common.model.TOrderInvoice;
  20. import com.goafanti.common.model.TOrderNew;
  21. import com.goafanti.core.mybatis.BaseMybatisDao;
  22. import com.goafanti.core.mybatis.page.Pagination;
  23. import com.goafanti.core.shiro.token.TokenManager;
  24. import com.goafanti.order.service.OrderInvoiceService;
  25. import com.goafanti.order.service.OrderNewService;
  26. @Service
  27. public class OrderInvoiceServiceImpl extends BaseMybatisDao<TOrderInvoiceMapper> implements OrderInvoiceService {
  28. @Autowired
  29. private TOrderInvoiceMapper tOrderInvoiceMapper;
  30. @Autowired
  31. private TOrderNewMapper tOrderNewMapper;
  32. @Autowired
  33. private DepartmentMapper departmentMapper;
  34. @Autowired
  35. private AdminMapper adminMapper;
  36. @Autowired
  37. private OrderNewService orderNewService;
  38. @Autowired
  39. private TOrderMidMapper tOrderMidMapper;
  40. @Autowired
  41. private InvoiceLogMapper invoiceLogMapper;
  42. @Autowired
  43. private DepartmentService departmentService;
  44. @Override
  45. public int createServiceOrder(TOrderInvoice o) {
  46. o.setCreateTime(new Date());
  47. sendNoticeAndEmail(o);
  48. //前端直接会直接调取上一个发起数据给新开票,防止前一个数据为审核后
  49. if (o.getApproval()==2)o.setApproval(1);
  50. if (o.getStatus()!=1)o.setStatus(1);
  51. pushOrderInvoiceExamine(o);
  52. Integer i=tOrderInvoiceMapper.insertSelective(o);
  53. addInvoiceLog(o.getId(),0);
  54. return i;
  55. }
  56. private void pushOrderInvoiceExamine(TOrderInvoice o) {
  57. List<Admin> admins =new ArrayList<>();
  58. StringBuffer str=new StringBuffer();
  59. if (o.getType()==0){
  60. if (o.getApproval()==0){
  61. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  62. OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep());
  63. o.setExamineName(dep.getFinanceName());
  64. }else {
  65. admins = adminMapper.getAdminRoleTypeList(AFTConstants.HN_APPROVED);
  66. for (Admin a : admins) {
  67. str=str.append(a.getName()).append(",");
  68. }
  69. if (str.length()>0)o.setExamineName(str.substring(0,str.length()-1));
  70. }
  71. }else if (o.getType()==1){
  72. TOrderNewBo t = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  73. if(o.getApproval()==0) {
  74. admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN);
  75. }else {
  76. admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.COMPANY_MANAGER);
  77. }
  78. }
  79. if (!admins.isEmpty()){
  80. for (Admin a : admins) {
  81. str=str.append(a.getName()).append(",");
  82. }
  83. if (str.length()>0)o.setExamineName(str.substring(0,str.length()-1));
  84. }
  85. }
  86. /**
  87. *
  88. * @param id 开票编号
  89. * @param status 0发起 1开票通过 2开票拒绝 3特批通过 4特批拒绝 5修改提交
  90. */
  91. void addInvoiceLog(Integer id, Integer status){
  92. InvoiceLog log = new InvoiceLog(id,status,TokenManager.getAdminId());
  93. invoiceLogMapper.insertSelective(log);
  94. }
  95. @Override
  96. public int updateServiceOrder(TOrderInvoice o) {
  97. sendNoticeAndEmail(o);
  98. addInvoiceLog(o.getId(),5);
  99. o.setStatus(1);
  100. return tOrderInvoiceMapper.updateByPrimaryKeySelective(o);
  101. }
  102. /**
  103. * 开票提交发送站内消息及邮件
  104. * @param o
  105. */
  106. private void sendNoticeAndEmail(TOrderInvoice o) {
  107. List<String> aids = new ArrayList<>();
  108. if (o.getStatus()==1) {//发起
  109. TOrderNew t=tOrderNewMapper.selectByPrimaryKey(o.getOrderNo());
  110. if (o.getType()==0) {//省内
  111. if(o.getApproval()==0) {
  112. aids.add(departmentMapper.selectByPrimaryKey(t.getOrderDep()).getFinanceId());
  113. }else {
  114. for (Admin admin : adminMapper.getAdminRoleNameList("湖南特批开票")) {
  115. aids.add(admin.getId());
  116. }
  117. }
  118. }else if (o.getType()==1) {//省外
  119. if(o.getApproval()==0) {
  120. aids.addAll(adminMapper.listNameByDepAndName(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN));
  121. }else {
  122. aids.addAll(adminMapper.listNameByDepAndName(t.getOrderDep(), AFTConstants.COMPANY_MANAGER));
  123. }
  124. }
  125. }
  126. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  127. orderNewService.pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_INVPICE_START.getCode(),order, TokenManager.getAdminId(),0);
  128. }
  129. @SuppressWarnings("deprecation")
  130. @Override
  131. public boolean checkAmount(TOrderInvoice t) {
  132. TOrderNew tn=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
  133. String i=tOrderInvoiceMapper.checkApplyAmount(t.getOrderNo(),t.getId());//新建时直接查所有数据,修改时除掉修改订单
  134. //处理精度问题
  135. BigDecimal q=t.getAmount().add(new BigDecimal(i)).setScale(4, BigDecimal.ROUND_DOWN);;
  136. BigDecimal w=tn.getTotalAmount();
  137. int flag=q.compareTo(w);
  138. if (flag>0) {
  139. return true;
  140. }
  141. return false;
  142. }
  143. @SuppressWarnings("unchecked")
  144. @Override
  145. public Pagination<TOrderInvoiceBo> financeOrderInvoiceList(InputOrderInvoiceBo o,Integer pageNo,
  146. Integer pageSize) {
  147. Map<String, Object> params = new HashMap<String, Object>();
  148. if(pageSize==null||pageSize<0)pageSize=10;
  149. if(pageNo==null||pageNo<0)pageNo=1;
  150. List<String> aDep=new ArrayList<>();
  151. //财务专员查看自己的
  152. if (TokenManager.hasRole(AFTConstants.FINANCE)) {
  153. aDep.addAll(departmentService.getFinanceDep(TokenManager.getAdminId()));
  154. }
  155. //财务经理
  156. if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  157. aDep.addAll(adminMapper.selectDepIdWithSpuerId(TokenManager.getAdminId()));
  158. }
  159. //营销管理员
  160. if (TokenManager.hasRole(AFTConstants.SALESMAN_ADMIN)) {
  161. aDep.addAll(departmentService.selectMyDeps());
  162. }
  163. if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)) {
  164. if (o.getDeps()!=null){
  165. aDep.addAll(departmentService.parseArray(o.getDeps()));
  166. }
  167. }
  168. if(o.getDeps()==null){
  169. if (!aDep.isEmpty()){
  170. params.put("deps", aDep);
  171. }
  172. }else {
  173. aDep=departmentService.comparePermissions(aDep,o.getDeps());
  174. if (aDep.isEmpty()){
  175. return new Pagination<>(1,10,0);
  176. }
  177. params.put("deps", aDep);
  178. }
  179. if(o.getType()!=null)params.put("type", o.getType());
  180. if (null !=o.getAll()){
  181. params.put("all",o.getAll());
  182. }else {
  183. params.put("all",0);
  184. }
  185. if(StringUtils.isNotBlank(o.getOrderNo()))params.put("orderNo", o.getOrderNo());
  186. if(StringUtils.isNotBlank(o.getName()))params.put("name", o.getName());
  187. if(null!=o.getApproval())params.put("approval", o.getApproval());
  188. if(null!=o.getStatus())params.put("status", o.getStatus());
  189. return (Pagination<TOrderInvoiceBo>)findPage("financeOrderInvoiceList", "financeOrderInvoiceCount", params, pageNo, pageSize);
  190. }
  191. @Override
  192. public TOrderInvoiceDetails selectByIdOrderInvoice(Integer id) {
  193. return tOrderInvoiceMapper.selectByInvoiceDitails(id);
  194. }
  195. @Override
  196. public TOrderInvoiceDetails getInvoiceDetails(String orderNo) {
  197. return tOrderInvoiceMapper.getInvoiceDetails(orderNo);
  198. }
  199. @SuppressWarnings("unchecked")
  200. @Override
  201. public Pagination<TOrderInvoiceBo> salesmanOrderInvoiceList( String orderNo,
  202. Integer pageNo, Integer pageSize) {
  203. Map<String, Object> params = new HashMap<String, Object>();
  204. if(pageSize==null||pageSize<0)pageSize=10;
  205. if(pageNo==null||pageNo<0)pageNo=1;
  206. if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo);
  207. return (Pagination<TOrderInvoiceBo>)findPage("salesmanOrderInvoiceList", "salesmanOrderInvoiceCount", params, pageNo, pageSize);
  208. }
  209. @Override
  210. public int updatefinanceExamine(Integer id, Integer examine, String reason) {
  211. TOrderInvoice t=new TOrderInvoice();
  212. t.setId(id);
  213. t.setRejectReason(reason);
  214. t.setStatus(examine);
  215. t.setExamineName("");
  216. //examine 2通过 3拒绝
  217. List<String> aids = new ArrayList<>();
  218. TOrderInvoice t2=tOrderInvoiceMapper.selectByPrimaryKey(id);
  219. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(t2.getOrderNo());
  220. Integer type=null;
  221. if(examine==3){
  222. type=NoticeStatus.ORDER_INVPICE_NO.getCode();
  223. aids.add(o.getSalesmanId());
  224. addInvoiceLog(id,2);
  225. }else if(examine==2) {
  226. type=NoticeStatus.ORDER_INVPICE_END.getCode();
  227. aids.add(o.getSalesmanId());
  228. //重新计算开票金额
  229. addInvoiceLog(id,1);
  230. }
  231. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
  232. orderNewService.pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),0);
  233. tOrderInvoiceMapper.updateByPrimaryKeySelective(t);
  234. if(examine==2)tOrderMidMapper.updateInvoice(t2.getOrderNo());
  235. return 1;
  236. }
  237. @SuppressWarnings("unchecked")
  238. @Override
  239. public Pagination<TOrderInvoiceBo> approvalOrderInvoiceList(Integer status,Integer approval,Integer type, String orderDep, String orderNo, String name,String userName,
  240. Integer pageNo, Integer pageSize) {
  241. Map<String, Object> params = new HashMap<String, Object>();
  242. if(pageSize==null||pageSize<0)pageSize=10;
  243. if(pageNo==null||pageNo<0)pageNo=1;
  244. if(StringUtils.isNotBlank(orderDep))params.put("orderDep", orderDep);
  245. if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo);
  246. if(StringUtils.isNotBlank(name))params.put("name", name);
  247. if(StringUtils.isNotBlank(userName))params.put("userName", userName);
  248. if(approval!=null)params.put("approval", approval);
  249. if(status!=null)params.put("status", status);
  250. //0省内 1省外 2查看所有省外
  251. if(type==0||type==1)params.put("type", type);
  252. if (type==2) {
  253. params.put("type", 1);
  254. params.put("special", 1);
  255. }
  256. if (type ==1&&!TokenManager.hasRole(AFTConstants.SUPERADMIN)) {
  257. //如果是省外则直接查本部门
  258. Admin a=adminMapper.selectByPrimaryKey(TokenManager.getAdminId());
  259. params.put("aDep", a.getDepartmentId());
  260. }
  261. return (Pagination<TOrderInvoiceBo>)findPage("approvalOrderInvoiceList", "approvalOrderInvoiceCount", params, pageNo, pageSize);
  262. }
  263. @Override
  264. public int updateapprovalExamine(Integer id, Integer examine, String reason) {
  265. TOrderInvoice t=new TOrderInvoice();
  266. t.setId(id);
  267. t.setRejectReason(reason);
  268. List<String> aids=new ArrayList<>();
  269. TOrderInvoice o=tOrderInvoiceMapper.selectByPrimaryKey(id);
  270. TOrderNew ts=tOrderNewMapper.selectByPrimaryKey(o.getOrderNo());
  271. //examine 2通过 3拒绝
  272. Integer type =null;
  273. if(examine==3) {
  274. t.setStatus(examine);
  275. type= NoticeStatus.ORDER_INVPICE_APPROVA_NO.getCode();
  276. aids.add(ts.getSalesmanId());
  277. addInvoiceLog(id,4);
  278. }else {
  279. t.setApproval(examine);
  280. addInvoiceLog(id,3);
  281. type= NoticeStatus.ORDER_INVPICE_APPROVA_YES.getCode();
  282. if (o.getType()==0) {
  283. aids.add(departmentMapper.selectByPrimaryKey(ts.getOrderDep()).getFinanceId());
  284. }else if(o.getType()==1) {
  285. aids.addAll(adminMapper.listNameByDepAndName(ts.getOrderDep(), AFTConstants.SALESMAN_ADMIN));
  286. }
  287. }
  288. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  289. orderNewService.pushGeneralSendNoticeAndEmail(aids,type,order, TokenManager.getAdminId(),0);
  290. return tOrderInvoiceMapper.updateByPrimaryKeySelective(t);
  291. }
  292. @Override
  293. public List<OutInvoiceLog> InvoiceLog(Integer id) {
  294. List<OutInvoiceLog> list=tOrderInvoiceMapper.selectInvoiceLog(id);
  295. return list;
  296. }
  297. }