瀏覽代碼

用户结余

baolei 3 周之前
父節點
當前提交
67e5e65b52

+ 12 - 0
src/main/java/com/hzy/framework/web/service/CommonService.java

@@ -1,6 +1,9 @@
 package com.hzy.framework.web.service;
 
+import com.hzy.common.enums.EDelFlag;
 import com.hzy.common.utils.DateUtils;
+import com.hzy.project.business.customer.domain.Customer;
+import com.hzy.project.business.customer.service.ICustomerService;
 import com.hzy.project.system.user.domain.User;
 import com.hzy.project.system.user.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +23,9 @@ import java.util.List;
 public class CommonService
 {
 
+    @Autowired
+    private ICustomerService customerService;
+
     /**
      * 查询用户数据信息
      * 
@@ -39,4 +45,10 @@ public class CommonService
         return list;
     }
 
+    public List<Customer> getCustomerList()
+    {
+        Customer cond = new Customer();
+        cond.setDelFlag(EDelFlag.NO.getVal());
+        return customerService.selectCustomerList(cond);
+    }
 }

+ 6 - 0
src/main/java/com/hzy/project/business/balance/mapper/UserBalanceMapper.java

@@ -1,8 +1,10 @@
 package com.hzy.project.business.balance.mapper;
 
+import java.math.BigDecimal;
 import java.util.List;
 import com.hzy.project.business.balance.domain.UserBalance;
 import com.hzy.project.business.balance.domain.UserBalanceVo;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 用户结余Mapper接口
@@ -60,4 +62,8 @@ public interface UserBalanceMapper
      * @return 结果
      */
     public int deleteUserBalanceByBalanceIds(String[] balanceIds);
+
+    public int modifyUserBalanceIncome(@Param("balanceId") Long balanceId, @Param("incomeAmt") BigDecimal incomeAmt);
+    public int modifyUserBalancePayment(@Param("balanceId") Long balanceId, @Param("paymentAmt") BigDecimal paymentAmt);
+
 }

+ 43 - 6
src/main/java/com/hzy/project/business/income/controller/IncomeController.java

@@ -1,6 +1,11 @@
 package com.hzy.project.business.income.controller;
 
 import java.util.List;
+
+import com.hzy.common.enums.EDelFlag;
+import com.hzy.common.utils.RMBUtil;
+import com.hzy.common.utils.security.ShiroUtils;
+import com.hzy.project.business.income.domain.IncomeVo;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -23,7 +28,7 @@ import com.hzy.framework.web.page.TableDataInfo;
  * 收入Controller
  * 
  * @author ruoyi
- * @date 2026-01-02
+ * @date 2026-01-04
  */
 @Controller
 @RequestMapping("/business/income")
