OrderInvoiceServiceImpl.java 12 KB

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