Browse Source

时薪支持小数点后4位。调整财务核算成本的样式。日报填报去除对出差的餐补校验。修复财务核算成本模块的bug

seyason 2 years ago
parent
commit
8a4479dd95

+ 0 - 29
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -911,36 +911,7 @@ public class ReportController {
                     }
                 }
             }
-
-        }
-
-        //自定义数值为餐补的情况下,如果是出差则不能填餐补
-        if (comTimeType.getCustomDataActive() == 1 && comTimeType.getCustomDataName().contains("餐补")) {
-            if (company.getPackageOa() == 1) {
-                //含OA模块的才有出差
-                for (Report r : reportList) {
-                    if (r.getCustomData() > 0) {
-                        //检查出差记录
-                        LocalDate workDate = r.getCreateDate();
-                        String ownerId = r.getCreatorId();
-                        int cnt = businessTripService.count(new QueryWrapper<BusinessTrip>().eq("owner_id", ownerId).le("start_date", workDate).ge("end_date", workDate));
-                        System.out.println("检查出差条数=="+cnt);
-                        if (cnt > 0) {
-                            //返回错误提示
-                            HttpRespMsg msg = new HttpRespMsg();
-                            if (ownerId.equals(token)) {
-                                //自己填报自己的
-                                msg.setError(dtf.format(workDate)+"有出差,餐补必须为0");
-                            } else {
-                                msg.setError(userService.getById(ownerId) + "在" + dtf.format(workDate)+"有出差,餐补必须为0");
-                            }
-                            return msg;
-                        }
-                    }
-                }
-            }
         }
-
         return reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId());
     }
 

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TimeTypeController.java

@@ -45,6 +45,10 @@ public class TimeTypeController {
 
     @RequestMapping("/save")
     public HttpRespMsg save(TimeType record) {
+        //非时间段方式的情况下,不支持同一个项目多时间段的方式
+        if (record.getMultiWorktime() == 1 && record.getType() != 2) {
+            record.setMultiWorktime(0);
+        }
         Boolean success = timeTypeService.updateById(record);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         if (!success) {

+ 14 - 18
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java

@@ -6,10 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
-import com.management.platform.service.FinanceFixedcolnameService;
-import com.management.platform.service.FinanceService;
-import com.management.platform.service.ReportService;
-import com.management.platform.service.UserService;
+import com.management.platform.service.*;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.UserNotFoundException;
@@ -74,6 +71,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
     private FinanceImportMapper financeImportMapper;
     @Resource
     private ProjectCategoryMapper projectCategoryMapper;
+    @Resource
+    FinanceProjectsService financeProjectsService;
 
     @Resource
     private ProjectMapper projectMapper;
@@ -123,7 +122,6 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             }
 
         });
-
         msg.data = financeList;
         return msg;
     }
@@ -578,15 +576,17 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                             userCostMap.put("creatorId", userId);
                             userCostMap.put("workingTime", 0.0f);
                             double percent = json.getDouble(f.getProjectId()+"");
-                            Finance finance = noProjectUser.stream().filter(no -> no.getUserId().equals(userId)).findFirst().get();
-//                            BigDecimal curProjectCost = finance.getTotalCost().multiply(new BigDecimal(percent)).divide(new BigDecimal(100));
-                            userCostMap.put("finance", finance);
-                            userCostMap.put("percent", percent);
-                            userCostMap.put("project", f.getProjectId());
-                            userCostMap.put("projectId", f.getProjectId());
-                            userCostMap.put("projectCode", f.getProjectCode());
-                            userCostMap.put("categoryName", f.getCategoryName());
-                            noPUserDataList.add(userCostMap);
+                            Optional<Finance> first = noProjectUser.stream().filter(no -> no.getUserId().equals(userId)).findFirst();
+                            if (first.isPresent()) {
+                                Finance finance = first.get();
+                                userCostMap.put("finance", finance);
+                                userCostMap.put("percent", percent);
+                                userCostMap.put("project", f.getProjectId());
+                                userCostMap.put("projectId", f.getProjectId());
+                                userCostMap.put("projectCode", f.getProjectCode());
+                                userCostMap.put("categoryName", f.getCategoryName());
+                                noPUserDataList.add(userCostMap);
+                            }
                         }
                     });
                 }
