Parcourir la source

卖家中心--发票管理--发票保存、分页查看

wangyc il y a 8 ans
Parent
commit
ddf54ee7e4

+ 14 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/dao/BillSubmitDao.java

@@ -0,0 +1,14 @@
+package com.uas.platform.b2c.fa.settlement.dao;
+
+import com.uas.platform.b2c.fa.settlement.model.BillSubmit;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author wangyc
+ * @version 2017/8/30 20:33 wangyc
+ */
+@Repository
+public interface BillSubmitDao extends JpaSpecificationExecutor<BillSubmit>, JpaRepository<BillSubmit, Long> {
+}

+ 276 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/model/BillSubmit.java

@@ -0,0 +1,276 @@
+package com.uas.platform.b2c.fa.settlement.model;
+
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.UserInfo;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by wangyc on 2017/8/24.
+ *
+ * @version 2017/8/24 14:53 wangyc
+ */
+@Entity
+@Table(name = "trade$bill_submit")
+public class BillSubmit implements Serializable{
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trade$bill_submit_gen")
+    @SequenceGenerator(name = "trade$bill_submit_gen", sequenceName = "trade$bill_submit_seq", allocationSize = 1)
+    @Column(name = "bs_id")
+    private Long id;
+
+    /**
+     * 申请时间
+     */
+    @Column(name = "bs_createtime")
+    private Date createTime;
+
+    /**
+     * 处理时间
+     */
+    @Column(name = "bs_handleTime")
+    private Date handleTime;
+
+    /**
+     * 申请人uu
+     */
+    @Column(name = "bs_submituu")
+    private Long submituu;
+
+    /**
+     * 申请人
+     */
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "bs_submituu", insertable = false, updatable = false)
+    private UserInfo submiter;
+
+    /**
+     * 申请人企业uu
+     */
+    @Column(name = "bs_submitenuu")
+    private Long submitEnuu;
+
+    /**
+     * 申请人企业
+     */
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "bs_submitenuu", insertable = false, updatable = false)
+    private Enterprise submitEnterprise;
+
+    /**
+     * 卖方企业uu
+     */
+    @Column(name = "bs_sellerenuu")
+    private Long sellerenuu;
+
+    /**
+     * 卖方企业名称
+     */
+    @Column(name = "bs_sellername")
+    private String sellername;
+
+    /**
+     * 订单号,以“,”拼接
+     */
+    @Lob
+    @Column(name = "bs_orderids")
+    @Basic(fetch = FetchType.LAZY)
+    private String orderids;
+
+    /**
+     * 开票金额
+     */
+    @Column(name = "bs_price")
+    private Double price;
+
+    /**
+     * 开票类型
+     */
+    @Column(name = "bs_invoicetype")
+    private Integer invoicetype;
+
+    /**
+     * 发票主键
+     */
+    @Column(name = "bs_invoiceid")
+    private Long invoiceid;
+
+    /**
+     * 发票抬头
+     */
+    @Column(name = "bs_invoicetitle")
+    private String invoicetitle;
+
+    /**
+     * 发票的地址
+     */
+    @Column(name = "bs_invoice_address", length = 2000)
+    private String invoiceAddress;
+
+    /**
+     * 收票人
+     */
+    @Column(name = "bs_receivername")
+    private String receiverName;
+
+    /**
+     * 收票人联系电话
+     */
+    @Column(name = "bs_rectel")
+    private String recTel;
+
+    /**
+     * 申请状态
+     */
+    @Column(name = "bs_status")
+    private Integer status;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getHandleTime() {
+        return handleTime;
+    }
+
+    public void setHandleTime(Date handleTime) {
+        this.handleTime = handleTime;
+    }
+
+    public Long getSubmituu() {
+        return submituu;
+    }
+
+    public void setSubmituu(Long submituu) {
+        this.submituu = submituu;
+    }
+
+    public UserInfo getSubmiter() {
+        return submiter;
+    }
+
+    public void setSubmiter(UserInfo submiter) {
+        this.submiter = submiter;
+    }
+
+    public Long getSubmitEnuu() {
+        return submitEnuu;
+    }
+
+    public void setSubmitEnuu(Long submitEnuu) {
+        this.submitEnuu = submitEnuu;
+    }
+
+    public Enterprise getSubmitEnterprise() {
+        return submitEnterprise;
+    }
+
+    public void setSubmitEnterprise(Enterprise submitEnterprise) {
+        this.submitEnterprise = submitEnterprise;
+    }
+
+    public Long getSellerenuu() {
+        return sellerenuu;
+    }
+
+    public void setSellerenuu(Long sellerenuu) {
+        this.sellerenuu = sellerenuu;
+    }
+
+    public String getSellername() {
+        return sellername;
+    }
+
+    public void setSellername(String sellername) {
+        this.sellername = sellername;
+    }
+
+    public String getOrderids() {
+        return orderids;
+    }
+
+    public void setOrderids(String orderids) {
+        this.orderids = orderids;
+    }
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+
+    public Integer getInvoicetype() {
+        return invoicetype;
+    }
+
+    public void setInvoicetype(Integer invoicetype) {
+        this.invoicetype = invoicetype;
+    }
+
+    public Long getInvoiceid() {
+        return invoiceid;
+    }
+
+    public void setInvoiceid(Long invoiceid) {
+        this.invoiceid = invoiceid;
+    }
+
+    public String getInvoicetitle() {
+        return invoicetitle;
+    }
+
+    public void setInvoicetitle(String invoicetitle) {
+        this.invoicetitle = invoicetitle;
+    }
+
+    public String getInvoiceAddress() {
+        return invoiceAddress;
+    }
+
+    public void setInvoiceAddress(String invoiceAddress) {
+        this.invoiceAddress = invoiceAddress;
+    }
+
+    public String getReceiverName() {
+        return receiverName;
+    }
+
+    public void setReceiverName(String receiverName) {
+        this.receiverName = receiverName;
+    }
+
+    public String getRecTel() {
+        return recTel;
+    }
+
+    public void setRecTel(String recTel) {
+        this.recTel = recTel;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+}

