Browse Source

补充获取发票接口

lyhzzz 2 years ago
parent
commit
19a2e4c1ce

+ 2 - 1
src/main/java/com/fdkankan/ucenter/config/WebAppConfig.java

@@ -30,7 +30,8 @@ public class WebAppConfig implements WebMvcConfigurer {
 						"/**/fusion/**",
 						"/goods/version/enabled",
 						"/**/scene/**",
-						"/intercomMessage/**"
+						"/intercomMessage/**",
+						"/user/virtualOrder/**"
 				);
 
 		registry.addInterceptor(appInterceptor).addPathPatterns("/app/**")

+ 1 - 0
src/main/java/com/fdkankan/ucenter/controller/TestController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.controller;
 
+import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.common.Result;

+ 75 - 1
src/main/java/com/fdkankan/ucenter/controller/app/InvoiceController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.controller.app;
 
+import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.service.IInvoiceService;
 import com.fdkankan.ucenter.vo.request.InvoiceParam;
@@ -8,11 +9,84 @@ import org.springframework.web.bind.annotation.*;
 
 @RestController
 @RequestMapping("/user/invoice")
-public class InvoiceController {
+public class InvoiceController extends BaseController {
 
     @Autowired
     IInvoiceService invoiceService;
 
+
+    /**
+     * 获得可开发票的最高额度
+     * @param param
+     * @return
+     */
+    @RequestMapping(value = "/max", method = RequestMethod.POST)
+    public Result getMaxInvoice(@RequestBody InvoiceParam param){
+        return Result.success(invoiceService.getMaxInvoice(param));
+    }
+
+    /**
+     * 获取用户发票记录
+     */
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Result getInvoices(@RequestBody InvoiceParam param) throws Exception {
+        return Result.success(invoiceService.getInvoices(getToken(), param));
+
+    }
+
+    /**
+     * 获取用户发票记录
+     */
+    @RequestMapping(value = "/mine", method = RequestMethod.POST)
+    public Result mine(@RequestBody InvoiceParam param) throws Exception {
+        return Result.success(invoiceService.getMyInvoiceInfo(getToken(), param));
+    }
+
+    /**
+     * 保存用户发票信息
+     */
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public Result save(@RequestBody InvoiceParam param) throws Exception {
+        invoiceService.saveInvoice(getToken(), param);
+        return Result.success();
+    }
+
+    /**
+     * 获取发票详情
+     */
+    @RequestMapping(value = "/detail", method = RequestMethod.POST)
+    public Result getInvoiceDetail(@RequestBody InvoiceParam param) throws Exception {
+        return Result.success(invoiceService.getById(param.getInvoiceId()));
+    }
+
+    /**
+     * 申请开票
+     * @param param
+     * @return
+     */
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public Result addInvoice(@RequestBody InvoiceParam param) throws Exception {
+        invoiceService.addInvoice(getToken(), param);
+        return Result.success();
+    }
+
+    /**
+     * 修改开票信息
+     * @param param
+     * @return
+     */
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public Result updateInvoice(@RequestBody InvoiceParam param) throws Exception {
+        invoiceService.updateInvoice(getToken(), param);
+        return Result.success();
+    }
+
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    public Result deleteInvoice(@RequestBody InvoiceParam param) throws Exception {
+        invoiceService.removeById(param.getInvoiceId());
+        return Result.success();
+    }
+
     /**
      * 申请开票
      * @param param

+ 4 - 0
src/main/java/com/fdkankan/ucenter/service/IExpansionOrderService.java

@@ -5,6 +5,8 @@ import com.fdkankan.ucenter.entity.ExpansionOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.ucenter.vo.request.VirtualOrderParam;
 
+import java.util.List;
+
 /**
  * <p>
  * 扩容订单表(八目相机) 服务类
@@ -22,4 +24,6 @@ public interface IExpansionOrderService extends IService<ExpansionOrder> {
     ExpansionOrder getByOrderSn(String orderSn);
 
     boolean paySuccessExpansionOrder(String orderSn, String tradeNo, int paymentTypeName, int status);
+
+    List<ExpansionOrder> getByCameraId(Long cameraId);
 }

+ 14 - 0
src/main/java/com/fdkankan/ucenter/service/IInvoiceService.java

@@ -1,5 +1,7 @@
 package com.fdkankan.ucenter.service;
 
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.entity.Invoice;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -31,4 +33,16 @@ public interface IInvoiceService extends IService<Invoice> {
     void checkInvoice(Long orderId, Integer consumeType);
 
     BigDecimal getMoney(Long orderId, Integer consumeType);
+
+    JSONObject getMaxInvoice(InvoiceParam param);
+
+    PageInfo getInvoices(String token, InvoiceParam param);
+
+    Invoice getMyInvoiceInfo(String token, InvoiceParam param);
+
+    void saveInvoice(String token, InvoiceParam param);
+
+    void addInvoice(String token, InvoiceParam param);
+
+    void updateInvoice(String token, InvoiceParam param);
 }

+ 3 - 0
src/main/java/com/fdkankan/ucenter/service/IOrderService.java

@@ -9,6 +9,7 @@ import com.fdkankan.ucenter.vo.request.DownNumParam;
 import com.fdkankan.ucenter.vo.request.OrderParam;
 import com.fdkankan.ucenter.vo.request.PlaceOrderParam;
 import com.fdkankan.ucenter.vo.response.GoodsSkuVo;
+import com.fdkankan.ucenter.vo.response.OrderVo;
 
 /**
  * <p>
@@ -39,4 +40,6 @@ public interface IOrderService extends IService<Order> {
     IncrementOrder incrementOrder(DownNumParam param);
 
     boolean paySuccessEntityOrder(String orderSn, String tradeNo, int paymentTypeName);
+
+    OrderVo getOrderDetail(Long orderId);
 }

+ 4 - 0
src/main/java/com/fdkankan/ucenter/service/IVirtualOrderService.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.ucenter.vo.request.IncrementOrderParam;
 import com.fdkankan.ucenter.vo.request.VirtualOrderParam;
 
+import java.util.List;
+
 /**
  * <p>
  * 充值订单表(双目相机点数充值、消费) 服务类
@@ -21,4 +23,6 @@ public interface IVirtualOrderService extends IService<VirtualOrder> {
     VirtualOrder getByOrderSn(String orderSn);
 
     boolean paySuccessVirtualOrder(String orderSn, String tradeNo, int paymentTypeName);
+
+    List<VirtualOrder> getByCameraId(Long cameraId);
 }

+ 8 - 0
src/main/java/com/fdkankan/ucenter/service/impl/ExpansionOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -69,4 +70,11 @@ public class ExpansionOrderServiceImpl extends ServiceImpl<IExpansionOrderMapper
                 .eq(ExpansionOrder::getOrderSn,orderSn);
         return this.update(updateWrapper);
     }
+
+    @Override
+    public List<ExpansionOrder> getByCameraId(Long cameraId) {
+        LambdaQueryWrapper<ExpansionOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ExpansionOrder::getCameraId,cameraId);
+        return this.list(wrapper);
+    }
 }

+ 187 - 0
src/main/java/com/fdkankan/ucenter/service/impl/InvoiceServiceImpl.java

@@ -1,15 +1,24 @@
 package com.fdkankan.ucenter.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.common.constant.AppConstant;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.ServerCode;
+import com.fdkankan.common.constant.TbStatus;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.mapper.IInvoiceMapper;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.ucenter.vo.request.InvoiceParam;
 import com.fdkankan.ucenter.vo.request.PlaceOrderParam;
+import com.fdkankan.ucenter.vo.response.OrderVo;
 import com.sun.xml.bind.v2.model.core.ID;
+import org.apache.commons.lang3.StringUtils;
 import org.aspectj.weaver.ast.Or;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,6 +46,8 @@ public class InvoiceServiceImpl extends ServiceImpl<IInvoiceMapper, Invoice> imp
     IIncrementOrderService incrementOrderService;
     @Autowired
     IVirtualOrderService virtualOrderService;
+    @Autowired
+    IExpansionOrderService expansionOrderService;
 
     @Override
     public Invoice getByOrderId(Long orderId) {
@@ -170,4 +181,180 @@ public class InvoiceServiceImpl extends ServiceImpl<IInvoiceMapper, Invoice> imp
 
         return dbEntity;
     }
+
+    @Override
+    public JSONObject getMaxInvoice(InvoiceParam param) {
+        JSONObject object = new JSONObject();
+        int maxInvoice = this.getMaxInvoice(param.getCameraId());
+        object.put("maxInvoice", maxInvoice < 0 ? 0 : maxInvoice);
+        return object;
+    }
+
+
+
+    private Integer getMaxInvoice(Long cameraId){
+        List<VirtualOrder> virtualOrderList = virtualOrderService.getByCameraId(cameraId);
+        int maxInvoice = 0;
+        for (VirtualOrder virtualOrderEntity : virtualOrderList){
+            if (virtualOrderEntity.getStatus() == 1 && virtualOrderEntity.getPayStatus() == 1){
+                maxInvoice += virtualOrderEntity.getPoints();
+            }else if (virtualOrderEntity.getStatus() == -2){
+                maxInvoice -= virtualOrderEntity.getPoints();
+            }
+        }
+        List<ExpansionOrder> expansionOrderList =   expansionOrderService.getByCameraId(cameraId);
+        for(ExpansionOrder expansionOrderEntity : expansionOrderList){
+            if(expansionOrderEntity.getPayStatus() == 1){
+                maxInvoice += expansionOrderEntity.getAmount().intValue();
+            }else if (expansionOrderEntity.getPayStatus() == -2){
+                maxInvoice -= expansionOrderEntity.getAmount().intValue();
+            }
+        }
+        LambdaQueryWrapper<Invoice> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Invoice::getCameraId,cameraId);
+        wrapper.eq(Invoice::getConsumeType,1);
+        List<Invoice> list = this.list(wrapper);
+        for (Invoice entity : list){
+            if (entity.getMoney() != null){
+                maxInvoice -= entity.getMoney().intValue();
+            }
+        }
+        return maxInvoice;
+    }
+
+
+    @Override
+    public PageInfo getInvoices(String token, InvoiceParam param) {
+        LambdaQueryWrapper<Invoice> wrapper = new LambdaQueryWrapper<>();
+        if(StringUtils.isNotBlank(token)){
+            User user = userService.getByToken(token);
+            wrapper.eq(Invoice::getUserId,user.getId());
+        }
+        if(param.getCameraId() != null){
+            wrapper.eq(Invoice::getCameraId,param.getCameraId());
+        }
+        if(param.getType() != null){
+            if(param.getType() != 0){
+                wrapper.ne(Invoice::getType,0);
+            }else {
+                wrapper.eq(Invoice::getType,1);
+            }
+        }
+        wrapper.ne(Invoice::getConsumeType ,-1);
+        wrapper.orderByDesc(Invoice::getCreateTime);
+        Page<Invoice> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
+        return PageInfo.PageInfo(page);
+    }
+
+    @Override
+    public Invoice getMyInvoiceInfo(String token, InvoiceParam param) {
+        User user = userService.getByToken(token);
+        return getMineInvoice(user.getId(),param.getInvoiceType());
+    }
+
+    private Invoice getMineInvoice(Long userId,String invoiceType){
+        LambdaQueryWrapper<Invoice> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Invoice::getUserId,userId);
+        wrapper.eq(Invoice::getConsumeType ,-1);
+        wrapper.eq(Invoice::getType ,invoiceType);
+        wrapper.last("LIMIT 1");
+        List<Invoice> list = this.list(wrapper);
+        if(list == null || list.size()<=0){
+            return null;
+        }
+        return list.get(0);
+    }
+
+    @Override
+    public void saveInvoice(String token, InvoiceParam param) {
+        User user = userService.getByToken(token);
+        Invoice dbEntity = getMineInvoice(user.getId(),param.getInvoiceType());
+        if (dbEntity == null){
+            dbEntity = new Invoice();
+        }
+        if (param.getCameraId() != null){
+            dbEntity.setCameraId(param.getCameraId());
+        }
+        dbEntity.setType(Integer.valueOf(param.getInvoiceType()));
+        dbEntity.setUserId(user.getId());
+        dbEntity.setBankAccount(param.getBankAccount());
+        dbEntity.setBankName(param.getBankName());
+        dbEntity.setRegisterPhone(param.getRegisterPhone());
+        dbEntity.setOrganizedAddress(param.getOrganizedAddress());
+        dbEntity.setCode(param.getCode());
+        dbEntity.setTitle(param.getTitle());
+        dbEntity.setEmailAddress(param.getEmailAddress());
+        dbEntity.setConsumeType(-1);
+        if(!this.saveOrUpdate(dbEntity)){
+            throw new BusinessException(ErrorCode.ERROR_MSG);
+        }
+    }
+
+    @Override
+    public void addInvoice(String token, InvoiceParam param) {
+        User user = userService.getByToken(token);
+        if(param.getAmount() == null){
+            throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        int maxInvoice = this.getMaxInvoice(param.getCameraId());
+
+        if(Integer.parseInt(param.getAmount()) > maxInvoice){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_8003);
+        }
+        saveOrUpdateInvoice(user.getId(),param,null);
+    }
+
+    @Override
+    public void updateInvoice(String token, InvoiceParam param) {
+        User user = userService.getByToken(token);
+        if(param.getInvoiceId() != null){
+            Invoice invoiceEntity = this.getById(param.getInvoiceId());
+            if(invoiceEntity == null){
+                throw new BusinessException(ErrorCode.NOT_RECORD);
+            }
+             this.saveOrUpdateInvoice(user.getId(), param,invoiceEntity);
+
+        }else {
+
+            OrderVo order = orderService.getOrderDetail(param.getOrderId());
+            if(order == null || order.getTotalAmount() == null){
+                throw new BusinessException(ErrorCode.ERROR_MSG);
+            }
+            param.setAmount(order.getTotalAmount().toString());
+            this.saveOrUpdateInvoice(user.getId(),param,null);
+        }
+
+    }
+
+    private void saveOrUpdateInvoice(Long userId, InvoiceParam param, Invoice invoiceEntity){
+        if(invoiceEntity == null){
+            invoiceEntity = new Invoice();
+            invoiceEntity.setUserId(userId);
+            invoiceEntity.setOrderId(param.getOrderId());
+        }
+        invoiceEntity.setType(Integer.valueOf(param.getInvoiceType()));
+        invoiceEntity.setTitle(param.getTitle());
+        invoiceEntity.setCode(param.getCode());
+
+        if (3 == invoiceEntity.getType()){
+            invoiceEntity.setOrganizedAddress(param.getOrganizedAddress());
+            invoiceEntity.setRegisterPhone(param.getRegisterPhone());
+            invoiceEntity.setBankName(param.getBankName());
+            invoiceEntity.setBankAccount(param.getBankAccount());
+        }
+
+        invoiceEntity.setCameraId(param.getCameraId());
+        invoiceEntity.setMoney(new BigDecimal(param.getAmount()));
+        invoiceEntity.setConsumeType(param.getConsumeType() == null? 1 : param.getConsumeType());
+
+        invoiceEntity.setShipName(param.getShipName());
+        invoiceEntity.setShipMobile(param.getShipMobile());
+        invoiceEntity.setShipAddress(param.getShipAddress());
+        invoiceEntity.setShipAreaPath(param.getShipAreaPath());
+        invoiceEntity.setCameraId(param.getCameraId());
+        invoiceEntity.setEmailAddress(param.getEmailAddress());
+        if(!this.saveOrUpdate(invoiceEntity)){
+            throw new BusinessException(ErrorCode.ERROR_MSG);
+        }
+    }
 }

+ 19 - 2
src/main/java/com/fdkankan/ucenter/service/impl/OrderServiceImpl.java

@@ -70,8 +70,6 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
     IDownloadOrderService downloadOrderService;
     @Autowired
     IIncrementTypeService incrementTypeService;
-    @Value("${environment}")
-    private String environment;
 
     @Override
     public PageInfo pageList(OrderParam param) {
@@ -328,4 +326,23 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
                 .eq(Order::getOrderSn,orderSn);
         return this.update(updateWrapper);
     }
+
+    @Override
+    public OrderVo getOrderDetail(Long orderId) {
+        Order order = this.getById(orderId);
+        OrderVo responseOrder = new OrderVo();
+        if(order == null ){
+            return responseOrder;
+        }
+        BeanUtils.copyProperties(order,responseOrder);
+
+        List<OrderItem> responseOrderItems =orderItemService.getByOrderId(orderId);
+        responseOrder.setOrderItems(responseOrderItems);
+
+        Invoice invoice = invoiceService.getByOrderId(orderId);
+        if(invoice != null){
+            responseOrder.setInvoice(invoice);
+        }
+        return responseOrder;
+    }
 }

+ 8 - 0
src/main/java/com/fdkankan/ucenter/service/impl/VirtualOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -63,4 +64,11 @@ public class VirtualOrderServiceImpl extends ServiceImpl<IVirtualOrderMapper, Vi
                 .eq(VirtualOrder::getOrderSn,orderSn);
         return this.update(updateWrapper);
     }
+
+    @Override
+    public List<VirtualOrder> getByCameraId(Long cameraId) {
+        LambdaQueryWrapper<VirtualOrder> vWr = new LambdaQueryWrapper<>();
+        vWr.eq(VirtualOrder::getCameraId,cameraId);
+        return this.list(vWr);
+    }
 }