Explorar o código

车间管家报工加锁,防止快速点击两次造成重复报工

seyason hai 1 ano
pai
achega
aa1340e4a4

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ReportService.java

@@ -113,7 +113,7 @@ public interface ReportService extends IService<Report> {
 //
 //    HttpRespMsg batchApproveByDate(String startDate, String endDate, HttpServletRequest request);
 
-    HttpRespMsg submitReport(Report report, HttpServletRequest request);
+    HttpRespMsg  submitReport(Report report, HttpServletRequest request);
 
     HttpRespMsg getChekerList(Integer checkType, Integer deptId);
 

+ 2 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -135,7 +135,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     private String path;
 
     @Override
-    public HttpRespMsg submitReport(Report report, HttpServletRequest request) {
+    public synchronized HttpRespMsg submitReport(Report report, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
@@ -160,7 +160,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
         }
 
-        //检查今日该员工的该工序是否已经有报工
+        //检查当天该员工的该工序是否已经有报工
         Report todayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).eq("create_date", targetDate));
         //计算工作时长
         ProdProcedureTeam prodProcedureTeam = prodProcedureTeamMapper.selectById(report.getUserProcedureTeamId());

+ 3 - 1
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/fillReport.vue

@@ -191,6 +191,7 @@ export default {
       this.submitData();
     },
     submitData() {
+      this.saving = true;
       let postData = {
         userProcedureTeamId: this.reportForm.id,
         prodProcedureId: this.reportForm.prod_procedure_id,
@@ -211,13 +212,14 @@ export default {
         if (this.reportForm.check_type != 0) {
           if (this.reportForm.checker_id == null) {
             this.$toast.fail('请选择检验人')
+            this.saving = false;
             return;
           } else {
             postData.checkerId = this.reportForm.checker_id;
           }
         }
       }
-      this.saving = true;
+      
       this.$axios.post("/report/submitReport", postData)
         .then(res => {
           this.saving = false;

+ 14 - 9
fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue

@@ -98,7 +98,7 @@
                 </el-radio-group>
                 
                 <el-table :data="reviewLis" style="width: 100%" :height="400">
-                    <el-table-column prop="userName" :label="$t('other.operator')">
+                    <el-table-column prop="userName" :label="$t('other.operator')" width="100">
                         <template slot-scope="scope">
                             <div>
                                 <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName' :openid='scope.row.userName'></ww-open-data></span>
@@ -106,8 +106,8 @@
                             </div>
                         </template>
                     </el-table-column>
-                    <el-table-column prop="ymonth" :label="$t('BelongsIn')"></el-table-column>
-                    <el-table-column prop="fileName" :label="$t('filename')">
+                    <el-table-column prop="ymonth" :label="$t('BelongsIn')" width="100"></el-table-column>
+                    <el-table-column prop="fileName" :label="$t('filename')"  >
                         <template slot-scope="scope">
                             <div>
                                 <el-link type="primary" @click="downloadByA({name:scope.row.fileName,url:scope.row.serverName})"> {{scope.row.fileName}}</el-link>
@@ -128,13 +128,13 @@
                             </div>
                         </template>
                     </el-table-column>
-                    <el-table-column prop="indate" :label="$t('Uploadtime')"></el-table-column>
-                    <el-table-column prop="date" :label="$t('operation')" v-if="(tabPosition == 1 || tabPosition == 0) && (reviewerRuleForm.auditorId == user.id)">
+                    <el-table-column prop="indate" :label="$t('Uploadtime')" width="150"></el-table-column>
+                    <el-table-column prop="date" :label="$t('operation')" v-if="(tabPosition == 1 || tabPosition == 0) && (reviewerRuleForm.auditorId == user.id)" :width="tabPosition==0?210:120">
                         <template slot-scope="scope">
                             <div>
-                                <el-button type="primary" size="small" v-if="tabPosition == 0" @click="operationList(0, scope.row.id)">{{ $t('btn.through') }}</el-button>
-                                <el-button type="warning" size="small" v-if="tabPosition == 0" @click="operationList(1, scope.row.id)">{{ $t('btn.rejected') }}</el-button>
-                                <el-button type="warning" size="small" v-if="tabPosition == 1" @click="operationList(2, scope.row.id)">{{ $t('btn.undo') }}</el-button>
+                                <el-button type="primary" size="small" :loading="operating" v-if="tabPosition == 0" @click="operationList(0, scope.row.id)">{{ $t('btn.through') }}</el-button>
+                                <el-button type="warning" size="small" :loading="operating" v-if="tabPosition == 0" @click="operationList(1, scope.row.id)">{{ $t('btn.rejected') }}</el-button>
+                                <el-button type="warning" size="small" :loading="operating" v-if="tabPosition == 1" @click="operationList(2, scope.row.id)">{{ $t('btn.undo') }}</el-button>
                             </div>
                         </template>
                     </el-table-column>
@@ -593,6 +593,7 @@ import { error } from 'dingtalk-jsapi';
         },
         data() {
             return {
+                operating: false,
                 showMissingDialog: false,
                 missingFinanceUserList: [],
                 groupByCategory:0,
@@ -1627,6 +1628,7 @@ import { error } from 'dingtalk-jsapi';
             },
             // 审核操作
             operationList(zhi, id) {
+                if (this.operating) return;
                 let urls
                 if(zhi == 0) {
                     urls = '/finance-import/agree'
@@ -1635,16 +1637,19 @@ import { error } from 'dingtalk-jsapi';
                 } else {
                     urls = '/finance-import/cancel'
                 }
+                this.operating = true;
                 this.http.post(urls, {
                     id: id,
                 },
                 res => {
                     if (res.code == "ok") {
+                        this.operating = false;
                        this.$message({
                             message: this.$t('operationissuccessful'),
                             type: "success"
                         });
-                        this.getReviewList()
+                        this.getReviewList();
+                        this.loadMonthData();
                     } else {
                         this.$message({
                             message: res.msg,

+ 6 - 3
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -278,7 +278,7 @@
                         </template>
                     </van-field>
                     <van-field v-if="user.company.packageProject == 1" readonly name="taskId" :value="item.taskName"
-                        :rules="[{ required: user.companyId == 3092 ? true : false, message: '请选择任务/里程碑' }]" label="任务/里程碑"
+                        :rules="[{ required: reportTimeType.taskRequired? true : false, message: '请选择任务/里程碑' }]" label="任务/里程碑"
                         placeholder="请选择任务/里程碑" @click="clickPickerTask(index, item)"></van-field>
                     <van-field v-if="user.companyId == 3092" readonly name="sapServiceId" :value="item.sapServiceName"
                         :rules="[{ required: true, message: '请选择服务' }]" label="服务" placeholder="请选择服务"
@@ -2283,7 +2283,6 @@ export default {
                 if (this.user.timeType.customDegreeActive == 1) {
                     let customDegreeMultiple = this.user.timeType.customDegreeMultiple
                     if (this.form.domains[i].degreeId) {
-                        // formData.append("degreeId", this.form.domains[i].degreeId);
                         if(!customDegreeMultiple) { // 单选
                             formData.append("degreeId", this.form.domains[i].degreeId);
                         } else {
@@ -2295,7 +2294,11 @@ export default {
                             this.$toast.fail('请选择' + this.user.timeType.customDegreeName)
                             return
                         } else {
-                            formData.append("degreeId", !customDegreeMultiple ? -1 : "[]");
+                            if (!customDegreeMultiple) {
+                                formData.append("degreeId", -1);
+                            } else {
+                                formData.append("multiDegrId", '[]');
+                            }
                         }
                     }
                 } else {