| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- 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<TOrderInvoiceMapper> 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<Admin> 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<String> 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<TOrderInvoiceBo> financeOrderInvoiceList(InputOrderInvoiceBo o,Integer pageNo,
- Integer pageSize) {
- Map<String, Object> params = new HashMap<String, Object>();
- if(pageSize==null||pageSize<0)pageSize=10;
- if(pageNo==null||pageNo<0)pageNo=1;
- List<String> aDep=new ArrayList<>();
- //财务专员查看自己的
- if (TokenManager.hasRole(AFTConstants.FINANCE)) {
- aDep.addAll(departmentService.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<TOrderInvoiceBo>)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<TOrderInvoiceBo> salesmanOrderInvoiceList( String orderNo,
- Integer pageNo, Integer pageSize) {
- Map<String, Object> params = new HashMap<String, Object>();
- if(pageSize==null||pageSize<0)pageSize=10;
- if(pageNo==null||pageNo<0)pageNo=1;
- if(StringUtils.isNotBlank(orderNo))params.put("orderNo", orderNo);
- return (Pagination<TOrderInvoiceBo>)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<String> 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<TOrderInvoiceBo> approvalOrderInvoiceList(Integer status,Integer approval,Integer type, String orderDep, String orderNo, String name,String userName,
- Integer pageNo, Integer pageSize) {
- Map<String, Object> params = new HashMap<String, Object>();
- 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<TOrderInvoiceBo>)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<String> aids=new ArrayList<>();
- TOrderInvoice o=tOrderInvoiceMapper.selectByPrimaryKey(id);
- 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<OutInvoiceLog> InvoiceLog(Integer id) {
- List<OutInvoiceLog> list=tOrderInvoiceMapper.selectInvoiceLog(id);
- return list;
- }
- }
|