baolei 3 settimane fa
parent
commit
2dd4d1ab5c

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

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.hzy.common.enums.EDelFlag;
 import com.hzy.common.utils.RMBUtil;
+import com.hzy.common.utils.security.ShiroUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -100,8 +101,11 @@ public class SalaryController extends BaseController
     {
         salary.setSumAmount(RMBUtil.yuanToFen(salary.getSumAmount()));
         salary.setDelFlag(EDelFlag.NO.getVal());
+        salary.setCreateBy(ShiroUtils.getLoginName());
         salary.getSalaryDetailList().forEach(e->{
+            e.setPercent(RMBUtil.yuanToFen(e.getPercent()));
             e.setAmount(RMBUtil.yuanToFen(e.getAmount()));
+            e.setCreateBy(ShiroUtils.getLoginName());
         });
         return toAjax(salaryService.insertSalary(salary));
     }
@@ -116,6 +120,7 @@ public class SalaryController extends BaseController
         Salary salary = salaryService.selectSalaryBySalaryId(salaryId);
         salary.setSumAmount(RMBUtil.fenToYuan(salary.getSumAmount()));
         salary.getSalaryDetailList().forEach(e->{
+            e.setPercent(RMBUtil.fenToYuan(e.getPercent()));
             e.setAmount(RMBUtil.fenToYuan(e.getAmount()));
         });
         mmap.put("salary", salary);
@@ -131,6 +136,13 @@ public class SalaryController extends BaseController
     @ResponseBody
     public AjaxResult editSave(Salary salary)
     {
+        salary.setSumAmount(RMBUtil.yuanToFen(salary.getSumAmount()));
+        salary.setUpdateBy(ShiroUtils.getLoginName());
+        salary.getSalaryDetailList().forEach(e->{
+            e.setPercent(RMBUtil.yuanToFen(e.getPercent()));
+            e.setAmount(RMBUtil.yuanToFen(e.getAmount()));
+            e.setUpdateBy(ShiroUtils.getLoginName());
+        });
         return toAjax(salaryService.updateSalary(salary));
     }
 

+ 12 - 0
src/main/java/com/hzy/project/business/salary/domain/SalaryDetail.java

@@ -36,6 +36,18 @@ public class SalaryDetail extends BaseEntity
     @Excel(name = "科目名")
     private String subjectName;
 
+    /** 基准标记 */
+    @Excel(name = "基准标记")
+    private String baseFlag;
+
+    /** 占比 */
+    @Excel(name = "占比")
+    private BigDecimal percent;
+
+    /** 公式 */
+    @Excel(name = "公式")
+    private String formula;
+
     /** 金额 */
     @Excel(name = "金额")
     private BigDecimal amount;

+ 3 - 3
src/main/java/com/hzy/project/business/subject/controller/SalarySubjectController.java

@@ -67,16 +67,16 @@ public class SalarySubjectController extends BaseController
     @RequiresPermissions("business:subject:list")
     @GetMapping("/getlist/{subjectType}")
     @ResponseBody