@@ -47,10 +52,17 @@ public class IncomeController extends BaseController
     @RequiresPermissions("business:income:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Income income)
+    public TableDataInfo list(IncomeVo income)
     {
+        income.setDelFlag(EDelFlag.NO.getVal());
         startPage();
-        List<Income> list = incomeService.selectIncomeList(income);
+        List<IncomeVo> list = incomeService.selectIncomeVoList(income);
+        list.forEach(e->{
+            e.setGrossAmount(RMBUtil.fenToYuan(e.getGrossAmount()));
+            e.setNetAmount(RMBUtil.fenToYuan(e.getNetAmount()));
+            e.setTaxAmount(RMBUtil.fenToYuan(e.getTaxAmount()));
+            e.setRate(RMBUtil.fenToYuan(e.getRate()));
+        });
         return getDataTable(list);
     }
 
@@ -61,10 +73,17 @@ public class IncomeController extends BaseController
     @Log(title = "收入", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(Income income)
+    public AjaxResult export(IncomeVo income)
     {
-        List<Income> list = incomeService.selectIncomeList(income);
-        ExcelUtil<Income> util = new ExcelUtil<Income>(Income.class);
+        income.setDelFlag(EDelFlag.NO.getVal());
+        List<IncomeVo> list = incomeService.selectIncomeVoList(income);
+        list.forEach(e->{
+            e.setGrossAmount(RMBUtil.fenToYuan(e.getGrossAmount()));
+            e.setNetAmount(RMBUtil.fenToYuan(e.getNetAmount()));
+            e.setTaxAmount(RMBUtil.fenToYuan(e.getTaxAmount()));
+            e.setRate(RMBUtil.fenToYuan(e.getRate()));
+        });
+        ExcelUtil<IncomeVo> util = new ExcelUtil<IncomeVo>(IncomeVo.class);
         return util.exportExcel(list, "收入数据");
     }
 
@@ -87,6 +106,12 @@ public class IncomeController extends BaseController
     @ResponseBody
     public AjaxResult addSave(Income income)
     {
+        income.setGrossAmount(RMBUtil.yuanToFen(income.getGrossAmount()));
+        income.setNetAmount(RMBUtil.yuanToFen(income.getNetAmount()));
+        income.setTaxAmount(RMBUtil.yuanToFen(income.getTaxAmount()));
+        income.setRate(RMBUtil.yuanToFen(income.getRate()));
+        income.setDelFlag(EDelFlag.NO.getVal());
+        income.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(incomeService.insertIncome(income));
     }
 
@@ -98,6 +123,12 @@ public class IncomeController extends BaseController
     public String edit(@PathVariable("incomeId") Long incomeId, ModelMap mmap)
     {
         Income income = incomeService.selectIncomeByIncomeId(incomeId);
+
+        income.setGrossAmount(RMBUtil.fenToYuan(income.getGrossAmount()));
+        income.setNetAmount(RMBUtil.fenToYuan(income.getNetAmount()));
+        income.setTaxAmount(RMBUtil.fenToYuan(income.getTaxAmount()));
+        income.setRate(RMBUtil.fenToYuan(income.getRate()));
+
         mmap.put("income", income);
         return prefix + "/edit";
     }
@@ -111,6 +142,12 @@ public class IncomeController extends BaseController
     @ResponseBody
     public AjaxResult editSave(Income income)
     {
+        income.setGrossAmount(RMBUtil.yuanToFen(income.getGrossAmount()));
+        income.setNetAmount(RMBUtil.yuanToFen(income.getNetAmount()));
+        income.setTaxAmount(RMBUtil.yuanToFen(income.getTaxAmount()));
+        income.setRate(RMBUtil.yuanToFen(income.getRate()));
+        income.setUpdateBy(ShiroUtils.getLoginName());
+
         return toAjax(incomeService.updateIncome(income));
     }
 

+ 5 - 3
src/main/java/com/hzy/project/business/income/domain/Income.java

@@ -4,7 +4,6 @@ import java.math.BigDecimal;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.hzy.framework.aspectj.lang.annotation.Excel;
@@ -14,9 +13,8 @@ import com.hzy.framework.web.domain.BaseEntity;
  * 收入对象 t_income
  * 
  * @author ruoyi
- * @date 2026-01-02
+ * @date 2026-01-04
  */
-@EqualsAndHashCode(callSuper = true)
 @Data
 public class Income extends BaseEntity
 {
@@ -29,6 +27,10 @@ public class Income extends BaseEntity
     @Excel(name = "客户")
     private Long customerId;
 
+    /** 客户 */
+    @Excel(name = "用户")
+    private Long userId;
+
     /** 收入日期 */
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @Excel(name = "收入日期", width = 30, dateFormat = "yyyy-MM-dd")

+ 28 - 0
src/main/java/com/hzy/project/business/income/domain/IncomeVo.java

@@ -0,0 +1,28 @@
+package com.hzy.project.business.income.domain;
+
+import com.hzy.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 收入对象 t_income
+ * 
+ * @author ruoyi
+ * @date 2026-01-04
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class IncomeVo extends Income
+{
+
+    private static final long serialVersionUID = 1L;
+
+    /** 客户ID */
+    @Excel(name = "客户ID")
+    private String customerName;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private String userName;
+
+}

+ 20 - 1
src/main/java/com/hzy/project/business/income/mapper/IncomeMapper.java

@@ -2,12 +2,13 @@ package com.hzy.project.business.income.mapper;
 
 import java.util.List;
 import com.hzy.project.business.income.domain.Income;
+import com.hzy.project.business.income.domain.IncomeVo;
 
 /**
  * 收入Mapper接口
  * 
  * @author ruoyi
- * @date 2026-01-02
+ * @date 2026-01-04
  */
 public interface IncomeMapper 
 {
@@ -26,6 +27,7 @@ public interface IncomeMapper
      * @return 收入集合
      */
     public List<Income> selectIncomeList(Income income);
+    public List<IncomeVo> selectIncomeVoList(IncomeVo income);
 
     /**
      * 新增收入
@@ -52,10 +54,27 @@ public interface IncomeMapper
     public int deleteIncomeByIncomeId(Long incomeId);
 
     /**
+     * 逻辑删除收入
+     *
+     * @param incomeId 收入主键
+     * @return 结果
+     */
+    public int logicDelIncomeByIncomeId(Long incomeId);
+
+    /**
      * 批量删除收入
      * 
      * @param incomeIds 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteIncomeByIncomeIds(String[] incomeIds);
+
+    /**
+     * 批量逻辑删除收入
+     *
+     * @param incomeIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int logicDelIncomeByIncomeIds(String[] incomeIds);
+
 }

+ 3 - 1
src/main/java/com/hzy/project/business/income/service/IIncomeService.java

@@ -2,12 +2,13 @@ package com.hzy.project.business.income.service;
 
 import java.util.List;
 import com.hzy.project.business.income.domain.Income;
+import com.hzy.project.business.income.domain.IncomeVo;
 
 /**
  * 收入Service接口
  * 
  * @author ruoyi
- * @date 2026-01-02
+ * @date 2026-01-04
  */
 public interface IIncomeService 
 {
@@ -26,6 +27,7 @@ public interface IIncomeService
      * @return 收入集合
      */
     public List<Income> selectIncomeList(Income income);
+    public List<IncomeVo> selectIncomeVoList(IncomeVo income);
 
     /**
      * 新增收入

+ 141 - 5
src/main/java/com/hzy/project/business/income/service/impl/IncomeServiceImpl.java

@@ -1,7 +1,16 @@
 package com.hzy.project.business.income.service.impl;
 
+import java.math.BigDecimal;
 import java.util.List;
+
+import com.hzy.common.enums.EDelFlag;
 import com.hzy.common.utils.DateUtils;
+import com.hzy.common.utils.StringUtils;
+import com.hzy.project.business.balance.domain.UserBalance;
+import com.hzy.project.business.balance.mapper.UserBalanceMapper;
+import com.hzy.project.business.balance.service.IUserBalanceService;
+import com.hzy.project.business.income.domain.IncomeVo;
+import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.hzy.project.business.income.mapper.IncomeMapper;
@@ -13,14 +22,18 @@ import com.hzy.common.utils.text.Convert;
  * 收入Service业务层处理
  * 
  * @author ruoyi
- * @date 2026-01-02
+ * @date 2026-01-04
  */
 @Service
 public class IncomeServiceImpl implements IIncomeService 
 {
+
     @Autowired
     private IncomeMapper incomeMapper;
 
+    @Autowired
+    private UserBalanceMapper userBalanceMapper;
+
     /**
      * 查询收入
      * 
@@ -44,6 +57,11 @@ public class IncomeServiceImpl implements IIncomeService
     {
         return incomeMapper.selectIncomeList(income);
     }
+    @Override
+    public List<IncomeVo> selectIncomeVoList(IncomeVo income)
+    {
+        return incomeMapper.selectIncomeVoList(income);
+    }
 
     /**
      * 新增收入
@@ -54,8 +72,45 @@ public class IncomeServiceImpl implements IIncomeService
     @Override
     public int insertIncome(Income income)
     {
+        int rtn = 0;
         income.setCreateTime(DateUtils.getNowDate());
-        return incomeMapper.insertIncome(income);
+        rtn = incomeMapper.insertIncome(income);
+
+        String duration = DateFormatUtils.format(income.getIncomeDate(), "yyyyMM");
+        String preDuration = DateFormatUtils.format(DateUtils.addMonths(DateUtils.getNowDate(), -1), "yyyyMM");
+        UserBalance condUserBalance = new UserBalance();
+        condUserBalance.setUserId(income.getUserId());
+        condUserBalance.setDuration(duration);
+        condUserBalance.setDelFlag(EDelFlag.NO.getVal());
+
+        List<UserBalance> userBalances = userBalanceMapper.selectUserBalanceList(condUserBalance);
+
+        if (StringUtils.isEmpty(userBalances)) {
+            UserBalance condPreUb = new UserBalance();
+            condPreUb.setUserId(income.getUserId());
+            condPreUb.setDuration(preDuration);
+            condPreUb.setDelFlag(EDelFlag.NO.getVal());
+            List<UserBalance> preUserBalances = userBalanceMapper.selectUserBalanceList(condPreUb);
+            BigDecimal preClosingBalance = BigDecimal.ZERO;
+            if (preUserBalances != null && preUserBalances.size() > 0) {
+                preClosingBalance = preUserBalances.get(0).getClosingBalance();
+            }
+
+            UserBalance userBalance = new UserBalance();
+            userBalance.setUserId(income.getUserId());
+            userBalance.setDuration(duration);
+            userBalance.setOpeningBalance(preClosingBalance);
+            userBalance.setIncome(income.getGrossAmount());
+            userBalance.setPayment(BigDecimal.ZERO);
+            userBalance.setClosingBalance(preClosingBalance.add(income.getGrossAmount()));
+            userBalance.setDelFlag(EDelFlag.NO.getVal());
+            userBalance.setCreateBy(income.getCreateBy());
+            rtn = rtn + userBalanceMapper.insertUserBalance(userBalance);
+        } else {
+            rtn = rtn + userBalanceMapper.modifyUserBalanceIncome(userBalances.get(0).getBalanceId(), income.getGrossAmount());
+        }
+
+        return rtn;
     }
 
     /**
@@ -67,8 +122,67 @@ public class IncomeServiceImpl implements IIncomeService
     @Override
     public int updateIncome(Income income)
     {
+        int rtn = 0;
+        Income oldIncome = incomeMapper.selectIncomeByIncomeId(income.getIncomeId());
+
         income.setUpdateTime(DateUtils.getNowDate());
-        return incomeMapper.updateIncome(income);
+        rtn = incomeMapper.updateIncome(income);
+
+        String oldDuration = DateFormatUtils.format(oldIncome.getIncomeDate(), "yyyyMM");
+        String duration = DateFormatUtils.format(income.getIncomeDate(), "yyyyMM");
+        String preDuration = DateFormatUtils.format(DateUtils.addMonths(income.getIncomeDate(), -1), "yyyyMM");
+
+        UserBalance condOldUserBalance = new UserBalance();
+        condOldUserBalance.setUserId(income.getUserId());
+        condOldUserBalance.setDuration(oldDuration);
+        condOldUserBalance.setDelFlag(EDelFlag.NO.getVal());
+
+        List<UserBalance> oldUbs = userBalanceMapper.selectUserBalanceList(condOldUserBalance);
+
+        if (StringUtils.isEmpty(oldUbs)) {
+
+        } else {
+
+            Long oldBalanceId = oldUbs.get(0).getBalanceId();
+
+            rtn = rtn + userBalanceMapper.modifyUserBalanceIncome(oldBalanceId, oldIncome.getGrossAmount().negate());
+        }
+
+        UserBalance condNewUserBalance = new UserBalance();
+        condNewUserBalance.setUserId(income.getUserId());
+        condNewUserBalance.setDuration(duration);
+        condNewUserBalance.setDelFlag(EDelFlag.NO.getVal());
+
+        List<UserBalance> ubs = userBalanceMapper.selectUserBalanceList(condNewUserBalance);
+        if (StringUtils.isEmpty(ubs)) {
+
+            UserBalance condPreUb = new UserBalance();
+            condPreUb.setUserId(income.getUserId());
+            condPreUb.setDuration(preDuration);
+            condPreUb.setDelFlag(EDelFlag.NO.getVal());
+            List<UserBalance> preUserBalances = userBalanceMapper.selectUserBalanceList(condPreUb);
+            BigDecimal preClosingBalance = BigDecimal.ZERO;
+            if (preUserBalances != null && !preUserBalances.isEmpty()) {
+                preClosingBalance = preUserBalances.get(0).getClosingBalance();
+            }
+
+            UserBalance userBalance = new UserBalance();
+            userBalance.setUserId(income.getUserId());
+            userBalance.setDuration(duration);
+            userBalance.setOpeningBalance(preClosingBalance);
+            userBalance.setIncome(income.getGrossAmount());
+            userBalance.setPayment(BigDecimal.ZERO);
+            userBalance.setClosingBalance(preClosingBalance.add(income.getGrossAmount()));
+            userBalance.setDelFlag(EDelFlag.NO.getVal());
+            userBalance.setCreateBy(income.getCreateBy());
+            rtn = rtn + userBalanceMapper.insertUserBalance(userBalance);
+
+        } else {
+            Long balanceId = ubs.get(0).getBalanceId();
+            rtn = rtn + userBalanceMapper.modifyUserBalanceIncome(balanceId, income.getGrossAmount());
+        }
+
+        return rtn;
     }
 
     /**
@@ -80,12 +194,34 @@ public class IncomeServiceImpl implements IIncomeService
     @Override
     public int deleteIncomeByIncomeIds(String incomeIds)
     {
-        return incomeMapper.deleteIncomeByIncomeIds(Convert.toStrArray(incomeIds));
+        int rtn = 0;
+        String[] ids = Convert.toStrArray(incomeIds);
+
+        for (String incomeId : ids) {
+            Income oldIncome = incomeMapper.selectIncomeByIncomeId(Long.valueOf(incomeId));
+            String oldDuration = DateFormatUtils.format(oldIncome.getIncomeDate(), "yyyyMM");
+
+            UserBalance condOldUserBalance = new UserBalance();
+            condOldUserBalance.setUserId(oldIncome.getUserId());
+            condOldUserBalance.setDuration(oldDuration);
+            condOldUserBalance.setDelFlag(EDelFlag.NO.getVal());
+
+            List<UserBalance> oldUbs = userBalanceMapper.selectUserBalanceList(condOldUserBalance);
+
+            if (oldUbs != null && !oldUbs.isEmpty()) {
+                Long oldBalanceId = oldUbs.get(0).getBalanceId();
+                rtn = rtn + userBalanceMapper.modifyUserBalanceIncome(oldBalanceId, oldIncome.getGrossAmount().negate());
+            }
+        }
+
+        rtn = rtn + incomeMapper.logicDelIncomeByIncomeIds(ids);
+
+        return rtn;
     }
 
     /**
      * 删除收入信息
-     * 
+     *
      * @param incomeId 收入主键
      * @return 结果
      */

+ 20 - 0
src/main/java/com/hzy/project/business/salary/controller/SalaryController.java

@@ -1,6 +1,9 @@
 package com.hzy.project.business.salary.controller;
 
 import java.util.List;
+
+import com.hzy.common.enums.EDelFlag;
+import com.hzy.common.utils.RMBUtil;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -49,8 +52,12 @@ public class SalaryController extends BaseController
     @ResponseBody
     public TableDataInfo list(Salary salary)
     {
+        salary.setDelFlag(EDelFlag.NO.getVal());
         startPage();
         List<Salary> list = salaryService.selectSalaryList(salary);
+        list.forEach(e->{
+            e.setSumAmount(RMBUtil.fenToYuan(salary.getSumAmount()));
+        });
         return getDataTable(list);
     }
 
@@ -63,7 +70,11 @@ public class SalaryController extends BaseController
     @ResponseBody
     public AjaxResult export(Salary salary)
     {
+        salary.setDelFlag(EDelFlag.NO.getVal());
         List<Salary> list = salaryService.selectSalaryList(salary);
+        list.forEach(e->{
+            e.setSumAmount(RMBUtil.fenToYuan(salary.getSumAmount()));
+        });
         ExcelUtil<Salary> util = new ExcelUtil<Salary>(Salary.class);
         return util.exportExcel(list, "工资数据");
     }
@@ -87,6 +98,11 @@ public class SalaryController extends BaseController
     @ResponseBody
     public AjaxResult addSave(Salary salary)
     {
+        salary.setSumAmount(RMBUtil.yuanToFen(salary.getSumAmount()));
+        salary.setDelFlag(EDelFlag.NO.getVal());
+        salary.getSalaryDetailList().forEach(e->{
+            e.setAmount(RMBUtil.yuanToFen(e.getAmount()));
+        });
         return toAjax(salaryService.insertSalary(salary));
     }
 
@@ -98,6 +114,10 @@ public class SalaryController extends BaseController
     public String edit(@PathVariable("salaryId") Long salaryId, ModelMap mmap)
     {
         Salary salary = salaryService.selectSalaryBySalaryId(salaryId);
+        salary.setSumAmount(RMBUtil.fenToYuan(salary.getSumAmount()));
+        salary.getSalaryDetailList().forEach(e->{
+            e.setAmount(RMBUtil.fenToYuan(e.getAmount()));
+        });
         mmap.put("salary", salary);
         return prefix + "/edit";
     }

+ 44 - 2
src/main/resources/mybatis/business/IncomeMapper.xml

@@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="Income" id="IncomeResult">
         <result property="incomeId"    column="incomeId"    />
         <result property="customerId"    column="customerId"    />
+        <result property="userId"    column="userId"    />
         <result property="incomeDate"    column="incomeDate"    />
         <result property="incomeType"    column="incomeType"    />
         <result property="grossAmount"    column="grossAmount"    />
@@ -21,15 +22,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime"    column="update_time"    />
     </resultMap>
 
+    <resultMap type="IncomeVo" id="IncomeVoResult">
+        <result property="incomeId"    column="incomeId"    />
+        <result property="customerId"    column="customerId"    />
+        <result property="userId"    column="userId"    />
+        <result property="incomeDate"    column="incomeDate"    />
+        <result property="incomeType"    column="incomeType"    />
+        <result property="grossAmount"    column="grossAmount"    />
+        <result property="netAmount"    column="netAmount"    />
+        <result property="taxAmount"    column="taxAmount"    />
+        <result property="rate"    column="rate"    />
+        <result property="remark"    column="remark"    />
+        <result property="delFlag"    column="delFlag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="userName"    column="userName"    />
+        <result property="customerName"    column="customerName"    />
+    </resultMap>
+
     <sql id="selectIncomeVo">
-        select incomeId, customerId, incomeDate, incomeType, grossAmount, netAmount, taxAmount, rate, remark, delFlag, create_by, create_time, update_by, update_time from t_income
+        select incomeId, customerId, userId, incomeDate, incomeType, grossAmount, netAmount, taxAmount, rate, remark, delFlag, create_by, create_time, update_by, update_time from t_income
+    </sql>
+
+    <sql id="selectIncomeExtVo">
+        select ti.incomeId, ti.customerId, ti.userId, ti.incomeDate, ti.incomeType, ti.grossAmount, ti.netAmount, ti.taxAmount, ti.rate, ti.remark, ti.delFlag, ti.create_by, ti.create_time, ti.update_by, ti.update_time,
+               mc.customerName, su.user_name
+        from t_income ti
+        left join m_customer mc on ti.customerId = mc.customerId
+        left join sys_user su on ti.userId = su.user_id
     </sql>
 
     <select id="selectIncomeList" parameterType="Income" resultMap="IncomeResult">
         <include refid="selectIncomeVo"/>
         <where>  
             <if test="customerId != null "> and customerId = #{customerId}</if>
-            <if test="incomeDate != null "> and incomeDate = #{incomeDate}</if>
+            <if test="params.beginIncomeDate != null and params.beginIncomeDate != '' and params.endIncomeDate != null and params.endIncomeDate != ''"> and incomeDate between #{params.beginIncomeDate} and #{params.endIncomeDate}</if>
             <if test="incomeType != null  and incomeType != ''"> and incomeType = #{incomeType}</if>
             <if test="grossAmount != null "> and grossAmount = #{grossAmount}</if>
             <if test="netAmount != null "> and netAmount = #{netAmount}</if>
@@ -97,6 +126,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where incomeId = #{incomeId}
     </update>
 
+    <update id="logicDelIncomeByIncomeId" parameterType="Long">
+        update t_income set delFlag = 1 where incomeId = #{incomeId}
+    </update>
+
+
     <delete id="deleteIncomeByIncomeId" parameterType="Long">
         delete from t_income where incomeId = #{incomeId}
     </delete>
@@ -108,4 +142,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
+    <update id="logicDelIncomeByIncomeIds" parameterType="String">
+        update t_income set delFlag = 1
+        where incomeId in
+        <foreach item="incomeId" collection="array" open="(" separator="," close=")">
+            #{incomeId}
+        </foreach>
+    </update>
+
 </mapper>

+ 12 - 0
src/main/resources/mybatis/business/UserBalanceMapper.xml

@@ -133,4 +133,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
+    <update id="modifyUserBalanceIncome">
+        update m_user_balance
+        set income = income + #{incomeAmt}
+        where balanceId = #{balanceId}
+    </update>
+
+    <update id="modifyUserBalancePayment">
+        update m_user_balance
+        set payment = payment + #{paymentAmt}
+        where balanceId = #{balanceId}
+    </update>
+
 </mapper>

+ 36 - 9
src/main/resources/templates/business/income/add.html

@@ -11,7 +11,21 @@
                 <div class="form-group">
                     <label class="col-sm-3 control-label">客户:</label>
                     <div class="col-sm-8">
-                        <input name="customerId" class="form-control" type="text">
+                        <select class="form-control" name="customerId" th:with="commons=${@common.getCustomerList()}">
+                            <option value="">所有</option>
+                            <option th:each="common : ${commons}" th:text="${common.userName}" th:value="${common.userId}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">客户:</label>
+                    <div class="col-sm-8">
+                        <select class="form-control" name="userId" th:with="users=${@user.getUserList()}">
+                            <option value="">所有</option>
+                            <option th:each="user : ${users}" th:text="${user.customerName}" th:value="${user.customerId}"></option>
+                        </select>
                     </div>
                 </div>
             </div>
@@ -40,31 +54,31 @@
                 <div class="form-group">
                     <label class="col-sm-3 control-label">收入总金额:</label>
                     <div class="col-sm-8">
-                        <input name="grossAmount" class="form-control" type="text">
+                        <input name="grossAmount" id="grossAmount" class="form-control" type="text">
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">净收入:</label>
-                    <div class="col-sm-8">
-                        <input name="netAmount" class="form-control" type="text">
+                    <label class="col-sm-3 control-label">税率:</label>
+                    <div class="col-sm-8 form-inline">
+                        <input name="rate" id="rate" class="form-control" type="text">%
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">税额:</label>
+                    <label class="col-sm-3 control-label">净收入:</label>
                     <div class="col-sm-8">
-                        <input name="taxAmount" class="form-control" type="text">
+                        <input name="netAmount" id="netAmount" class="form-control" type="text">
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">税:</label>
+                    <label class="col-sm-3 control-label">税:</label>
                     <div class="col-sm-8">
-                        <input name="rate" class="form-control" type="text">
+                        <input name="taxAmount" id="taxAmount" class="form-control" type="text">
                     </div>
                 </div>
             </div>
@@ -97,6 +111,19 @@
             minView: "month",
             autoclose: true
         });
+
+        $("#grossAmount, #rate").blur(function(){
+            let grossAmount = Number($("#grossAmount").val()) || 0;
+            let rate = Number($("#rate").val()) || 0;
+
+            let netAmount = grossAmount / (1 + rate / 100);
+            let taxAmount = grossAmount - netAmount;
+
+            $("#taxAmount").val(taxAmount.toFixed(2));
+            $("#netAmount").val(netAmount.toFixed(2));
+
+        });
+
     </script>
 </body>
 </html>

+ 37 - 9
src/main/resources/templates/business/income/edit.html

@@ -12,7 +12,23 @@
                 <div class="form-group">
                     <label class="col-sm-3 control-label">客户:</label>
                     <div class="col-sm-8">
-                        <input name="customerId" th:field="*{customerId}" class="form-control" type="text">
+                        <select class="form-control" name="customerId" th:with="commons=${@common.getCustomerList()}">
+                            <option value="">所有</option>
+                            <option th:each="common : ${commons}" th:text="${common.customerName}" th:value="${common.customerId}" th:field="*{customerId}" ></option>
+                        </select>
+
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">客户:</label>
+                    <div class="col-sm-8">
+                        <select class="form-control" name="userId" th:with="users=${@user.getUserList()}">
+                            <option value="">所有</option>
+                            <option th:each="user : ${users}" th:text="${user.userName}" th:value="${user.userId}" th:field="*{userId}" ></option>
+                        </select>
+
                     </div>
                 </div>
             </div>
@@ -41,31 +57,31 @@
                 <div class="form-group">
                     <label class="col-sm-3 control-label">收入总金额:</label>
                     <div class="col-sm-8">
-                        <input name="grossAmount" th:field="*{grossAmount}" class="form-control" type="text">
+                        <input id="grossAmount" name="grossAmount" th:field="*{grossAmount}" class="form-control" type="text">
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">净收入:</label>
-                    <div class="col-sm-8">
-                        <input name="netAmount" th:field="*{netAmount}" class="form-control" type="text">
+                    <label class="col-sm-3 control-label">税率:</label>
+                    <div class="col-sm-8 form-inline">
+                        <input id="rate" name="rate" th:field="*{rate}" class="form-control" type="text">%
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">税额:</label>
+                    <label class="col-sm-3 control-label">净收入:</label>
                     <div class="col-sm-8">
-                        <input name="taxAmount" th:field="*{taxAmount}" class="form-control" type="text">
+                        <input id="netAmount" name="netAmount" th:field="*{netAmount}" class="form-control" type="text">
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">税:</label>
+                    <label class="col-sm-3 control-label">税:</label>
                     <div class="col-sm-8">
-                        <input name="rate" th:field="*{rate}" class="form-control" type="text">
+                        <input id="taxAmount" name="taxAmount" th:field="*{taxAmount}" class="form-control" type="text">
                     </div>
                 </div>
             </div>
@@ -98,6 +114,18 @@
             minView: "month",
             autoclose: true
         });
+
+        $("#grossAmount, #rate").blur(function(){
+            let grossAmount = Number($("#grossAmount").val()) || 0;
+            let rate = Number($("#rate").val()) || 0;
+
+            let netAmount = grossAmount / (1 + rate / 100);
+            let taxAmount = grossAmount - netAmount;
+
+            $("#taxAmount").val(taxAmount.toFixed(2));
+            $("#netAmount").val(netAmount.toFixed(2));
+
+        });
     </script>
 </body>
 </html>

+ 18 - 23
src/main/resources/templates/business/income/income.html

@@ -12,11 +12,23 @@
                         <ul>
                             <li>
                                 <label>客户:</label>
-                                <input type="text" name="customerId"/>
+                                <select name="customerId" th:with="commons=${@common.getCustomerList()}">
+                                    <option value="">所有</option>
+                                    <option th:each="common : ${commons}" th:text="${common.customerName}" th:value="${common.customerId}"></option>
+                                </select>
                             </li>
                             <li>
+                                <label>用户:</label>
+                                <select name="userId" th:with="users=${@user.getUserList()}">
+                                    <option value="">所有</option>
+                                    <option th:each="user : ${users}" th:text="${user.userName}" th:value="${user.userId}"></option>
+                                </select>
+                            </li>
+                            <li class="select-time">
                                 <label>收入日期:</label>
-                                <input type="text" class="time-input" placeholder="请选择收入日期" name="incomeDate"/>
+                                <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginIncomeDate]"/>
+                                <span>-</span>
+                                <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endIncomeDate]"/>
                             </li>
                             <li>
                                 <label>收入类目:</label>
