Преглед на файлове

里程碑创建时不需要默认执行人
填报费用报销时校验是否超过预算

seyason преди 2 години
родител
ревизия
43f8d5ed12

+ 19 - 19
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java

@@ -177,7 +177,7 @@ public class TaskGroupController {
                                     .orderByAsc("seq"));
                     if (gtemplateTaskList.size() > 0) {
                         List<Task> taskList = new ArrayList<>();
-                        List<TaskExecutor> taskExecutorList = new ArrayList<>();
+//                        List<TaskExecutor> taskExecutorList = new ArrayList<>();
                         gtemplateTaskList.forEach(gt->{
                             Task task = gt.toTask();
                             task.setProjectId(item.getProjectId());
@@ -188,28 +188,28 @@ public class TaskGroupController {
                             task.setCreaterId(user.getId());
                             task.setCreaterName(user.getName());
                             task.setCreatorColor(user.getColor());
-                            if(task.getTaskType()==1 && inchargerUser != null){
-                                task.setExecutorId(inchargerUser.getId());
-                                task.setExecutorName(inchargerUser.getName());
-                                task.setExecutorColor(inchargerUser.getColor());
-                            }
+//                            if(task.getTaskType()==1 && inchargerUser != null){
+//                                task.setExecutorId(inchargerUser.getId());
+//                                task.setExecutorName(inchargerUser.getName());
+//                                task.setExecutorColor(inchargerUser.getColor());
+//                            }
 
                             taskList.add(task);
                         });
                         taskService.saveBatch(taskList);
-                        taskList.forEach(tl->{
-                            TaskExecutor taskExecutor=new TaskExecutor();
-                            //当为里程碑任务时
-                            if(tl.getTaskType()==1 && inchargerUser != null){
-                                taskExecutor.setTaskId(tl.getId());
-                                taskExecutor.setExecutorId(inchargerUser.getId());
-                                taskExecutor.setExecutorName(inchargerUser.getName());
-                                taskExecutor.setExecutorColor(inchargerUser.getColor());
-                                taskExecutor.setProjectId(item.getProjectId());
-                                taskExecutorList.add(taskExecutor);
-                            }
-                        });
-                        taskExecutorService.saveBatch(taskExecutorList);
+//                        taskList.forEach(tl->{
+//                            TaskExecutor taskExecutor=new TaskExecutor();
+//                            //当为里程碑任务时
+//                            if(tl.getTaskType()==1 && inchargerUser != null){
+//                                taskExecutor.setTaskId(tl.getId());
+//                                taskExecutor.setExecutorId(inchargerUser.getId());
+//                                taskExecutor.setExecutorName(inchargerUser.getName());
+//                                taskExecutor.setExecutorColor(inchargerUser.getColor());
+//                                taskExecutor.setProjectId(item.getProjectId());
+//                                taskExecutorList.add(taskExecutor);
+//                            }
+//                        });
+//                        taskExecutorService.saveBatch(taskExecutorList);
                     }
                 }
             }

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ExpenseMainType.java