+ 31 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/service/BillSubmitService.java

@@ -0,0 +1,31 @@
+package com.uas.platform.b2c.fa.settlement.service;
+
+import com.uas.platform.b2c.fa.settlement.model.BillSubmit;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+/**
+ * 开票申请
+ * @author wangyc
+ * @version 2017/8/24 16:42 wangyc
+ */
+public interface BillSubmitService {
+
+    /**
+     * 新增开票申请
+     * @param orderids 订单号集
+     * @param invoiceid 发票id
+     * @return
+     */
+    List<BillSubmit> save(String[] orderids, Long invoiceid);
+
+    /**
+     * @param pageInfo 分页参数
+     * @param keyword 关键词
+     * @param role 角色
+     * @return
+     */
+    Page<BillSubmit> getAll(PageInfo pageInfo, String keyword, String role);
+}

+ 193 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/BillSubmitServiceImpl.java

@@ -0,0 +1,193 @@
+package com.uas.platform.b2c.fa.settlement.service.impl;
+
+import com.uas.platform.b2c.core.constant.SplitChar;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.fa.settlement.dao.BillDao;
+import com.uas.platform.b2c.fa.settlement.dao.BillSubmitDao;
+import com.uas.platform.b2c.fa.settlement.model.Bill;
+import com.uas.platform.b2c.fa.settlement.model.BillSubmit;
+import com.uas.platform.b2c.fa.settlement.service.BillSubmitService;
+import com.uas.platform.b2c.trade.order.dao.OrderDao;
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.model.Type;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
+
+/**
+ * 开票申请
+ * @author wangyc
+ * @version 2017/8/24 17:10 wangyc
+ */
+@Service
+public class BillSubmitServiceImpl implements BillSubmitService {
+
+    private final OrderDao orderDao;
+
+    private final BillDao billDao;
+
+    private final BillSubmitDao billSubmitDao;
+
+    @Autowired
+    public BillSubmitServiceImpl (OrderDao orderDao, BillDao billDao, BillSubmitDao billSubmitDao) {
+        this.orderDao = orderDao;
+        this.billDao = billDao;
+        this.billSubmitDao = billSubmitDao;
+    }
+
+    @Override
+    public List<BillSubmit> save(String[] orderids, Long billid) {
+        // 获取验证发票信息
+        Bill bill = billDao.findOne(billid);
+        if (bill == null)
+            throw new IllegalOperatorException("发票信息不存在");
+
+        Long buyeruu = SystemSession.getUser().getUserUU();
+        Long buyerEnuu = null;
+        if (SystemSession.getUser().getEnterprise() != null)
+            buyerEnuu = SystemSession.getUser().getEnterprise().getUu();
+
+        if ((!bill.getUseruu().equals(buyeruu)) || (buyerEnuu != null && !bill.getEnuu().equals(buyerEnuu)))
+            throw new IllegalOperatorException("发票信息不属于您,请重新确认发票信息");
+
+        // 获取验证订单信息
+        List<String> orderidList = Arrays.asList(orderids);
+        List<Order> orders = orderDao.findByOrderIds(orderidList);
+
+        if (CollectionUtils.isEmpty(orders))
+            throw new IllegalOperatorException("订单号错误,请重新确认订单信息");
+
+        // 验证订单号是否正确
+        if (orders.size() != orderidList.size()) {
+            List<String> orderIds = new ArrayList<String>();
+            for (Order order : orders) {
+                orderIds.add(order.getOrderid());
+            }
+            orderidList.removeAll(orderIds);
+
+            String errorIdStr = com.alibaba.dubbo.common.utils.StringUtils.join(orderids, SplitChar.COMMA);
+            throw new IllegalOperatorException("订单号: " + errorIdStr + " 不存在,请重新确认订单信息");
+        }
+
+        Map<Long, List<Order>> map = new HashMap<Long, List<Order>>();
+
+        // 将订单按卖家分组
+        for (Order order : orders) {
+            if (map.get(order.getSellerenuu()) == null) {
+                List<Order> afterGroup = new ArrayList<Order>();
+                afterGroup.add(order);
+                map.put(order.getSellerenuu(), afterGroup);
+            } else {
+                map.get(order.getSellerenuu()).add(order);
+            }
+
+        }
+        List<BillSubmit> billSubmits = new ArrayList<BillSubmit>();
+        for (Long sellerenuu : map.keySet()) {
+            BillSubmit billSubmit = createBillSubmit(bill, map.get(sellerenuu), buyerEnuu);
+            billSubmits.add(billSubmit);
+        }
+
+        return billSubmitDao.save(billSubmits);
+    }
+
+    // 初始化发票申请
+    public BillSubmit createBillSubmit(Bill bill, List<Order> orders, Long buyerEnuu) {
+        Long buyeruu = SystemSession.getUser().getUserUU();
+        // 发票基本信息
+        BillSubmit billSubmit = new BillSubmit();
+        billSubmit.setInvoicetitle(bill.getHead());
+        billSubmit.setInvoiceid(bill.getId());
+        billSubmit.setInvoiceAddress(bill.getArea() + bill.getDetailAddress());
+        billSubmit.setInvoicetype(bill.getKind());
+        billSubmit.setCreateTime(new Date());
+        billSubmit.setReceiverName(bill.getName());
+        billSubmit.setRecTel(bill.getTelephone());
+        billSubmit.setStatus(Status.INPUTTING.value());
+        billSubmit.setSubmituu(SystemSession.getUser().getUserUU());
+        if (SystemSession.getUser().getEnterprise() != null)
+            billSubmit.setSubmitEnuu(SystemSession.getUser().getEnterprise().getUu());
+
+        String orderIds = "";
+        Double price = 0d;
+        for (int i = 0; i < orders.size(); i++) {
+            if (buyerEnuu != null) {
+                Order order = orders.get(i);
+                if (buyerEnuu.equals(order.getBuyerenuu()) && buyeruu.equals(order.getBuyeruu())) {
+                    billSubmit.setSellername(order.getSellername());
+                    billSubmit.setSellerenuu(order.getSellerenuu());
+                    order.setInvoicetype(bill.getKind());
+                    order.setInvoiceAddress(bill.getArea() + bill.getDetailAddress());
+                    order.setInvoiceid(bill.getId());
+                    order.setInvoicetitle(bill.getHead());
+                    order.setVatBillStatus(Status.TOBEMAKE_BILL.value());
+                    price += order.getPrice();
+                    orderIds += order.getOrderid();
+                    if (i < orders.size() - 1)
+                        orderIds += SplitChar.COMMA;
+                } else {
+                    throw new IllegalOperatorException("订单号: " + order.getOrderid() + " ,不属于您的订单,请重新确认订单号");
+                }
+            } else {
+
+            }
+        }
+
+        billSubmit.setPrice(price);
+        billSubmit.setOrderids(orderIds);
+
+        return billSubmit;
+    }
+
+    @Override
+    public Page<BillSubmit> getAll(final PageInfo pageInfo, String keyword, String role) {
+        if (Type.BUYER.name().equals(role)) {
+            pageInfo.expression(PredicateUtils.eq("submituu", SystemSession.getUser().getUserUU(), false));
+            if (SystemSession.getUser().getEnterprise() != null)
+                pageInfo.expression(PredicateUtils.eq("submitEnuu", SystemSession.getUser().getEnterprise().getUu(), false));
+        }
+
+        if (Type.SELLER.name().equals(role)) {
+            if (SystemSession.getUser().getEnterprise() != null) {
+                pageInfo.expression(PredicateUtils.eq("sellerenuu", SystemSession.getUser().getEnterprise().getUu(), false));
+            } else {
+                throw new IllegalOperatorException("请选择企业账套后查看开票申请");
+            }
+        }
+
+        if (StringUtils.hasText(keyword)) {
+            SimpleExpression sellername = new SimpleExpression("sellername", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression orderids = new SimpleExpression("orderids", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression invoicetitle = new SimpleExpression("invoicetitle", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression receiverName = new SimpleExpression("receiverName", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression recTel = new SimpleExpression("recTel", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression[] simpleExpressions = new SimpleExpression[]{sellername, orderids, invoicetitle, receiverName, recTel};
+            LogicalExpression logicalExpression = PredicateUtils.or(simpleExpressions);
+            pageInfo.expression(logicalExpression);
+        }
+
+        return billSubmitDao.findAll(new Specification<BillSubmit>() {
+            @Override
+            public Predicate toPredicate(Root<BillSubmit> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(pageInfo.getPredicates(root, query, cb));
+                return null;
+            }
+        }, pageInfo);
+    }
+}