package com.goafanti.order.service.impl; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.goafanti.admin.service.DepartmentService; import com.goafanti.common.dao.*; import com.goafanti.common.model.InvoiceLog; import com.goafanti.order.bo.*; import com.goafanti.organization.bo.OrganizationListOut; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.enums.NoticeStatus; import com.goafanti.common.model.Admin; import com.goafanti.common.model.TOrderInvoice; import com.goafanti.common.model.TOrderNew; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.order.service.OrderInvoiceService; import com.goafanti.order.service.OrderNewService; @Service public class OrderInvoiceServiceImpl extends BaseMybatisDao implements OrderInvoiceService { @Autowired private TOrderInvoiceMapper tOrderInvoiceMapper; @Autowired private TOrderNewMapper tOrderNewMapper; @Autowired private DepartmentMapper departmentMapper; @Autowired private AdminMapper adminMapper; @Autowired private OrderNewService orderNewService; @Autowired private TOrderMidMapper tOrderMidMapper; @Autowired private InvoiceLogMapper invoiceLogMapper; @Autowired private DepartmentService departmentService; @Override public int createServiceOrder(TOrderInvoice o) { o.setCreateTime(new Date()); sendNoticeAndEmail(o); //前端直接会直接调取上一个发起数据给新开票,防止前一个数据为审核后 if (o.getApproval()==2)o.setApproval(1); if (o.getStatus()!=1)o.setStatus(1); pushOrderInvoiceExamine(o); Integer i=tOrderInvoiceMapper.insertSelective(o); addInvoiceLog(o.getId(),0); return i; } private void pushOrderInvoiceExamine(TOrderInvoice o) { //新增与修改 List admins =new ArrayList<>(); StringBuffer str=new StringBuffer(); TOrderNewBo t = tOrderNewMapper.getSaleIdByOno(o.getOrderNo()); if (o.getType()==0){ if (o.getApproval()==0){ addExamineFinance(o, t); }else if(o.getApproval()==1&&o.getStatus()==1){ admins = adminMapper.getAdminRoleTypeList(AFTConstants.HN_APPROVED); }else if (o.getApproval()==2){ addExamineFinance(o, t); }else if (o.getApproval()==1&&o.getStatus()==3){ o.setExamineName(""); } }else if (o.getType()==1){ if(o.getApproval()==0) { admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN); }else if(o.getApproval()==1&&o.getStatus()==1) { admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.COMPANY_MANAGER); }else if (o.getApproval()==2){ admins = adminMapper.listAdminBydepIdAndRoleType(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN); }else if (o.getApproval()==1&&o.getStatus()==3){ o.setExamineName(""); } } if (!admins.isEmpty()){ for (Admin a : admins) { if (!str.toString().contains(a.getName()))str=str.append(a.getName()).append(","); } if (str.length()>0)o.setExamineName(str.substring(0,str.length()-1)); } } private void addExamineFinance(TOrderInvoice o, TOrderNewBo t) { OrganizationListOut dep = departmentMapper.selectAllById(t.getOrderDep()); o.setExamineName(dep.getFinanceName()); } /** * * @param id 开票编号 * @param status 0发起 1开票通过 2开票拒绝 3特批通过 4特批拒绝 5修改提交 */ void addInvoiceLog(Integer id, Integer status){ InvoiceLog log = new InvoiceLog(id,status,TokenManager.getAdminId()); invoiceLogMapper.insertSelective(log); } @Override public int updateServiceOrder(TOrderInvoice o) { sendNoticeAndEmail(o); addInvoiceLog(o.getId(),5); o.setStatus(1); if (o.getApproval()==2)o.setApproval(1); int i=tOrderInvoiceMapper.updateByPrimaryKeySelective(o); pushOrderInvoiceExamine(o); return i; } /** * 开票提交发送站内消息及邮件 * @param o */ private void sendNoticeAndEmail(TOrderInvoice o) { List aids = new ArrayList<>(); if (o.getStatus()==1) {//发起 TOrderNew t=tOrderNewMapper.selectByPrimaryKey(o.getOrderNo()); if (o.getType()==0) {//省内 if(o.getApproval()==0) { aids.add(departmentMapper.selectByPrimaryKey(t.getOrderDep()).getFinanceId()); }else { for (Admin admin : adminMapper.getAdminRoleNameList("湖南特批开票")) { aids.add(admin.getId()); } } }else if (o.getType()==1) {//省外 if(o.getApproval()==0) { aids.addAll(adminMapper.listNameByDepAndName(t.getOrderDep(), AFTConstants.SALESMAN_ADMIN)); }else { aids.addAll(adminMapper.listNameByDepAndName(t.getOrderDep(), AFTConstants.COMPANY_MANAGER)); } } } TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo()); orderNewService.pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_INVPICE_START.getCode(),order, TokenManager.getAdminId(),0); } @SuppressWarnings("deprecation") @Override public boolean checkAmount(TOrderInvoice t) { TOrderNew tn=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo()); String i=tOrderInvoiceMapper.checkApplyAmount(t.getOrderNo(),t.getId());//新建时直接查所有数据,修改时除掉修改订单 //处理精度问题 BigDecimal q=t.getAmount().add(new BigDecimal(i)).setScale(4, BigDecimal.ROUND_DOWN);; BigDecimal w=tn.getTotalAmount(); int flag=q.compareTo(w); if (flag>0) { return true; } return false; } @SuppressWarnings("unchecked") @Override public Pagination financeOrderInvoiceList(InputOrderInvoiceBo o,Integer pageNo, Integer pageSize) { Map params = new HashMap(); if(pageSize==null||pageSize<0)pageSize=10; if(pageNo==null||pageNo<0)pageNo=1; List aDep=new ArrayList<>(); //财务专员查看自己的 if (TokenManager.hasRole(AFTConstants.FINANCE)) { aDep.addAll(adminMapper.getFinanceDep(TokenManager.getAdminId())); } //财务经理 if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) { aDep.addAll(adminMapper.selectDepIdWithSpuerId(TokenManager.getAdminId())); } //营销管理员 if (TokenManager.hasRole(AFTConstants.SALESMAN_ADMIN)) { aDep.addAll(departmentService.selectMyDeps()); } if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)) { if (o.getDeps()!=null){ aDep.addAll(departmentService.parseArray(o.getDeps())); } } if(o.getDeps()==null){ if (!aDep.isEmpty()){ params.put("deps", aDep); } }else { aDep=departmentService.comparePermissions(aDep,o.getDeps()); if (aDep.isEmpty()){ return new Pagination<>(1,10,0); } params.put("deps", aDep); } if(o.getType()!=null)params.put("type", o.getType()); if (null !=o.getAll()){ params.put("all",o.getAll()); }else { params.put("all",0); } if(StringUtils.isNotBlank(o.getOrderNo()))params.put("orderNo", o.getOrderNo()); if(StringUtils.isNotBlank(o.getName()))params.put("name", o.getName()); if(null!=o.getApproval())params.put("approval", o.getApproval()); if(null!=o.getStatus())params.put("status", o.getStatus()); return (Pagination)findPage("financeOrderInvoiceList", "financeOrderInvoiceCount", params, pageNo, pageSize); } @Override public TOrderInvoiceDetails selectByIdOrderInvoice(Integer id) { return tOrderInvoiceMapper.selectByInvoiceDitails(id); } @Override public TOrderInvoiceDetails getInvoiceDetails(String orderNo) { return tOrderInvoiceMapper.getInvoiceDetails(orderNo); } @SuppressWarnings("unchecked") @Override public Pagination salesmanOrderInvoiceList( String orderNo, Integer pageNo, Integer pageSize) { Map params = new HashMap(); if(pageSize==null||pageSize<0)pageSize=10; if(pageNo==null||pageNo<0)pageNo=1; if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo); return (Pagination)findPage("salesmanOrderInvoiceList", "salesmanOrderInvoiceCount", params, pageNo, pageSize); } @Override public int updatefinanceExamine(Integer id, Integer examine, String reason) { TOrderInvoice t=new TOrderInvoice(); t.setId(id); t.setRejectReason(reason); t.setStatus(examine); t.setExamineName(""); //examine 2通过 3拒绝 List aids = new ArrayList<>(); TOrderInvoice t2=tOrderInvoiceMapper.selectByPrimaryKey(id); TOrderNew o=tOrderNewMapper.selectByPrimaryKey(t2.getOrderNo()); Integer type=null; if(examine==3){ type=NoticeStatus.ORDER_INVPICE_NO.getCode(); aids.add(o.getSalesmanId()); addInvoiceLog(id,2); }else if(examine==2) { type=NoticeStatus.ORDER_INVPICE_END.getCode(); aids.add(o.getSalesmanId()); //重新计算开票金额 addInvoiceLog(id,1); } TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo()); orderNewService.pushGeneralSendNoticeAndEmail(aids, type,order, TokenManager.getAdminId(),0); tOrderInvoiceMapper.updateByPrimaryKeySelective(t); if(examine==2)tOrderMidMapper.updateInvoice(t2.getOrderNo()); return 1; } @SuppressWarnings("unchecked") @Override public Pagination approvalOrderInvoiceList(Integer status,Integer approval,Integer type, String orderDep, String orderNo, String name,String userName, Integer pageNo, Integer pageSize) { Map params = new HashMap(); if(pageSize==null||pageSize<0)pageSize=10; if(pageNo==null||pageNo<0)pageNo=1; if(StringUtils.isNotBlank(orderDep))params.put("orderDep", orderDep); if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo); if(StringUtils.isNotBlank(name))params.put("name", name); if(StringUtils.isNotBlank(userName))params.put("userName", userName); if(approval!=null)params.put("approval", approval); if(status!=null)params.put("status", status); //0省内 1省外 2查看所有省外 if(type==0||type==1)params.put("type", type); if (type==2) { params.put("type", 1); params.put("special", 1); } if (type ==1&&!TokenManager.hasRole(AFTConstants.SUPERADMIN)) { //如果是省外则直接查本部门 Admin a=adminMapper.selectByPrimaryKey(TokenManager.getAdminId()); params.put("aDep", a.getDepartmentId()); } return (Pagination)findPage("approvalOrderInvoiceList", "approvalOrderInvoiceCount", params, pageNo, pageSize); } @Override public int updateapprovalExamine(Integer id, Integer examine, String reason) { TOrderInvoice t=new TOrderInvoice(); t.setId(id); t.setRejectReason(reason); List aids=new ArrayList<>(); TOrderInvoice o=tOrderInvoiceMapper.selectByPrimaryKey(id); t.setApproval(o.getApproval()); t.setType(o.getType()); t.setStatus(o.getStatus()); t.setOrderNo(o.getOrderNo()); TOrderNew ts=tOrderNewMapper.selectByPrimaryKey(o.getOrderNo()); //examine 2通过 3拒绝 Integer type =null; if(examine==3) { t.setStatus(examine); type= NoticeStatus.ORDER_INVPICE_APPROVA_NO.getCode(); aids.add(ts.getSalesmanId()); addInvoiceLog(id,4); }else { t.setApproval(examine); addInvoiceLog(id,3); type= NoticeStatus.ORDER_INVPICE_APPROVA_YES.getCode(); if (o.getType()==0) { aids.add(departmentMapper.selectByPrimaryKey(ts.getOrderDep()).getFinanceId()); }else if(o.getType()==1) { aids.addAll(adminMapper.listNameByDepAndName(ts.getOrderDep(), AFTConstants.SALESMAN_ADMIN)); } } pushOrderInvoiceExamine(t); TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(o.getOrderNo()); orderNewService.pushGeneralSendNoticeAndEmail(aids,type,order, TokenManager.getAdminId(),0); return tOrderInvoiceMapper.updateByPrimaryKeySelective(t); } @Override public List InvoiceLog(Integer id) { List list=tOrderInvoiceMapper.selectInvoiceLog(id); return list; } }