@@ -1,5 +1,6 @@
 package com.management.platform.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -42,7 +43,7 @@ public class ExpenseMainType extends Model<ExpenseMainType> {
     /**
      * 成本预算项id
      */
-    @TableField("basecost_setting_id")
+    @TableField(value = "basecost_setting_id", updateStrategy = FieldStrategy.IGNORED)
     private Integer basecostSettingId;
 
 

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ExpenseItemMapper.java

@@ -19,4 +19,5 @@ public interface ExpenseItemMapper extends BaseMapper<ExpenseItem> {
     List<ExpenseItemVO> getUserExpenseDetail(Integer projectId);
 
     Double selectExpenseByProject(String startDate, String endDate, Integer projectId);
+    Double selectSumAmountByProjectAndType(Integer projectId, Integer type);
 }

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

@@ -923,7 +923,7 @@ public class DingDingServiceImpl implements DingDingService {
                     int dpid = duser.getDdDeptid();
                     if (dpid != 1) {
                         Optional<Department> first = allDeptList.stream().filter(item -> item.getDdDeptid() != null && item.getDdDeptid().equals(dpid)).findFirst();
-                        if (first.isPresent() && oldUser.getDepartmentId() == 0) {
+                        if (first.isPresent()) {
                             Department department = first.get();
                             upUser.setDepartmentId(department.getDepartmentId());
                             upUser.setDepartmentCascade(convertDepartmentIdToCascade(department.getDepartmentId()));

+ 45 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExpenseSheetServiceImpl.java

@@ -87,6 +87,10 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
     private ExcelExportService excelExportService;
     @Resource
     private ExpenseMainTypeService expenseMainTypeService;
+    @Resource
+    private ProjectBasecostSettingMapper projectBasecostSettingMapper;
+    @Resource
+    private ProjectCurrentcostMapper projectCurrentcostMapper;
 
     @Override
     public HttpRespMsg add(ExpenseSheet sheet, String items, String userId) {
@@ -126,6 +130,47 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
         JSONArray array = JSONArray.parseArray(items);
         sheet.setOwnerName(userMapper.selectById(sheet.getOwnerId()).getName());
         sheet.setCompanyId(user.getCompanyId());
+        //校验费用成本是否超过预算
+        //先获取该类型的费用对应的成本预算是多少
+        Integer type = sheet.getType();
+        ExpenseMainType expenseType = expenseMainTypeService.getById(type);
+        Integer basecostSettingId = expenseType.getBasecostSettingId();
+        //设置了对应的成本预算项
+        if (basecostSettingId != null) {
+            ProjectBasecostSetting projectBasecostSetting = projectBasecostSettingMapper.selectById(basecostSettingId);
+            String settingName = projectBasecostSetting.getName();
+            HashMap<Integer, Double> map = new HashMap<>();
+            for (int i=0;i<array.size(); i++) {
+                JSONObject obj = array.getJSONObject(i);
+                ExpenseItem expenseItem = JSONObject.toJavaObject(obj, ExpenseItem.class);
+                Integer projectId = expenseItem.getProjectId();
+                if (map.get(projectId) == null) {
+                    map.put(projectId, expenseItem.getAmount());
+                } else {
+                    //累加
+                    map.put(projectId, map.get(projectId)  + expenseItem.getAmount());
+                }
+            }
+            for (Map.Entry<Integer, Double> entry : map.entrySet()) {
+                Integer projectId = entry.getKey();
+                Double amount = entry.getValue();
+                Project p = projectMapper.selectById(projectId);
+                //获取该项目的这一项当前成本预算
+                ProjectCurrentcost pCurCost = projectCurrentcostMapper.selectOne(new QueryWrapper<ProjectCurrentcost>().eq("project_id", projectId).eq("base_id", basecostSettingId));
+                if (pCurCost == null || pCurCost.getBaseAmount() == null || pCurCost.getBaseAmount() == 0) {
+                    msg.setError("项目【"+p.getProjectName()+"】没有下拨"+settingName+"的预算");
+                    return msg;
+                }
+                //计算该项目当前已经填报的费用报销的金额
+                Double sumAmount = expenseItemMapper.selectSumAmountByProjectAndType(projectId, type);
+                if (amount + sumAmount > pCurCost.getBaseAmount()) {
+                    msg.setError("项目【"+p.getProjectName()+"】的"+settingName+"费用预算不足,无法提交");
+                    return msg;
+                }
+            }
+        }
+
+
         if (isNew) {
             expenseSheetMapper.insert(sheet);
             if (!isAuditor) {

+ 19 - 19
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskGroupServiceImpl.java

@@ -110,7 +110,7 @@ public class TaskGroupServiceImpl extends ServiceImpl<TaskGroupMapper, TaskGroup
                             .orderByAsc("seq"));
             if (gtemplateTaskList.size() > 0) {
                 List<Task> taskList = new ArrayList<>();
-                List<TaskExecutor> taskExecutorList = new ArrayList<>();
+//                List<TaskExecutor> taskExecutorList = new ArrayList<>();
                 gtemplateTaskList.forEach(gt->{
                     Task task = gt.toTask();
                     task.setProjectId(projectId);
@@ -121,28 +121,28 @@ public class TaskGroupServiceImpl extends ServiceImpl<TaskGroupMapper, TaskGroup
                     task.setCreaterId(user.getId());
                     task.setCreaterName(user.getName());
                     task.setCreatorColor(user.getColor());
-                    if(task.getTaskType()==1 && inchargerUser != null){
-                        task.setExecutorId(inchargerUser.getId());
-                        task.setExecutorName(inchargerUser.getName());
-                        task.setExecutorColor(inchargerUser.getColor());
-                    }
+//                    if(task.getTaskType()==1 && inchargerUser != null){
+//                        task.setExecutorId(inchargerUser.getId());
+//                        task.setExecutorName(inchargerUser.getName());
+//                        task.setExecutorColor(inchargerUser.getColor());
+//                    }
 
                     taskList.add(task);
                 });
                 taskService.saveBatch(taskList);
-                taskList.forEach(tl->{
-                    TaskExecutor taskExecutor=new TaskExecutor();
-                    //当为里程碑任务时
-                    if(tl.getTaskType()==1 && inchargerUser != null){
-                        taskExecutor.setTaskId(tl.getId());
-                        taskExecutor.setExecutorId(inchargerUser.getId());
-                        taskExecutor.setExecutorName(inchargerUser.getName());
-                        taskExecutor.setExecutorColor(inchargerUser.getColor());
-                        taskExecutor.setProjectId(projectId);
-                        taskExecutorList.add(taskExecutor);
-                    }
-                });
-                taskExecutorService.saveBatch(taskExecutorList);
+//                taskList.forEach(tl->{
+//                    TaskExecutor taskExecutor=new TaskExecutor();
+//                    //当为里程碑任务时
+//                    if(tl.getTaskType()==1 && inchargerUser != null){
+//                        taskExecutor.setTaskId(tl.getId());
+//                        taskExecutor.setExecutorId(inchargerUser.getId());
+//                        taskExecutor.setExecutorName(inchargerUser.getName());
+//                        taskExecutor.setExecutorColor(inchargerUser.getColor());
+//                        taskExecutor.setProjectId(projectId);
+//                        taskExecutorList.add(taskExecutor);
+//                    }
+//                });
+//                taskExecutorService.saveBatch(taskExecutorList);
             }
         }
 

+ 9 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ExpenseItemMapper.xml

@@ -61,4 +61,13 @@
         and expense_sheet.status = 0
     </select>
 
+    <select id="selectSumAmountByProjectAndType" resultType="java.lang.Double">
+        select IFNULL(sum(expense_item.amount),0)
+        from expense_item
+        left join expense_sheet on expense_sheet.id = expense_item.expense_id
+        where expense_item.project_id = #{projectId}
+        and expense_item.amount is not null
+        and expense_sheet.status &lt;= 1
+        and expense_sheet.type = #{type}
+    </select>
 </mapper>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -336,7 +336,7 @@
                         {{((scope.row.payment==null?0:scope.row.payment) - (scope.row.budget)).toFixed(2)}}
                     </template>
                 </el-table-column>
-                <el-table-column  label="已回款利润率"  width="120" align="right">
+                <el-table-column  label="已回款利润率"  width="120" align="right" v-if="user.company.packageContract==1">
                   <template slot-scope="scope">
                         {{(scope.row.payment==null||scope.row.payment==0)?'-':((scope.row.payment - scope.row.budget)*100/scope.row.payment).toFixed(1)+"%"}}
                     </template>

+ 36 - 40
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -549,7 +549,7 @@
                 <el-input id="editExpenseTypeDataInput" size="medium" v-model="editExpenseTypeData.name" :placeholder="$t('customizethfeetypename')" style="width:90%" @keyup.native="editExpenseTypeDataInput('editExpenseTypeDataInput')"></el-input>
               </el-form-item>
               <el-form-item label="对应成本项" style="margin:30px 0" prop="basecostSettingId">
-                <el-select v-model="editExpenseTypeData.basecostSettingId" size="medium" style="width:90%">
+                <el-select v-model="editExpenseTypeData.basecostSettingId" size="medium" style="width:90%" clearable>
                   <el-option v-for="item in basecostSettingList" :key="item.id" :label="item.name" :value="item.id" :disabled="item.alarmType == 1"></el-option>
                 </el-select>
               </el-form-item>
@@ -1157,7 +1157,6 @@ export default {
       this.displayTable = true;
     },
     present(){
-      this.dialog = false
       this.adds();
     },
     // 删除操作
@@ -1168,9 +1167,8 @@ export default {
       this.kan()
     },
      adds() {
-      // happenDate
-      // console.log(this.ParticularsList.invoiceList, '123')
-      var spl = this.ParticularsList.invoiceList
+      var paramData = JSON.parse(JSON.stringify(this.ParticularsList));
+      var spl = paramData.invoiceList
       for(var i in spl) {
         if(spl[i].pic) {
           if(spl[i].pic[0].name) {
@@ -1178,32 +1176,32 @@ export default {
           }
         } 
       }
-      // console.log(spl)
-      // return
-      this.ParticularsList.items = JSON.stringify(this.ParticularsList.invoiceList)//这里要传发票列表的json转string
+      paramData.items = JSON.stringify(paramData.invoiceList)//这里要传发票列表的json转string
       
-      delete this.ParticularsList.invoiceList
-        this.http.post('/expense-sheet/add', this.ParticularsList,
-        res => {
-            if (res.code == "ok") {
-                this.bills(this.isAuditList);
-                this.$message({
-                message: this.$t('editsuccess'),
-                type: "success"
-                });
-            } else {
-                this.$message({
-                message: res.msg,
-                type: "error"
-                });
-            }
-        },
-        error => {
-            this.$message({
-                message: error,
-                type: "error"
-            });
-        });
+      delete paramData.invoiceList
+      
+      this.http.post('/expense-sheet/add', paramData,
+      res => {
+          if (res.code == "ok") {
+              this.dialog = false;
+              this.bills(this.isAuditList);
+              this.$message({
+              message: this.$t('editsuccess'),
+              type: "success"
+              });
+          } else {
+              this.$message({
+              message: res.msg,
+              type: "error"
+              });
+          }
+      },
+      error => {
+          this.$message({
+              message: error,
+              type: "error"
+          });
+      });
     },
 
     //  获取人员信息
@@ -1288,15 +1286,6 @@ export default {
               }
                 // return
               this.add();
-              this.addForm = {
-                code:null,
-                ownerId:this.user.id,
-                createDate: null,
-                type:this.expenseMainTypeValue, 
-                ticketNum:1,remark:null,totalAmount:0,}
-              this.invoiceList = []
-                  
-              
             }
       });
       
@@ -1402,13 +1391,20 @@ export default {
       // happenDate
       this.addForm.items = JSON.stringify(this.invoiceList)//这里要传发票列表的json转string
       this.addForm.totalAmount = this.totalCost
-        this.http.post('/expense-sheet/add', this.addForm,
+      this.http.post('/expense-sheet/add', this.addForm,
         res => {
             if (res.code == "ok") {
                 this.$message({
                 message: this.$t('message.fillinsuccessfully'),
                 type: "success"
                 });
+                this.addForm = {
+                code:null,
+                ownerId:this.user.id,
+                createDate: null,
+                type:this.expenseMainTypeValue, 
+                ticketNum:1,remark:null,totalAmount:0,}
+                this.invoiceList = []
                 this.getNextCode()
             } else {
                 this.$message({

+ 2 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue

@@ -304,10 +304,9 @@
                 <el-link v-if="user.timeType.financeAudit == '0'"
                 style="float:left;"
                     type="primary" :underline="false" @click="xzjl(),xzImportVisible = true">{{ $t('Viewtheimporthistory') }}</el-link>
-            
                 <el-upload ref="upload" action="#" :limit="1" :http-request="importFinance" :show-file-list="false" >
-                        <el-button type="primary" style="width:100%;" :loading="isUploading" >{{ $t('Selectthefilendstartimporting') }}</el-button>
-                    </el-upload>
+                    <el-button type="primary" style="width:100%;" :loading="isUploading" >{{ $t('Selectthefilendstartimporting') }}</el-button>
+                </el-upload>
             </div>
         </el-dialog>