@@ -1194,16 +1194,12 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                             Optional<Finance> first = noProjectUser.stream().filter(no -> no.getUserId().equals(userId)).findFirst();
                             if (first.isPresent()) {
                                 Finance finance = first.get();
-//                            BigDecimal curProjectCost = finance.getTotalCost().multiply(new BigDecimal(percent)).divide(new BigDecimal(100));
                                 userCostMap.put("finance", finance);
                                 userCostMap.put("percent", percent);
                                 userCostMap.put("project", f.getProjectName());
                                 userCostMap.put("projectId", f.getProjectId());
                                 userCostMap.put("projectCode", f.getProjectCode());
                                 noPUserDataList.add(userCostMap);
-                                System.out.println("添加="+f.getProjectId()+", "+f.getProjectName()+", "+percent);
-                            } else {
-                                System.out.println("未找到人员=="+username);
                             }
                         }
                     }

+ 31 - 15
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectPercentageServiceImpl.java

@@ -94,27 +94,43 @@ public class ProjectPercentageServiceImpl extends ServiceImpl<ProjectPercentageM
         List<FinanceProjects> flist = financeProjectsService.list(new QueryWrapper<FinanceProjects>().eq("company_id", user.getCompanyId()).eq("ymonth", ymonth));
         ProjectPercentage projectPercentage = projectPercentageMapper.selectOne(new QueryWrapper<ProjectPercentage>().eq("company_id",user.getCompanyId())
                 .eq("ymonth", ymonth));
-
-        if (flist.size() == 0) {
-            //默认加载当月已填日报的项目
-            List<Map<String, Object>> monthReportProjectList = reportMapper.getMonthReportProjectList(companyId, ymonth + "-01", ymonth + "-31");
-            monthReportProjectList.forEach(a->{
-                FinanceProjects item = new FinanceProjects();
-                item.setProjectId((Integer)a.get("id"));
-                item.setProjectCode((String)a.get("projectCode"));
-                item.setProjectName((String)a.get("projectName"));
-                flist.add(item);
-            });
-        }
-
         HashMap map = new HashMap();
-        map.put("financeProjects", flist);
+
         map.put("allProjectList", allProjects);
         if (projectPercentage != null) {
-            map.put("userCostSetting", JSONArray.parseArray(projectPercentage.getData()));
+            JSONArray array = JSONArray.parseArray(projectPercentage.getData());
+            map.put("userCostSetting", array);
+            if (flist.size() == 0) {
+                //抽取已填比例中的项目
+                List<FinanceProjects> addList = new ArrayList<>();
+                for (int i=0;i<array.size(); i++) {
+                    Set<String> strings = array.getJSONObject(i).keySet();
+                    for (String string : strings) {
+                        if (!("id".equals(string) || "name".equals(string))) {
+                            //项目比例信息
+                            Integer projectId = Integer.valueOf(string);
+                            Project project = allProjects.stream().filter(ap -> ap.getId().equals(projectId)).findFirst().get();
+                            FinanceProjects item = new FinanceProjects();
+                            item.setProjectId(project.getId());
+                            item.setProjectCode(project.getProjectCode());
+                            item.setProjectName(project.getProjectName());
+                            item.setCompanyId(companyId);
+                            item.setYmonth(ymonth);
+                            if (!addList.stream().anyMatch(add->add.getProjectId().equals(projectId))) {
+                                addList.add(item);
+                            }
+                        }
+                    }
+                }
+                if (addList.size() > 0) {
+                    financeProjectsService.saveBatch(addList);
+                }
+                flist = addList;
+            }
         } else {
             map.put("userCostSetting", new JSONArray());
         }
