OrderInvoiceServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  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. //新增与修改
  58. List<Admin> admins =new ArrayList<>();
  59. StringBuffer str=new StringBuffer();
  60. TOrderNewBo t = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  61. if (o.getType()==0){
  62. if (o.getApproval()==0){
  63. addExamineFinance(o, t);
  64. }else if(o.getApproval()==1&&o.getStatus()==1){
  65. admins = adminMapper.getAdminRoleTypeList(AFTConstants.HN_APPROVED);
  66. }else if (o.getApproval()==2){
  67. addExamineFinance(o, t);
  68. }else if (o.getApproval()==1&&o.getStatus()==3){
  69. o.setExamineName("");
  70. }
  71. }else if (o.getType()==1){
  72. if(o.getApproval()==0) {
  73. admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN);
  74. }else if(o.getApproval()==1&&o.getStatus()==1) {
  75. admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.COMPANY_MANAGER);
  76. }else if (o.getApproval()==2){
  77. admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN);
  78. }else if (o.getApproval()==1&&o.getStatus()==3){
  79. o.setExamineName("");
  80. }
  81. }
  82. if (!admins.isEmpty()){
  83. for (Admin a : admins) {
  84. if (!str.toString().contains(a.getName()))str=str.append(a.getName()).append(",");
  85. }
  86. if (str.length()>0)o.setExamineName(str.substring(0,str.length()-1));
  87. }
  88. }
  89. private void addExamineFinance(TOrderInvoice o, TOrderNewBo t) {
  90. OrganizationListOut dep = departmentMapper.selectAllById(t.getOrderDep());
  91. o.setExamineName(dep.getFinanceName());
  92. }
  93. /**
  94. *
  95. * @param id 开票编号
  96. * @param status 0发起 1开票通过 2开票拒绝 3特批通过 4特批拒绝 5修改提交
  97. */
  98. void addInvoiceLog(Integer id, Integer status){
  99. InvoiceLog log = new InvoiceLog(id,status,TokenManager.getAdminId());
  100. invoiceLogMapper.insertSelective(log);
  101. }
  102. @Override
  103. public int updateServiceOrder(TOrderInvoice o) {
  104. sendNoticeAndEmail(o);
  105. addInvoiceLog(o.getId(),5);
  106. o.setStatus(1);
  107. if (o.getApproval()==2)o.setApproval(1);
  108. int i=tOrderInvoiceMapper.updateByPrimaryKeySelective(o);
  109. pushOrderInvoiceExamine(o);
  110. return i;
  111. }
  112. /**
  113. * 开票提交发送站内消息及邮件
  114. * @param o
  115. */
  116. private void sendNoticeAndEmail(TOrderInvoice o) {
  117. List<String> aids = new ArrayList<>();
  118. if (o.getStatus()==1) {//发起
  119. TOrderNew t=tOrderNewMapper.selectByPrimaryKey(o.getOrderNo());
  120. if (o.getType()==0) {//省内
  121. if(o.getApproval()==0) {
  122. aids.add(departmentMapper.selectByPrimaryKey(t.getOrderDep()).getFinanceId());
  123. }else {
  124. for (Admin admin : adminMapper.getAdminRoleNameList("湖南特批开票")) {
  125. aids.add(admin.getId());
  126. }
  127. }
  128. }else if (o.getType()==1) {//省外
  129. if(o.getApproval()==0) {
  130. aids.addAll(adminMapper.listNameByDepAndName(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN));
  131. }else {
  132. aids.addAll(adminMapper.listNameByDepAndName(t.getOrderDep(), AFTConstants.COMPANY_MANAGER));
  133. }
  134. }
  135. }
  136. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  137. pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_INVPICE_START.getCode(),order, TokenManager.getAdminId(),0);
  138. }
  139. public void pushGeneralSendNoticeAndEmail(List<String> alist, Integer type,TOrderNewBo o,String adminId,Integer approval){
  140. orderNewService.pushGeneralSendNoticeAndEmail(alist, type,o, adminId,approval);
  141. }
  142. @SuppressWarnings("deprecation")
  143. @Override
  144. public boolean checkAmount(TOrderInvoice t) {
  145. TOrderNew tn=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
  146. String i=tOrderInvoiceMapper.checkApplyAmount(t.getOrderNo(),t.getId());//新建时直接查所有数据,修改时除掉修改订单
  147. //处理精度问题
  148. BigDecimal q=t.getAmount().add(new BigDecimal(i)).setScale(4, BigDecimal.ROUND_DOWN);;
  149. BigDecimal w=tn.getTotalAmount();
  150. int flag=q.compareTo(w);
  151. if (flag>0) {
  152. return true;
  153. }
  154. return false;
  155. }
  156. @SuppressWarnings("unchecked")
  157. @Override
  158. public Pagination<TOrderInvoiceBo> financeOrderInvoiceList(InputOrderInvoiceBo o,Integer pageNo,
  159. Integer pageSize) {
  160. Map<String, Object> params = new HashMap<String, Object>();
  161. if(pageSize==null||pageSize<0)pageSize=10;
  162. if(pageNo==null||pageNo<0)pageNo=1;
  163. List<String> aDep=new ArrayList<>();
  164. //财务专员查看自己的
  165. if (TokenManager.hasRole(AFTConstants.FINANCE)) {
  166. aDep.addAll(adminMapper.getFinanceDep(TokenManager.getAdminId()));
  167. }
  168. //财务经理
  169. if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  170. aDep.addAll(adminMapper.selectDepIdWithSpuerId(TokenManager.getAdminId()));
  171. }
  172. //营销管理员
  173. if (TokenManager.hasRole(AFTConstants.SALESMAN_ADMIN)) {
  174. aDep.addAll(departmentService.selectMyDeps());
  175. }
  176. if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)) {
  177. if (o.getDeps()!=null){
  178. aDep.addAll(departmentService.parseArray(o.getDeps()));
  179. }
  180. }
  181. if(o.getDeps()==null){
  182. if (!aDep.isEmpty()){
  183. params.put("deps", aDep);
  184. }
  185. }else {
  186. aDep=departmentService.comparePermissions(aDep,o.getDeps());
  187. if (aDep.isEmpty()){
  188. return new Pagination<>(1,10,0);
  189. }
  190. params.put("deps", aDep);
  191. }
  192. if(o.getType()!=null)params.put("type", o.getType());
  193. if (null !=o.getAll()){
  194. params.put("all",o.getAll());
  195. }else {
  196. params.put("all",0);
  197. }
  198. if(StringUtils.isNotBlank(o.getOrderNo()))params.put("orderNo", o.getOrderNo());
  199. if(StringUtils.isNotBlank(o.getName()))params.put("name", o.getName());
  200. if(null!=o.getApproval())params.put("approval", o.getApproval());
  201. if(null!=o.getStatus())params.put("status", o.getStatus());
  202. return (Pagination<TOrderInvoiceBo>)findPage("financeOrderInvoiceList", "financeOrderInvoiceCount", params, pageNo, pageSize);
  203. }
  204. @Override
  205. public TOrderInvoiceDetails selectByIdOrderInvoice(Integer id) {
  206. return tOrderInvoiceMapper.selectByInvoiceDitails(id);
  207. }
  208. @Override
  209. public TOrderInvoiceDetails getInvoiceDetails(String orderNo) {
  210. return tOrderInvoiceMapper.getInvoiceDetails(orderNo);
  211. }
  212. @SuppressWarnings("unchecked")
  213. @Override
  214. public Pagination<TOrderInvoiceBo> salesmanOrderInvoiceList( String orderNo,
  215. Integer pageNo, Integer pageSize) {
  216. Map<String, Object> params = new HashMap<String, Object>();
  217. if(pageSize==null||pageSize<0)pageSize=10;
  218. if(pageNo==null||pageNo<0)pageNo=1;
  219. if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo);
  220. return (Pagination<TOrderInvoiceBo>)findPage("salesmanOrderInvoiceList", "salesmanOrderInvoiceCount", params, pageNo, pageSize);
  221. }
  222. @Override
  223. public int updatefinanceExamine(Integer id, Integer examine, String reason) {
  224. TOrderInvoice t=new TOrderInvoice();
  225. t.setId(id);
  226. t.setRejectReason(reason);
  227. t.setStatus(examine);
  228. t.setExamineName("");
  229. //examine 2通过 3拒绝
  230. List<String> aids = new ArrayList<>();
  231. TOrderInvoice t2=tOrderInvoiceMapper.selectByPrimaryKey(id);
  232. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(t2.getOrderNo());
  233. Integer type=null;
  234. if(examine==3){
  235. type=NoticeStatus.ORDER_INVPICE_NO.getCode();
  236. aids.add(o.getSalesmanId());
  237. addInvoiceLog(id,2);
  238. }else if(examine==2) {
  239. type=NoticeStatus.ORDER_INVPICE_END.getCode();
  240. aids.add(o.getSalesmanId());
  241. //重新计算开票金额
  242. addInvoiceLog(id,1);
  243. }
  244. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
  245. pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),0);
  246. tOrderInvoiceMapper.updateByPrimaryKeySelective(t);
  247. if(examine==2)tOrderMidMapper.updateInvoice(t2.getOrderNo());
  248. return 1;
  249. }
  250. @SuppressWarnings("unchecked")
  251. @Override
  252. public Pagination<TOrderInvoiceBo> approvalOrderInvoiceList(Integer status,Integer approval,Integer type, String orderDep, String orderNo, String name,String userName,
  253. Integer pageNo, Integer pageSize) {
  254. Map<String, Object> params = new HashMap<String, Object>();
  255. if(pageSize==null||pageSize<0)pageSize=10;
  256. if(pageNo==null||pageNo<0)pageNo=1;
  257. if(StringUtils.isNotBlank(orderDep))params.put("orderDep", orderDep);
  258. if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo);
  259. if(StringUtils.isNotBlank(name))params.put("name", name);
  260. if(StringUtils.isNotBlank(userName))params.put("userName", userName);
  261. if(approval!=null)params.put("approval", approval);
  262. if(status!=null)params.put("status", status);
  263. //0省内 1省外 2查看所有省外
  264. if(type==0||type==1)params.put("type", type);
  265. if (type==2) {
  266. params.put("type", 1);
  267. params.put("special", 1);
  268. }
  269. if (type ==1&&!TokenManager.hasRole(AFTConstants.SUPERADMIN)) {
  270. //如果是省外则直接查本部门
  271. Admin a=adminMapper.selectByPrimaryKey(TokenManager.getAdminId());
  272. params.put("aDep", a.getDepartmentId());
  273. }
  274. return (Pagination<TOrderInvoiceBo>)findPage("approvalOrderInvoiceList", "approvalOrderInvoiceCount", params, pageNo, pageSize);
  275. }
  276. @Override
  277. public int updateapprovalExamine(Integer id, Integer examine, String reason) {
  278. TOrderInvoice t=new TOrderInvoice();
  279. t.setId(id);
  280. t.setRejectReason(reason);
  281. List<String> aids=new ArrayList<>();
  282. TOrderInvoice o=tOrderInvoiceMapper.selectByPrimaryKey(id);
  283. t.setApproval(o.getApproval());
  284. t.setType(o.getType());
  285. t.setStatus(o.getStatus());
  286. t.setOrderNo(o.getOrderNo());
  287. TOrderNew ts=tOrderNewMapper.selectByPrimaryKey(o.getOrderNo());
  288. //examine 2通过 3拒绝
  289. Integer type =null;
  290. if(examine==3) {
  291. t.setStatus(examine);
  292. type= NoticeStatus.ORDER_INVPICE_APPROVA_NO.getCode();
  293. aids.add(ts.getSalesmanId());
  294. addInvoiceLog(id,4);
  295. }else {
  296. t.setApproval(examine);
  297. addInvoiceLog(id,3);
  298. type= NoticeStatus.ORDER_INVPICE_APPROVA_YES.getCode();
  299. if (o.getType()==0) {
  300. aids.add(departmentMapper.selectByPrimaryKey(ts.getOrderDep()).getFinanceId());
  301. }else if(o.getType()==1) {
  302. aids.addAll(adminMapper.listNameByDepAndName(ts.getOrderDep(), AFTConstants.SALESMAN_ADMIN));
  303. }
  304. }
  305. pushOrderInvoiceExamine(t);
  306. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  307. pushGeneralSendNoticeAndEmail(aids,type,order, TokenManager.getAdminId(),0);
  308. return tOrderInvoiceMapper.updateByPrimaryKeySelective(t);
  309. }
  310. @Override
  311. public List<OutInvoiceLog> InvoiceLog(Integer id) {
  312. List<OutInvoiceLog> list=tOrderInvoiceMapper.selectInvoiceLog(id);
  313. return list;
  314. }
  315. }