OrderInvoiceServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  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. orderNewService.pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_INVPICE_START.getCode(),order, TokenManager.getAdminId(),0);
  138. }
  139. @SuppressWarnings("deprecation")
  140. @Override
  141. public boolean checkAmount(TOrderInvoice t) {
  142. TOrderNew tn=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
  143. String i=tOrderInvoiceMapper.checkApplyAmount(t.getOrderNo(),t.getId());//新建时直接查所有数据,修改时除掉修改订单
  144. //处理精度问题
  145. BigDecimal q=t.getAmount().add(new BigDecimal(i)).setScale(4, BigDecimal.ROUND_DOWN);;
  146. BigDecimal w=tn.getTotalAmount();
  147. int flag=q.compareTo(w);
  148. if (flag>0) {
  149. return true;
  150. }
  151. return false;
  152. }
  153. @SuppressWarnings("unchecked")
  154. @Override
  155. public Pagination<TOrderInvoiceBo> financeOrderInvoiceList(InputOrderInvoiceBo o,Integer pageNo,
  156. Integer pageSize) {
  157. Map<String, Object> params = new HashMap<String, Object>();
  158. if(pageSize==null||pageSize<0)pageSize=10;
  159. if(pageNo==null||pageNo<0)pageNo=1;
  160. List<String> aDep=new ArrayList<>();
  161. //财务专员查看自己的
  162. if (TokenManager.hasRole(AFTConstants.FINANCE)) {
  163. aDep.addAll(adminMapper.getFinanceDep(TokenManager.getAdminId()));
  164. }
  165. //财务经理
  166. if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  167. aDep.addAll(adminMapper.selectDepIdWithSpuerId(TokenManager.getAdminId()));
  168. }
  169. //营销管理员
  170. if (TokenManager.hasRole(AFTConstants.SALESMAN_ADMIN)) {
  171. aDep.addAll(departmentService.selectMyDeps());
  172. }
  173. if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)) {
  174. if (o.getDeps()!=null){
  175. aDep.addAll(departmentService.parseArray(o.getDeps()));
  176. }
  177. }
  178. if(o.getDeps()==null){
  179. if (!aDep.isEmpty()){
  180. params.put("deps", aDep);
  181. }
  182. }else {
  183. aDep=departmentService.comparePermissions(aDep,o.getDeps());
  184. if (aDep.isEmpty()){
  185. return new Pagination<>(1,10,0);
  186. }
  187. params.put("deps", aDep);
  188. }
  189. if(o.getType()!=null)params.put("type", o.getType());
  190. if (null !=o.getAll()){
  191. params.put("all",o.getAll());
  192. }else {
  193. params.put("all",0);
  194. }
  195. if(StringUtils.isNotBlank(o.getOrderNo()))params.put("orderNo", o.getOrderNo());
  196. if(StringUtils.isNotBlank(o.getName()))params.put("name", o.getName());
  197. if(null!=o.getApproval())params.put("approval", o.getApproval());
  198. if(null!=o.getStatus())params.put("status", o.getStatus());
  199. return (Pagination<TOrderInvoiceBo>)findPage("financeOrderInvoiceList", "financeOrderInvoiceCount", params, pageNo, pageSize);
  200. }
  201. @Override
  202. public TOrderInvoiceDetails selectByIdOrderInvoice(Integer id) {
  203. return tOrderInvoiceMapper.selectByInvoiceDitails(id);
  204. }
  205. @Override
  206. public TOrderInvoiceDetails getInvoiceDetails(String orderNo) {
  207. return tOrderInvoiceMapper.getInvoiceDetails(orderNo);
  208. }
  209. @SuppressWarnings("unchecked")
  210. @Override
  211. public Pagination<TOrderInvoiceBo> salesmanOrderInvoiceList( String orderNo,
  212. Integer pageNo, Integer pageSize) {
  213. Map<String, Object> params = new HashMap<String, Object>();
  214. if(pageSize==null||pageSize<0)pageSize=10;
  215. if(pageNo==null||pageNo<0)pageNo=1;
  216. if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo);
  217. return (Pagination<TOrderInvoiceBo>)findPage("salesmanOrderInvoiceList", "salesmanOrderInvoiceCount", params, pageNo, pageSize);
  218. }
  219. @Override
  220. public int updatefinanceExamine(Integer id, Integer examine, String reason) {
  221. TOrderInvoice t=new TOrderInvoice();
  222. t.setId(id);
  223. t.setRejectReason(reason);
  224. t.setStatus(examine);
  225. t.setExamineName("");
  226. //examine 2通过 3拒绝
  227. List<String> aids = new ArrayList<>();
  228. TOrderInvoice t2=tOrderInvoiceMapper.selectByPrimaryKey(id);
  229. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(t2.getOrderNo());
  230. Integer type=null;
  231. if(examine==3){
  232. type=NoticeStatus.ORDER_INVPICE_NO.getCode();
  233. aids.add(o.getSalesmanId());
  234. addInvoiceLog(id,2);
  235. }else if(examine==2) {
  236. type=NoticeStatus.ORDER_INVPICE_END.getCode();
  237. aids.add(o.getSalesmanId());
  238. //重新计算开票金额
  239. addInvoiceLog(id,1);
  240. }
  241. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
  242. orderNewService.pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),0);
  243. tOrderInvoiceMapper.updateByPrimaryKeySelective(t);
  244. if(examine==2)tOrderMidMapper.updateInvoice(t2.getOrderNo());
  245. return 1;
  246. }
  247. @SuppressWarnings("unchecked")
  248. @Override
  249. public Pagination<TOrderInvoiceBo> approvalOrderInvoiceList(Integer status,Integer approval,Integer type, String orderDep, String orderNo, String name,String userName,
  250. Integer pageNo, Integer pageSize) {
  251. Map<String, Object> params = new HashMap<String, Object>();
  252. if(pageSize==null||pageSize<0)pageSize=10;
  253. if(pageNo==null||pageNo<0)pageNo=1;
  254. if(StringUtils.isNotBlank(orderDep))params.put("orderDep", orderDep);
  255. if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo);
  256. if(StringUtils.isNotBlank(name))params.put("name", name);
  257. if(StringUtils.isNotBlank(userName))params.put("userName", userName);
  258. if(approval!=null)params.put("approval", approval);
  259. if(status!=null)params.put("status", status);
  260. //0省内 1省外 2查看所有省外
  261. if(type==0||type==1)params.put("type", type);
  262. if (type==2) {
  263. params.put("type", 1);
  264. params.put("special", 1);
  265. }
  266. if (type ==1&&!TokenManager.hasRole(AFTConstants.SUPERADMIN)) {
  267. //如果是省外则直接查本部门
  268. Admin a=adminMapper.selectByPrimaryKey(TokenManager.getAdminId());
  269. params.put("aDep", a.getDepartmentId());
  270. }
  271. return (Pagination<TOrderInvoiceBo>)findPage("approvalOrderInvoiceList", "approvalOrderInvoiceCount", params, pageNo, pageSize);
  272. }
  273. @Override
  274. public int updateapprovalExamine(Integer id, Integer examine, String reason) {
  275. TOrderInvoice t=new TOrderInvoice();
  276. t.setId(id);
  277. t.setRejectReason(reason);
  278. List<String> aids=new ArrayList<>();
  279. TOrderInvoice o=tOrderInvoiceMapper.selectByPrimaryKey(id);
  280. t.setApproval(o.getApproval());
  281. t.setType(o.getType());
  282. t.setStatus(o.getStatus());
  283. t.setOrderNo(o.getOrderNo());
  284. TOrderNew ts=tOrderNewMapper.selectByPrimaryKey(o.getOrderNo());
  285. //examine 2通过 3拒绝
  286. Integer type =null;
  287. if(examine==3) {
  288. t.setStatus(examine);
  289. type= NoticeStatus.ORDER_INVPICE_APPROVA_NO.getCode();
  290. aids.add(ts.getSalesmanId());
  291. addInvoiceLog(id,4);
  292. }else {
  293. t.setApproval(examine);
  294. addInvoiceLog(id,3);
  295. type= NoticeStatus.ORDER_INVPICE_APPROVA_YES.getCode();
  296. if (o.getType()==0) {
  297. aids.add(departmentMapper.selectByPrimaryKey(ts.getOrderDep()).getFinanceId());
  298. }else if(o.getType()==1) {
  299. aids.addAll(adminMapper.listNameByDepAndName(ts.getOrderDep(), AFTConstants.SALESMAN_ADMIN));
  300. }
  301. }
  302. pushOrderInvoiceExamine(t);
  303. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo());
  304. orderNewService.pushGeneralSendNoticeAndEmail(aids,type,order, TokenManager.getAdminId(),0);
  305. return tOrderInvoiceMapper.updateByPrimaryKeySelective(t);
  306. }
  307. @Override
  308. public List<OutInvoiceLog> InvoiceLog(Integer id) {
  309. List<OutInvoiceLog> list=tOrderInvoiceMapper.selectInvoiceLog(id);
  310. return list;
  311. }
  312. }