فهرست منبع

新增财务管理功能
1.修改外部转内部收入逻辑
2.修改账户查询返回值
3.新增账户逻辑修改
4.新增撤销发票撤销余额回滚功能
5.新增卡的条件查询和删除

y 2 سال پیش
والد
کامیت
afc792a9bc

+ 57 - 25
src/main/java/com/ydtech/modules/inv/controller/InvAccountController.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.inv.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.inv.model.InvAccount;
@@ -11,9 +12,10 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.sql.Wrapper;
+
 
 /**
- *
  * @author jianlong
  * @date 2024-01-05 09:31
  */
@@ -29,14 +31,14 @@ public class InvAccountController {
 
     @ApiOperation("获取账户列表")
     @PostMapping("getAccount")
-    public HttpResult<IPage<InvAccount>> getInsAccountList(@RequestBody InvAccount insAccount){
+    public HttpResult<IPage<InvAccount>> getInsAccountList(@RequestBody InvAccount insAccount) {
         return HttpResult.ok("", invAccountService.selectAccountsListPage(insAccount));
     }
 
     @ApiOperation("获取账户详细信息")
     @GetMapping("getAccountById")
-    public HttpResult getInsAccountById(@RequestParam("accountId") String accountId){
-        if (accountId == null){
+    public HttpResult getInsAccountById(@RequestParam("accountId") String accountId) {
+        if (accountId == null) {
             throw new RuntimeException("id不能为空");
         }
         InvAccount invAccount = new InvAccount();
@@ -45,78 +47,108 @@ public class InvAccountController {
         return HttpResult.ok("", invAccountService.selectAccounts(invAccount));
     }
 
+    @ApiOperation("查询账户卡列表")
+    @PostMapping("getAccountCardList")
+    public HttpResult getInsAccountCardList(@RequestBody InvAccountCard invAccountCard) {
+
+
+        LambdaQueryWrapper<InvAccountCard> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        objectLambdaQueryWrapper.eq(InvAccountCard::getAccountId, invAccountCard.getAccountId());
+        if (invAccountCard.getBankCardNum() != null) {
+            objectLambdaQueryWrapper.eq(InvAccountCard::getBankCardNum, invAccountCard.getBankCardNum());
+        } else if (invAccountCard.getBank() != null) {
+            objectLambdaQueryWrapper.eq(InvAccountCard::getBank, invAccountCard.getBank());
+        }
+        return HttpResult.ok("", invAccountCardService.list(objectLambdaQueryWrapper));
+
+    }
+
     @ApiOperation("删除账户(只传一个id就行)")
     @DeleteMapping("{accountId}")
-    public HttpResult deleteInsAccount(@PathVariable("accountId") String accountId){
-        if (accountId!= null){
+    public HttpResult deleteInsAccount(@PathVariable("accountId") String accountId) {
+        if (accountId != null) {
             InvAccount invAccount = invAccountService.getById(accountId);
             invAccount.setDelFlag("1");
-            if (invAccountService.updateById(invAccount)){
+            if (invAccountService.updateById(invAccount)) {
                 return HttpResult.ok("删除成功");
-            }else {
+            } else {
                 return HttpResult.error();
             }
-        }else {
+        } else {
             return HttpResult.error("id不能为空");
         }
     }
 
+    @ApiOperation("删除账户卡")
+    @DeleteMapping("{bankCardNum}")
+    public HttpResult deleteInsAccountCard(@PathVariable("bankCardNum") String bankCardNum) {
+        if (bankCardNum == null) {
+            throw new RuntimeException("卡号为空");
+        }
+
+        if (invAccountCardService.removeById(bankCardNum)){
+            return HttpResult.ok("删除成功");
+        }else {
+            return HttpResult.error("删除失败");
+        }
+    }
+
     @ApiOperation("插入账户信息")
     @PostMapping("insertAccount")
-    public HttpResult insertInsAccount(@RequestBody InvAccount invAccount){
-        if (invAccountService.save(invAccount)){
+    public HttpResult insertInsAccount(@RequestBody InvAccount invAccount) {
+        if (invAccountService.save(invAccount)) {
             return HttpResult.ok();
-        }else {
+        } else {
             return HttpResult.error();
         }
     }
 
     @ApiOperation("插入账户卡信息")
     @PostMapping("insertAccountCard")
-    public HttpResult insertInsAccountCard(@RequestBody InvAccountCard invAccountCard){
+    public HttpResult insertInsAccountCard(@RequestBody InvAccountCard invAccountCard) {
 
-        if (invAccountCard.getAccountId() == null){
+        if (invAccountCard.getAccountId() == null) {
             throw new RuntimeException("账户id为空");
         }
         InvAccount byId = invAccountService.getById(invAccountCard.getAccountId());
-        if (byId.getOuterFlag().equals("1")){
+        if (byId.getOuterFlag().equals("1")) {
             throw new RuntimeException("外部账户不允许插入账户卡信息");
         }
 
-        if (invAccountCardService.insertInsAccountCard(invAccountCard) > 0){
+        if (invAccountCardService.insertInsAccountCard(invAccountCard) > 0) {
             return HttpResult.ok();
-        }else {
+        } else {
             return HttpResult.error();
         }
     }
 
     @ApiOperation("修改账户信息")
     @PostMapping("updateAccount")
-    public HttpResult updateInsAccount(@RequestBody InvAccount invAccount){
-        if (invAccountService.updateById(invAccount)){
+    public HttpResult updateInsAccount(@RequestBody InvAccount invAccount) {
+        if (invAccountService.updateById(invAccount)) {
             return HttpResult.ok();
-        }else {
+        } else {
             return HttpResult.error();
         }
     }
 
     @ApiOperation("修改账户卡信息")
     @PostMapping("updateAccountCard")
-    public HttpResult updateInsAccountCard(@RequestBody InvAccountCard invAccountCard){
-        if (invAccountCard.getBankCardNum() == null){
+    public HttpResult updateInsAccountCard(@RequestBody InvAccountCard invAccountCard) {
+        if (invAccountCard.getBankCardNum() == null) {
             throw new RuntimeException("卡号不能为空");
         }
 
-        if (invAccountCardService.updateInsAccountCard(invAccountCard) > 0){
+        if (invAccountCardService.updateInsAccountCard(invAccountCard) > 0) {
             return HttpResult.ok();
-        }else {
+        } else {
             return HttpResult.error();
         }
     }
 
     @ApiOperation("根据户名分类")
     @GetMapping("getAccountByAccountName")
-    public HttpResult selectByAccountName(){
+    public HttpResult selectByAccountName() {
         return invAccountService.selectByAccountName();
     }
 }

+ 6 - 8
src/main/java/com/ydtech/modules/inv/controller/InvAccountIncoiceController.java

@@ -11,11 +11,8 @@ import com.ydtech.modules.inv.service.InvAccountIncoiceService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
-import org.yaml.snakeyaml.events.Event;
-
 import javax.annotation.Resource;
 import java.io.Serializable;
-import java.util.List;
 
 /**
  * 发票管理表(InvAccountIncoice)表控制层
@@ -74,7 +71,7 @@ public class InvAccountIncoiceController{
     @PostMapping
     @ApiOperation("新增")
     public HttpResult insert(@RequestBody InvAccountIncoice invAccountIncoice) {
-        return HttpResult.ok(this.invAccountIncoiceService.insertInvAccountIncoice(invAccountIncoice));
+        return this.invAccountIncoiceService.insertInvAccountIncoice(invAccountIncoice);
     }
 
     /**
@@ -95,15 +92,16 @@ public class InvAccountIncoiceController{
      */
     @DeleteMapping
     @ApiOperation("删除")
-    public HttpResult delete(@RequestParam("idList") Long idList) {
-        if (idList == null) {
+    public HttpResult delete(@RequestParam("id") Long id) {
+        if (id == null) {
             throw new RuntimeException("id不能为空");
         }
 
         InvAccountIncoice invAccountIncoice = new InvAccountIncoice();
-        invAccountIncoice.setInvoiceId(idList);
+        invAccountIncoice.setInvoiceId(id);
         invAccountIncoice.setDelFlag("1");
-        return HttpResult.ok(this.invAccountIncoiceService.updateById(invAccountIncoice));
+
+        return this.invAccountIncoiceService.delInvAccountIncoice(invAccountIncoice);
     }
 }
 

+ 4 - 0
src/main/java/com/ydtech/modules/inv/model/InvAccountIncoice.java

@@ -100,6 +100,9 @@ public class InvAccountIncoice implements Serializable{
     @ApiModelProperty(value = "卡号")
     private String bankCardNum;
 
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
 
     //进账金额
     @ApiModelProperty(value = "进账金额")
@@ -112,6 +115,7 @@ public class InvAccountIncoice implements Serializable{
     private String notPayoutMoney;
 
     //撤销标志(0正常 1撤销)
+    @ApiModelProperty(value = "撤销标志(0正常 1撤销)")
     private String delFlag;
 }
 

+ 6 - 0
src/main/java/com/ydtech/modules/inv/model/InvAccountOperate.java

@@ -97,6 +97,12 @@ public class InvAccountOperate implements Serializable {
     @ApiModelProperty(value = "收入0支出1")
     private String revenueOutlay;
 
+    /**
+     *发票序号
+     */
+    @ApiModelProperty(value = "发票序号")
+    private String invoiceId;
+
     @ApiModelProperty(value = "外部转内部需携带转入银行卡id")
     @TableField(exist = false)
     private String enterCardId;

+ 4 - 1
src/main/java/com/ydtech/modules/inv/service/InvAccountIncoiceService.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.inv.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.inv.model.InvAccountIncoice;
 
 
@@ -12,6 +13,8 @@ import com.ydtech.modules.inv.model.InvAccountIncoice;
  */
 public interface InvAccountIncoiceService extends IService<InvAccountIncoice> {
 
-    int insertInvAccountIncoice(InvAccountIncoice invAccountIncoice);
+    HttpResult insertInvAccountIncoice(InvAccountIncoice invAccountIncoice);
+
+    HttpResult delInvAccountIncoice(InvAccountIncoice invAccountIncoice);
 
 }

+ 3 - 0
src/main/java/com/ydtech/modules/inv/service/InvAccountOperateService.java

@@ -15,4 +15,7 @@ public interface InvAccountOperateService extends IService<InvAccountOperate> {
     IPage<InvAccountOperate> selectList(InvAccountOperate list);
 
     HttpResult insert(InvAccountOperate invAccountOperate);
+
+
+    HttpResult insertIncoice(InvAccountOperate invAccountOperate,String bankCardNum);
 }

+ 1 - 4
src/main/java/com/ydtech/modules/inv/service/impl/InvAccountCardServiceImpl.java

@@ -38,7 +38,7 @@ public class InvAccountCardServiceImpl extends ServiceImpl<InvAccountCardMapper,
     public int insertInsAccountCard(InvAccountCard insAccountCard) {
         InvAccount byId = invAccountService.getById(insAccountCard.getAccountId());
 
-        if(byId.getOuterFlag().equals("0")) {
+        if(byId.getOuterFlag().equals("1")) {
             throw new RuntimeException("外部账户无法录入卡片信息");
         }
             //插入剩余额度以及笔数
@@ -60,10 +60,7 @@ public class InvAccountCardServiceImpl extends ServiceImpl<InvAccountCardMapper,
                     .add(new BigDecimal(insAccountCard.getTianqinProfit()))//天勤利润
                     .add(new BigDecimal(insAccountCard.getOtherProfit()))//其他利润
                     .add(new BigDecimal(insAccountCard.getClearingProfit()));//结算卡
-            BaseController baseController = new BaseController();
         insAccountCard.setBalance(String.valueOf(count));
-        insAccountCard.setCreateBy(baseController.getUserName());
-        insAccountCard.setCreateTime(new Date());
         return invAccountCardMapper.insert(insAccountCard);
     }
 

+ 35 - 8
src/main/java/com/ydtech/modules/inv/service/impl/InvAccountIncoiceServiceImpl.java

@@ -3,18 +3,23 @@ package com.ydtech.modules.inv.service.impl;
 
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.inv.dao.InvAccountIncoiceMapper;
 import com.ydtech.modules.inv.model.InvAccountCard;
 import com.ydtech.modules.inv.model.InvAccountIncoice;
+import com.ydtech.modules.inv.model.InvAccountOperate;
 import com.ydtech.modules.inv.service.InvAccountCardService;
 import com.ydtech.modules.inv.service.InvAccountIncoiceService;
+import com.ydtech.modules.inv.service.InvAccountOperateService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
+import static com.ydtech.modules.inv.utils.TransferUtils.*;
+
 /**
  * 发票管理表(InvAccountIncoice)表服务实现类
  *
@@ -28,9 +33,11 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
     private InvAccountIncoiceMapper invAccountIncoiceMapper;
     @Autowired
     private InvAccountCardService invAccountCardService;
+    @Autowired
+    private InvAccountOperateService invAccountOperateService;
 
     @Override
-    public int insertInvAccountIncoice(InvAccountIncoice invAccountIncoice) {
+    public HttpResult insertInvAccountIncoice(InvAccountIncoice invAccountIncoice) {
         if (invAccountIncoice.getRate() == null){
             throw new SystemException("请填写税率");
         }
@@ -48,20 +55,40 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
         //不含税金额
         invAccountIncoice.setNoHasTax(noHasTax.toString());
 
-
-        InvAccountCard invAccountCard = invAccountCardService.getById(invAccountIncoice.getBankCardNum());
         //进账卡号
         String bankCardNum = invAccountIncoice.getBankCardNum();
         //进账金额
         String payoutMoney = invAccountIncoice.getPayoutMoney();
 
-        //新增发票后直接加在余额上
-        invAccountCard.setBalance(String.valueOf(new BigDecimal(payoutMoney).add(new BigDecimal(invAccountCard.getBalance()))));
-        invAccountCard.setBankCardNum(bankCardNum);
+        //新增发票增加卡的收入
+        InvAccountOperate invAccountOperate = new InvAccountOperate();
+        invAccountOperate.setEnterCardId(bankCardNum);
+        invAccountOperate.setApplyAmount(payoutMoney);
+        invAccountOperate.setRemark(invAccountIncoice.getRemark());
+
+        invAccountIncoiceMapper.insert(invAccountIncoice);
+
 
-        invAccountCardService.updateById(invAccountCard);
+        return  invAccountOperateService.insertIncoice(invAccountOperate,invAccountIncoice.getBankCardNum());
+    }
+
+    @Override
+    public HttpResult delInvAccountIncoice(InvAccountIncoice invAccountIncoice) {
+        //发票信息
+        InvAccountIncoice enInvAccountIncoice = invAccountIncoiceMapper.selectById(invAccountIncoice.getInvoiceId());
+        //回滚收入
+        InvAccountCard enterAccount = invAccountCardService.getById(enInvAccountIncoice.getBankCardNum());
+
+        InvAccountCard invAccount = quashOutsideTransfer(enterAccount, enInvAccountIncoice);
+
+        try {
+            invAccountIncoiceMapper.updateById(invAccountIncoice);
+            invAccountCardService.updateById(invAccount);
+        }catch (Exception e){
+            return HttpResult.error("撤销失败");
+        }
 
-        return  invAccountIncoiceMapper.insert(invAccountIncoice);
+        return HttpResult.ok("撤销成功");
     }
 
 }

+ 19 - 0
src/main/java/com/ydtech/modules/inv/service/impl/InvAccountOperateServiceImpl.java

@@ -86,6 +86,25 @@ public class InvAccountOperateServiceImpl extends ServiceImpl<InvAccountOperateM
         return HttpResult.ok("新增收入成功");
     }
 
+    /**
+     * 外部转内部
+     * @param invAccountOperate
+     * @return
+     */
+    @Override
+    public HttpResult insertIncoice(InvAccountOperate invAccountOperate,String bankCardNum) {
+        InvAccountCard enterAccount = invAccountCardService.getById(invAccountOperate.getEnterCardId());
+        InvAccountCard invAccount = outsideTransfer(enterAccount, invAccountOperate);
+
+        if (!invAccountCardService.updateById(invAccount)){
+
+            return HttpResult.error("新增收入失败");
+        }
+        invAccount.setBankCardNum(bankCardNum);
+        insAccountOperateMapper.insert(invAccountOperate);
+        return HttpResult.ok("新增收入成功");
+    }
+
 }
 
 

+ 50 - 4
src/main/java/com/ydtech/modules/inv/utils/TransferUtils.java

@@ -2,10 +2,7 @@ package com.ydtech.modules.inv.utils;
 
 import com.ydtech.constants.enums.inv.InsAccountOperateEnum;
 import com.ydtech.exception.SystemException;
-import com.ydtech.modules.inv.model.InvAccount;
-import com.ydtech.modules.inv.model.InvAccountCard;
-import com.ydtech.modules.inv.model.InvAccountExcel;
-import com.ydtech.modules.inv.model.InvAccountOperate;
+import com.ydtech.modules.inv.model.*;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -119,6 +116,20 @@ public class TransferUtils {
         return enterAccountUtils(remark, enterAccountCard, applyAmount);
     }
 
+
+    /**
+     * 撤销发票方法
+     */
+    public static InvAccountCard quashOutsideTransfer(InvAccountCard enterAccountCard, InvAccountIncoice invAccountIncoice) {
+        if (enterAccountCard == null && invAccountIncoice == null) {
+            throw new SystemException("账户为空");
+        }
+        String remark = invAccountIncoice.getRemark();
+        BigDecimal applyAmount = new BigDecimal(invAccountIncoice.getInvoiceMoney());
+
+        return enterAccountBreakUtils(remark, enterAccountCard, applyAmount);
+    }
+
     /**
      * 内部转外部方法
      */
@@ -188,6 +199,41 @@ public class TransferUtils {
         return enterAccountCard;
     }
 
+
+
+    /**
+     * 收入方回滚利润方法
+     *
+     * @return
+     */
+    private static InvAccountCard enterAccountBreakUtils(String remark, InvAccountCard enterAccountCard, BigDecimal invAccountExcelApplyAmount) {
+        switch (remark) {
+            case "0":
+                enterAccountCard.setInsuranceProfit(new BigDecimal(enterAccountCard.getInsuranceProfit()).subtract(invAccountExcelApplyAmount).toString());
+                break;
+            case "1":
+                enterAccountCard.setClearingProfit(new BigDecimal(enterAccountCard.getClearingProfit()).subtract(invAccountExcelApplyAmount).toString());
+                break;
+            case "2":
+                enterAccountCard.setTianqinProfit(new BigDecimal(enterAccountCard.getTianqinProfit()).subtract(invAccountExcelApplyAmount).toString());
+                break;
+            case "3":
+                enterAccountCard.setParkProfit(new BigDecimal(enterAccountCard.getParkProfit()).subtract(invAccountExcelApplyAmount).toString());
+                break;
+            case "4":
+                enterAccountCard.setOtherProfit(new BigDecimal(enterAccountCard.getOtherProfit()).subtract(invAccountExcelApplyAmount).toString());
+                break;
+            case "5":
+                enterAccountCard.setFiscalProfit(new BigDecimal(enterAccountCard.getFiscalProfit()).subtract(invAccountExcelApplyAmount).toString());
+                break;
+            case "6":
+                enterAccountCard.setExteriorProfit(new BigDecimal(enterAccountCard.getExteriorProfit()).subtract(invAccountExcelApplyAmount).toString());
+                break;
+        }
+        enterAccountCard.setBalance(new BigDecimal(enterAccountCard.getBalance()).subtract(invAccountExcelApplyAmount).toString());
+        return enterAccountCard;
+    }
+
     /**
      * 公户扣除余额方法
      */

+ 5 - 1
src/main/resources/mapper/modules/inv/InvAccountOperateMapper.xml

@@ -18,6 +18,7 @@
             <result property="company" column="company" jdbcType="VARCHAR"/>
             <result property="bigApplyAmount" column="big_apply_amount" jdbcType="VARCHAR"/>
             <result property="revenueOutlay" column="revenue_outlay" jdbcType="CHAR"/>
+            <result property="invoiceId" column="invoice_id" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
@@ -25,7 +26,7 @@
         apply_time,collection_message,fund_flow,
         fund_use,apply_amount,pay_method,
         remark,company,big_apply_amount,
-        revenue_outlay
+        revenue_outlay,invoice_id
     </sql>
     <select id="selectInsAccountOperate" resultMap="BaseResultMap">
         select
@@ -53,5 +54,8 @@
         <if test="insAccountOperate.revenueOutlay != null and insAccountOperate.revenueOutlay != ''">
             and revenue_outlay = #{insAccountOperate.revenueOutlay}
         </if>
+        <if test="insAccountOperate.invoiceId != null and insAccountOperate.invoiceId != ''">
+            and invoice_id = #{insAccountOperate.invoiceId}
+        </if>
     </select>
 </mapper>