@@ -26,22 +38,6 @@
                                 </select>
                             </li>
                             <li>
-                                <label>收入总金额:</label>
-                                <input type="text" name="grossAmount"/>
-                            </li>
-                            <li>
-                                <label>净收入:</label>
-                                <input type="text" name="netAmount"/>
-                            </li>
-                            <li>
-                                <label>税额:</label>
-                                <input type="text" name="taxAmount"/>
-                            </li>
-                            <li>
-                                <label>税率:</label>
-                                <input type="text" name="rate"/>
-                            </li>
-                            <li>
                                 <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                                 <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                             </li>
@@ -121,11 +117,10 @@
                 },
                 {
                     field: 'rate',
-                    title: '税率'
-                },
-                {
-                    field: 'remark',
-                    title: '备注'
+                    title: '税率',
+                    formatter: function(value, row, index) {
+                        return value + '%';
+                    }
                 },
                 {
                     title: '操作',

+ 6 - 2
src/main/resources/templates/business/salary/salary.html

@@ -75,12 +75,16 @@
                     title: '用户'
                 },
                 {
+                    field: 'userName',
+                    title: '用户名称'
+                },
+                {
                     field: 'salaryDate',
-                    title: '工资日期'
+                    title: '日期'
                 },
                 {
                     field: 'sumAmount',
-                    title: '工资总金额'
+                    title: '总金额'
                 },
                 {
                     title: '操作',