-    public List<SalarySubject> getlist(@PathVariable("subjectType") String subjectType)
+    public TableDataInfo getlist(@PathVariable("subjectType") String subjectType)
     {
-        SalarySubject salarySubject = new SalarySubject();
+         SalarySubject salarySubject = new SalarySubject();
         salarySubject.setSubjectType(subjectType);
         salarySubject.setDelFlag(EDelFlag.NO.getVal());
         List<SalarySubject> list = salarySubjectService.selectSalarySubjectList(salarySubject);
         list.forEach(e->{
             e.setPercent(RMBUtil.fenToYuan(e.getPercent()));
         });
-        return list;
+        return getDataTable(list);
     }
 
     /**

+ 6 - 3
src/main/resources/mybatis/business/SalaryMapper.xml

@@ -27,6 +27,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="salaryId"    column="salaryId"    />
         <result property="salarySubjectId"    column="salarySubjectId"    />
         <result property="subjectName"    column="subjectName"    />
+        <result property="baseFlag"    column="baseFlag"    />
+        <result property="percent"    column="percent"    />
+        <result property="formula"    column="formula"    />
         <result property="amount"    column="amount"    />
         <result property="delFlag"    column="delFlag"    />
         <result property="createBy"    column="create_by"    />
@@ -54,7 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <select id="selectSalaryDetailList" resultMap="SalaryDetailResult">
-        select id, salaryId, salarySubjectId, subjectName, amount, delFlag, create_by, create_time, update_by, update_time
+        select id, salaryId, salarySubjectId, subjectName, baseFlag, percent, formula, amount, delFlag, create_by, create_time, update_by, update_time
         from t_salary_detail
         where salaryId = #{salaryId}
     </select>
@@ -127,9 +130,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <insert id="batchSalaryDetail">
-        insert into t_salary_detail( id, salaryId, salarySubjectId, subjectName, amount, delFlag, create_by, create_time, update_by, update_time) values
+        insert into t_salary_detail( id, salaryId, salarySubjectId, subjectName, baseFlag, percent, formula, amount, delFlag, create_by, create_time, update_by, update_time from t_salary_detail) values
         <foreach item="item" index="index" collection="list" separator=",">
-            ( #{item.id}, #{item.salaryId}, #{item.salarySubjectId}, #{item.subjectName}, #{item.amount}, #{item.delFlag}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime})
+            ( #{item.id}, #{item.salaryId}, #{item.salarySubjectId}, #{item.subjectName}, #{baseFlag}, #{percent}, #{formula}, #{item.amount}, #{item.delFlag}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime})
         </foreach>
     </insert>
 

+ 99 - 18
src/main/resources/templates/business/salary/add.html

@@ -52,8 +52,8 @@
             <h4 class="form-header h4">工资明细信息</h4>
             <div class="row">
                 <div class="col-xs-12">
-<!--                    <button type="button" class="btn btn-white btn-sm" onclick="addRow()"><i class="fa fa-plus"> 增加</i></button>-->
-<!--                    <button type="button" class="btn btn-white btn-sm" onclick="sub.delRow()"><i class="fa fa-minus"> 删除</i></button>-->
+                    <button type="button" class="btn btn-white btn-sm" onclick="addRow()"><i class="fa fa-plus"> 增加</i></button>
+                    <button type="button" class="btn btn-white btn-sm" onclick="sub.delRow()"><i class="fa fa-minus"> 删除</i></button>
                     <div class="col-sm-12 select-table table-striped">
                         <table id="bootstrap-table"></table>
                     </div>
@@ -64,6 +64,7 @@
     <th:block th:include="include :: footer" />
     <th:block th:include="include :: datetimepicker-js" />
     <script th:inline="javascript">
+        var baseFlagDatas = [[${@dict.getType('sys_yes_no')}]];
         var prefix = ctx + "business/salary"
         $("#form-salary-add").validate({
             focusCleanup: true
@@ -102,20 +103,44 @@
                     }
                 },
                 {
-                    field: 'salarySubjectId',
+                    field: 'subjectName',
                     align: 'center',
-                    title: '工资科目',
+                    title: '科目',
                     formatter: function(value, row, index) {
-                        var html = $.common.sprintf("<input class='form-control' type='text' name='salaryDetailList[%s].salarySubjectId' value='%s'>", index, value);
+                        var html = $.common.sprintf("<input class='form-control' type='text' name='salaryDetailList[%s].subjectName' value='%s'>", index, value);
                         return html;
                     }
                 },
                 {
-                    field: 'subjectName',
-                    align: 'center',
-                    title: '科目名',
+                    field: 'baseFlag',
+                    title: '基准标记',
+                    visible: false,
                     formatter: function(value, row, index) {
-                        var html = $.common.sprintf("<input class='form-control' type='text' name='salaryDetailList[%s].subjectName' value='%s'>", index, value);
+                        console.log(index + "|" + value);
+                        var html = $.common.sprintf("<input class='form-control' type='text' name='salaryDetailList[%s].baseFlag' value='%s'>", index, value)
+                        return html;
+                    }
+                },
+                {
+                    field: 'baseFlagName',
+                    title: '基准标记',
+                    formatter: function(value, row, index) {
+                        return $.table.selectDictLabel(baseFlagDatas, row.baseFlag);
+                    }
+                },
+                {
+                    field: 'percent',
+                    title: '占比',
+                    formatter: function(value, row, index) {
+                        var html = $.common.sprintf("<input class='form-control' readonly='readonly' type='text' name='salaryDetailList[%s].percent' value='%s'>", index, value);
+                        return html;
+                    }
+                },
+                {
+                    field: 'formula',
+                    title: '公式',
+                    formatter: function(value, row, index) {
+                        var html = $.common.sprintf("<input class='form-control' readonly='readonly' type='text' name='salaryDetailList[%s].formula' value='%s'>", index, value);
                         return html;
                     }
                 },
@@ -124,7 +149,7 @@
                     align: 'center',
                     title: '金额',
                     formatter: function(value, row, index) {
-                        var html = $.common.sprintf("<input class='form-control' type='text' name='salaryDetailList[%s].amount' value='%s'>", index, value);
+                        var html = $.common.sprintf("<input class='form-control detail-amount' type='text' name='salaryDetailList[%s].amount' value='%s'>", index, value);
                         return html;
                     }
                 },
@@ -144,19 +169,72 @@
             var count = $("#" + table.options.id).bootstrapTable('getData').length;
             var row = {
                 index: $.table.serialNumber(count),
-                salarySubjectId: "",
                 subjectName: "",
+                baseFlag: "",
+                percent: 0,
+                formula: "",
                 amount: "",
             }
             sub.addRow(row);
         }
 
+        $(document).on("blur", "input[type='text'].detail-amount", function () {
+            let name = $(this).attr("name");
+            const index = name.split('[')[1].split(']')[0];
+
+            $("#" + table.options.id).bootstrapTable('updateRow', {
+                index: index, // 你想修改哪行,0表示第一行
+                row: {
+                    index: $.table.serialNumber(index + 1),
+                    subjectName: $("#" + table.options.id).bootstrapTable('getData')[index].subjectName,
+                    baseFlag: $("#" + table.options.id).bootstrapTable('getData')[index].baseFlag,
+                    percent: $("#" + table.options.id).bootstrapTable('getData')[index].percent,
+                    formula: $("#" + table.options.id).bootstrapTable('getData')[index].formula,
+                    amount: $(this).val(),
+                }
+            })
+
+            let allData = $("#" + table.options.id).bootstrapTable('getData');
+            let changeRow = allData[index];
+
+            if (changeRow.baseFlag === "Y") {
+                let baseValue = changeRow.amount;
+
+                for (let i = 0; i < allData.length; i++) {
+                    if (i !== index) {
+                        let curRow = allData[i];
+                        let curAmt = 0;
+                        if ($.common.isEmpty(curRow.formula)) {
+                            // 使用percent计算
+                            let curPercent = parseFloat(curRow.percent) || 0;
+                            curAmt = (baseValue * curPercent / 100).toFixed(2);
+                        } else {
+                            // 使用formula计算
+                            curAmt = eval(curRow.formula).toFixed(2);
+                        }
+                        $("#" + table.options.id).bootstrapTable('updateRow', {
+                            index: i, // 你想修改哪行,0表示第一行
+                            row: {
+                                index: $.table.serialNumber(i+1),
+                                subjectName: curRow.subjectName,
+                                baseFlag: curRow.baseFlag,
+                                percent: curRow.percent,
+                                formula: curRow.formula,
+                                amount: curAmt,
+                            }
+                        })
+                    }
+                }
+            }
+        });
+
         $("#subjectType").blur(function(){
 
             $("#" + table.options.id).bootstrapTable('removeAll');
+            console.log($("#subjectType").val());
 
             $.ajax({
-                url: ctx + "business/subject/getlist/" + $("input[name='subjectType']:checked").val(),
+                url: ctx + "business/subject/getlist/" + $("#subjectType").val(),
                 type: "get",
                 processData: false,
                 contentType: false,
@@ -166,22 +244,25 @@
                 },
                 success: function (result) {
                     if (result.code === web_status.SUCCESS) {
-                        if (result.data.length > 0) {
-                            for (var i = 0; i < result.data.length; i++) {
+                        console.log(result.rows);
+                        if (result.rows.length > 0) {
+                            for (var i = 0; i < result.rows.length; i++) {
                                 var count = $("#" + table.options.id).bootstrapTable('getData').length;
 
-                                time += i + 1 +"、" + result.data[i] + "<br/>"
                                 var row = {
                                     index: $.table.serialNumber(count),
-                                    salarySubjectId: "",
-                                    subjectName: result.data[i].subjectName,
+                                    subjectName: result.rows[i].subjectName,
+                                    baseFlag: result.rows[i].baseFlag,
+                                    percent: result.rows[i].percent,
+                                    formula: result.rows[i].formula,
                                     amount: "0",
                                 }
+                                console.log(row);
                                 sub.addRow(row);
                             }
                         }
 
-                        $.modal.alertSuccess(result.msg)
+                        // $.modal.alertSuccess(result.msg)
                     } else if (result.code === web_status.WARNING) {
                         $.modal.alertWarning(result.msg)
                     } else {

+ 4 - 0
src/main/resources/templates/business/subject/subject.html

@@ -115,6 +115,10 @@
                     title: '占比'
                 },
                 {
+                    field: 'formula',
+                    title: '公式'
+                },
+                {
                     field: 'sort',
                     title: '顺序'
                 },