+        map.put("financeProjects", flist);
 
         msg.data = map;
         return msg;

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -807,6 +807,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     //保存提交日报的记录
     private void saveFillReportLog(List<Report> reportList) {
+        if (reportList.size() == 0) return;
         Report r = reportList.get(0);
         List<ReportLog> addLogList = new ArrayList<>();
         //待审核或者直接通过的(代填时state可能是直接通过)

+ 8 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue

@@ -164,10 +164,13 @@
         ref="table"
         @selection-change="deleteSel"
         :height="300" style="width: 100%;">
-        <el-table-column type="selection" width="80"></el-table-column>
-            <el-table-column prop="name" label="姓名" sortable width="150"></el-table-column>
+        <el-table-column type="selection" width="80" fixed="left"></el-table-column>
+            <el-table-column prop="name" label="姓名" sortable width="150" fixed="left"></el-table-column>
             <template v-if="user.timeType.isSecretSalary==0">
-                <el-table-column :prop="headerCols[index]" :label="item" sortable show-overflow-tooltip v-for="(item, index) in tblCols" :key="index" width="130px" align="center">
+                <el-table-column :prop="headerCols[index]" :label="item" sortable show-overflow-tooltip v-for="(item, index) in tblCols" :key="index" width="130px" align="right">
+                <template slot-scope="scope">
+                    <div style="padding-right:5px;">{{scope.row[headerCols[index]]==null?'0.00':scope.row[headerCols[index]].toFixed(2)}}</div>
+                </template>
                 </el-table-column>
             </template>
             <template v-if="user.timeType.isSecretSalary==1">
@@ -177,9 +180,9 @@
                 </template>
                 </el-table-column>
             </template>
-            <el-table-column prop="totalCost" label="总成本">
+            <el-table-column prop="totalCost" width="150" align="right" label="总成本" fixed="right">
                 <template slot-scope="scope" >
-                    {{user.timeType.isSecretSalary==0?scope.row.totalCost:'*'}}
+                    <div style="padding-right:5px;">{{user.timeType.isSecretSalary==0?scope.row.totalCost:'*'}}</div>
                 </template>
             </el-table-column>
         </el-table>

+ 18 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -292,7 +292,7 @@
                     <el-link :underline="false" style="color:blue;font-size:12px;margin-left:7px;" href="#/timetype">修改工作时长</el-link>
                 </el-form-item>
                 <el-form-item label="时薪" prop="cost" v-if="permissions.structurePersonnel&&user.timeType.isSecretSalary==0">
-                    <el-input v-model="insertForm.cost" :disabled="insertForm.salaryType == 0" id="cc" style="width:120px;" @keyup.native="restrictNumber('cc')"
+                    <el-input v-model="insertForm.cost" :disabled="insertForm.salaryType == 0" id="cc" style="width:120px;" @keyup.native="restrictNumber4('cc')"
                      placeholder="请输入成本 单位:元/小时" clearable></el-input>
                     <span style="margin-left:25px;">生效日期</span>
                     <el-date-picker v-model="insertForm.costApplyDate" value-format="yyyy-MM-dd"></el-date-picker>
@@ -380,7 +380,7 @@
                     <el-link :underline="false" style="color:blue;font-size:12px;margin-left:7px;" href="#/timetype">修改工作时长</el-link>
                 </el-form-item>
                 <el-form-item label="时薪" prop="cost" v-if="permissions.structurePersonnel">
-                    <el-input v-model="insertForm.cost" id="cost" :disabled="insertForm.salaryType == 0" @keyup.native="restrictNumber('cost')" style="width:120px;"
+                    <el-input v-model="insertForm.cost" id="cost" :disabled="insertForm.salaryType == 0" @keyup.native="restrictNumber4('cost')" style="width:120px;"
                      placeholder="请输入成本 单位:元/小时" clearable></el-input>
                     <span style="margin-left:25px;">生效日期</span>
                     <el-date-picker v-model="insertForm.costApplyDate"  value-format="yyyy-MM-dd"></el-date-picker>
@@ -599,7 +599,7 @@
             <el-input v-model="contactSecret" style="width:380px;" :disabled="!editSecret"/><el-button @click="editSecret?saveContactSecret():editSecret=true;" >{{editSecret?'保存':'修改'}}</el-button>
             </p>
             <p v-if="contactServer == null">
-            2. 联系客配置同步服务器
+            2. 联系客配置同步服务器
 
             </p>
             <p v-if="contactServer == null" style="text-align:center;">
@@ -1624,6 +1624,20 @@ export default {
         inpu.value = parseFloat(inpu.value);
       }
     },
+    restrictNumber4(targetId) {
+      let inpu = document.getElementById(targetId);
+      inpu.value = inpu.value.replace(/[^\d.]/g, ""); //仅保留数字和"."
+      inpu.value = inpu.value.replace(/\.{2,}/g, "."); //两个连续的"."仅保留第一个"."
+      inpu.value = inpu.value
+        .replace(".", "$#*")
+        .replace(/\./g, "")
+        .replace("$#*", "."); //去除其他"."
+      inpu.value = inpu.value.replace(/^(\d+)\.(\d\d\d\d).*$/, "$1.$2"); //限制只能输入两个小数
+      if (inpu.value.indexOf(".") < 0 && inpu.value != "") {
+        //首位是0的话去掉
+        inpu.value = parseFloat(inpu.value);
+      }
+    },
     showConfirmDialog() {
       if (this.toUserId == null || this.toUserId == "") {
         this.$message({
@@ -1798,7 +1812,7 @@ export default {
         this.insertForm.monthCost /
         this.timeType.monthDays /
         this.timeType.allday
-      ).toFixed(2);
+      ).toFixed(4);
     },
     // 获取本公司的工作时间设置
     getCompanyTimeSetting() {