lsw преди 1 година
родител
ревизия
a4e01a3a46
променени са 20 файла, в които са добавени 1054 реда и са изтрити 95 реда
  1. 46 0
      admin-ui/src/assets/styles/extend.scss
  2. 0 45
      admin-ui/src/views/work/money/index.vue
  3. 21 11
      admin-ui/src/views/work/platform/index.vue
  4. 134 0
      admin-ui/src/views/work/statement/audit/index.vue
  5. 96 0
      admin-ui/src/views/work/statement/audit/record.vue
  6. 111 0
      admin-ui/src/views/work/statement/give/index.vue
  7. 96 0
      admin-ui/src/views/work/statement/give/record.vue
  8. 79 0
      admin-ui/src/views/work/statement/give/send.vue
  9. 13 5
      admin-ui/src/views/work/statement/make/index.vue
  10. 1 3
      admin-ui/src/views/work/statement/make/record.vue
  11. 123 0
      admin-ui/src/views/work/statement/manage/index.vue
  12. 96 0
      admin-ui/src/views/work/statement/manage/record.vue
  13. 69 9
      ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/StatementController.java
  14. 8 3
      ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Platform.java
  15. 7 1
      ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Statement.java
  16. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/StatementDetailMapper.java
  17. 5 2
      ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/StatementMapper.java
  18. 37 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IStatementService.java
  19. 75 1
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/StatementServiceImpl.java
  20. 36 14
      ruoyi-admin/src/main/resources/mapper/work/StatementMapper.xml

+ 46 - 0
admin-ui/src/assets/styles/extend.scss

@@ -353,3 +353,49 @@
   color: #1890ff;
   cursor: pointer;
 }
+.el-button--mini {
+  font-size: 13px !important;
+}
+.cards {
+  border-radius: 10px;
+  border: 1px solid #1890ff;
+  padding: 20px;
+  .ctop {
+    .icon {
+      font-size: 20px;
+      padding-right: 5px;
+    }
+    .ctitle {
+      font-size: 16px;
+    }
+    .ckk {
+      color: #1890ff;
+      cursor: pointer;
+      padding-left: 10px;
+      font-size: 13px;
+    }
+    .rz {
+      float: right;
+      width: 80px;
+    }
+    .qr {
+      float: right;
+      margin-top: 3px;
+      font-size: 23px;
+      margin-right: 10px;
+      cursor: pointer;
+    }
+  }
+  .desc {
+    color: #8c8c8c;
+    padding-top: 20px;
+  }
+  .money {
+    padding-top: 20px;
+    font-size: 32px;
+    color: #1890ff;
+  }
+  .btm {
+    padding-top: 20px;
+  }
+}

+ 0 - 45
admin-ui/src/views/work/money/index.vue

@@ -72,48 +72,3 @@ export default {
   }
 };
 </script>
-<style lang="scss" scoped>
-.cards {
-  border-radius: 10px;
-  border: 1px solid #1890ff;
-  padding: 20px;
-  .ctop {
-    .icon {
-      font-size: 20px;
-      padding-right: 5px;
-    }
-    .ctitle {
-      font-size: 16px;
-    }
-    .ckk {
-      color: #1890ff;
-      cursor: pointer;
-      padding-left: 10px;
-      font-size: 13px;
-    }
-    .rz {
-      float: right;
-      width: 80px;
-    }
-    .qr {
-      float: right;
-      margin-top: 3px;
-      font-size: 23px;
-      margin-right: 10px;
-      cursor: pointer;
-    }
-  }
-  .desc {
-    color: #8c8c8c;
-    padding-top: 20px;
-  }
-  .money {
-    padding-top: 20px;
-    font-size: 32px;
-    color: #1890ff;
-  }
-  .btm {
-    padding-top: 20px;
-  }
-}
-</style>

+ 21 - 11
admin-ui/src/views/work/platform/index.vue

@@ -1,12 +1,12 @@
 <template>
   <div class="app-container">
     <div class="cmain">
-      <div class="bos">
-        <div class="lab">
-          <div class="bsg"></div>
-          <div class="tit">企业充值信息</div>
-        </div>
-        <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <div class="bos">
+          <div class="lab">
+            <div class="bsg"></div>
+            <div class="tit">企业充值信息</div>
+          </div>
           <el-form-item label="服务公司" prop="serviceCompany">
             <el-input v-model="form.serviceCompany" placeholder="请输入服务公司" clearable />
           </el-form-item>
@@ -16,11 +16,20 @@
           <el-form-item label="银行卡号" prop="bankAccount">
             <el-input v-model="form.bankAccount" placeholder="请输入银行卡号" clearable />
           </el-form-item>
-        </el-form>
-        <div class="mfooter">
-          <el-button type="primary" @click="submitForm">确 定</el-button>
-          <el-button @click="$layer.close(layerid)">取 消</el-button>
         </div>
+        <div class="bos">
+          <div class="lab">
+            <div class="bsg"></div>
+            <div class="tit">结算信息</div>
+          </div>
+          <el-form-item label="综合服务费率" prop="rate">
+            <el-input type="number" v-model="form.rate" placeholder="请输入综合服务费率" clearable><template slot="append">%</template></el-input>
+          </el-form-item>
+        </div>
+      </el-form>
+      <div class="mfooter">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="$layer.close(layerid)">取 消</el-button>
       </div>
     </div>
   </div>
@@ -34,7 +43,8 @@ export default {
       rules: {
         serviceCompany: [{ required: true, message: '服务公司不能为空', trigger: 'blur' }],
         bankName: [{ required: true, message: '开户行不能为空', trigger: 'blur' }],
-        bankAccount: [{ required: true, message: '银行卡号不能为空', trigger: 'blur' }]
+        bankAccount: [{ required: true, message: '银行卡号不能为空', trigger: 'blur' }],
+        rate: [{ required: true, message: '综合服务费率不能为空', trigger: 'blur' }],
       }
     };
   },

+ 134 - 0
admin-ui/src/views/work/statement/audit/index.vue

@@ -0,0 +1,134 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="结算单号" prop="num">
+        <el-input v-model="queryParams.num" placeholder="请输入结算单号" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item label="结算批次" prop="batchName">
+        <el-input v-model="queryParams.batchName" placeholder="请输入结算批次" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item label="关联项目" prop="projectId">
+        <el-select v-model="queryParams.projectId" placeholder="请选择关联项目" class="se" clearable>
+          <el-option v-for="dict in projectList" :key="dict.projectName" :label="dict.projectName" :value="dict.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="审核状态" prop="audit">
+        <el-select v-model="queryParams.audit" placeholder="充值状态" class="se" clearable>
+          <el-option value="1" label="待审核"></el-option>
+          <el-option value="2" label="审核通过"></el-option>
+          <el-option value="3" label="审核驳回"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 235px)">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号" align="center" width="80" />
+      <el-table-column label="结算单号" align="center" prop="num" width="160" />
+      <el-table-column label="结算批次" align="center" prop="batchName" />
+      <el-table-column label="服务公司" align="center" width="150">
+        <template slot-scope="scope">
+          <div class="omit" :title="scope.row.serviceCompany">{{ scope.row.serviceCompany }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column label="关联项目" align="center" prop="projectName" />
+      <el-table-column label="审核状态" align="center" width="110">
+        <template slot-scope="scope">
+          <el-tag type="info" v-if="scope.row.audit == 0">待提交</el-tag>
+          <el-tag type="danger" v-if="scope.row.audit == 1">待审核</el-tag>
+          <el-tag type="success" v-if="scope.row.audit == 2">审核通过</el-tag>
+          <el-popover placement="top-start" v-if="scope.row.audit == 3" title="原因" width="200" trigger="hover" :content="scope.row.msg">
+            <div slot="reference">
+              <el-tag type="info">审核驳回</el-tag>
+              <i class="el-icon-warning"></i>
+            </div>
+          </el-popover>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建人" align="center" prop="opBy" width="110" />
+      <el-table-column label="创建日期" align="center" prop="createTime" width="160" />
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)">详情</el-button>
+          <el-button size="mini" type="text" icon="el-icon-check" @click="op('success', scope.row)" v-if="scope.row.audit === 1">同意</el-button>
+          <el-button size="mini" type="text" icon="el-icon-close" @click="op('submit', scope.row)" v-if="scope.row.audit === 1">驳回</el-button>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+
+<script>
+import record from './record';
+export default {
+  data() {
+    return {
+      ids: [],
+      projectList: [],
+      showSearch: true,
+      response: {},
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        batchName: null,
+        audit: null,
+        projectId: null,
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.ajax({ url: '/work/project/selectAll' }).then((response) => {
+      this.projectList = response.data;
+    });
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/statement/audit', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.handleQuery();
+    },
+    selects(rows) {
+      this.ids = rows.map((item) => item.id);
+    },
+    op(tag, row) {
+      const id = row.id || this.ids[0];
+      if (tag == 'detail') {
+        this.iframe({ obj: record, param: { id: id, detail: true }, title: '查看详情', width: '75%', height: '65%' });
+      }
+      if (tag == 'success') {
+        this.$confirm('是否确认审核通过?', '警告', { type: 'warning' }).then(() => {
+          this.ajax({ url: '/work/statement/audit/success/' + id, data: { id: id } }).then((response) => {
+            this.$modal.msgSuccess('审核成功');
+            this.getList();
+          });
+        });
+      }
+      if (tag == 'cancel') {
+        this.$confirm('是否撤销审核?', '警告', { type: 'warning' }).then(() => {
+          this.ajax({ url: '/work/statement/manage/cancel/' + id, data: { id: id } }).then((response) => {
+            this.$modal.msgSuccess('撤销成功');
+            this.getList();
+          });
+        });
+      }
+    }
+  }
+};
+</script>

+ 96 - 0
admin-ui/src/views/work/statement/audit/record.vue

@@ -0,0 +1,96 @@
+<template>
+  <div class="cmain">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="姓名" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入姓名" @keyup.enter.native="handleQuery" class="inp" clearable />
+      </el-form-item>
+      <el-form-item label="手机号" prop="phone">
+        <el-input v-model="queryParams.phone" placeholder="请输入手机号" @keyup.enter.native="handleQuery" class="inp" clearable />
+      </el-form-item>
+      <el-form-item label="身份证号" prop="idCard">
+        <el-input v-model="queryParams.idCard" placeholder="请输入身份证号" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table :data="response.rows" border>
+      <el-table-column type="index" label="序号" align="center" width="80" />
+      <el-table-column label="姓名" align="center" prop="name" width="100" />
+      <el-table-column label="身份证号" align="center" prop="idCard" width="170" />
+      <el-table-column label="手机号" align="center" prop="phone" width="150" />
+      <el-table-column label="支付宝账户" align="center" prop="alipay" width="130" />
+      <el-table-column label="流水号" align="center" prop="num" width="170" />
+      <el-table-column label="结算金额(元)" align="center" prop="money" width="120" />
+      <el-table-column label="发放业务费(元)" align="center" prop="realMoney" width="120" />
+      <el-table-column label="综合服务费(元)" align="center" prop="serviceMoney" width="120" />
+      <el-table-column label="结算单状态" align="center">
+        <template slot-scope="scope">
+          <span v-if="scope.row.state == 0">待发放</span>
+          <span v-if="scope.row.state == 1">已发放</span>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      ids: [],
+      showSearch: true,
+      response: {},
+      dateRange: [],
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        phone: null,
+        idCard: null,
+        orderByColumn: 'id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  props: {
+    param: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    layerid: {
+      type: String
+    }
+  },
+  created() {
+    this.queryParams.statementId = this.param.id;
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/statement/detailList', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.dateRange = [];
+      this.handleQuery();
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('/work/recharge/export', { ...this.queryParams }, '充值明细.xlsx');
+    }
+  }
+};
+</script>

+ 111 - 0
admin-ui/src/views/work/statement/give/index.vue

@@ -0,0 +1,111 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent>
+      <el-form-item label="结算单号" prop="num">
+        <el-input v-model="queryParams.num" placeholder="请输入结算单号" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item label="结算批次" prop="batchName">
+        <el-input v-model="queryParams.batchName" placeholder="请输入结算批次" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item label="关联项目" prop="projectId">
+        <el-select v-model="queryParams.projectId" placeholder="请选择关联项目" class="se" clearable>
+          <el-option v-for="dict in projectList" :key="dict.projectName" :label="dict.projectName" :value="dict.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="审核状态" prop="audit">
+        <el-select v-model="queryParams.audit" placeholder="充值状态" class="se" clearable>
+          <el-option value="1" label="待审核"></el-option>
+          <el-option value="2" label="审核通过"></el-option>
+          <el-option value="3" label="审核驳回"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 235px)">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号" align="center" width="80" />
+      <el-table-column label="结算单号" align="center" prop="num" width="160" />
+      <el-table-column label="结算批次" align="center" prop="batchName" />
+      <el-table-column label="服务公司" align="center" width="150">
+        <template slot-scope="scope">
+          <div class="omit" :title="scope.row.serviceCompany">{{ scope.row.serviceCompany }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column label="关联项目" align="center" prop="projectName" />
+      <el-table-column label="发放状态" align="center" width="110">
+        <template slot-scope="scope">
+          <el-tag type="info" v-if="scope.row.give == 0">待发放</el-tag>
+          <el-tag type="success" v-if="scope.row.give == 1">已发放</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建人" align="center" prop="opBy" width="110" />
+      <el-table-column label="创建日期" align="center" prop="createTime" width="160" />
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)">详情</el-button>
+          <el-button size="mini" type="text" icon="el-icon-s-promotion" @click="op('send', scope.row)" v-if="scope.row.give === 0">发放</el-button>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+
+<script>
+import record from './record';
+import send from './send';
+export default {
+  data() {
+    return {
+      projectList: [],
+      response: {},
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        batchName: null,
+        num: null,
+        projectId: null,
+        give: null,
+        orderByColumn: 's.id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.ajax({ url: '/work/project/selectAll' }).then((response) => {
+      this.projectList = response.data;
+    });
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/statement/give', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.handleQuery();
+    },
+    op(tag, row) {
+      const id = row.id || this.ids[0];
+      if (tag == 'detail') {
+        this.iframe({ obj: record, param: { id: id, detail: true }, title: '查看详情', width: '75%', height: '65%' });
+      }
+      if (tag == 'send') {
+        this.iframe({ obj: send, param: { id: id}, title: '薪资发放', width: '55%', height: '60%' });
+      }
+    }
+  }
+};
+</script>

+ 96 - 0
admin-ui/src/views/work/statement/give/record.vue

@@ -0,0 +1,96 @@
+<template>
+  <div class="cmain">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="姓名" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入姓名" @keyup.enter.native="handleQuery" class="inp" clearable />
+      </el-form-item>
+      <el-form-item label="手机号" prop="phone">
+        <el-input v-model="queryParams.phone" placeholder="请输入手机号" @keyup.enter.native="handleQuery" class="inp" clearable />
+      </el-form-item>
+      <el-form-item label="身份证号" prop="idCard">
+        <el-input v-model="queryParams.idCard" placeholder="请输入身份证号" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table :data="response.rows" border>
+      <el-table-column type="index" label="序号" align="center" width="80" />
+      <el-table-column label="姓名" align="center" prop="name" width="100" />
+      <el-table-column label="身份证号" align="center" prop="idCard" width="170" />
+      <el-table-column label="手机号" align="center" prop="phone" width="150" />
+      <el-table-column label="支付宝账户" align="center" prop="alipay" width="130" />
+      <el-table-column label="流水号" align="center" prop="num" width="170" />
+      <el-table-column label="结算金额(元)" align="center" prop="money" width="120" />
+      <el-table-column label="发放业务费(元)" align="center" prop="realMoney" width="120" />
+      <el-table-column label="综合服务费(元)" align="center" prop="serviceMoney" width="120" />
+      <el-table-column label="结算单状态" align="center">
+        <template slot-scope="scope">
+          <span v-if="scope.row.state == 0">待发放</span>
+          <span v-if="scope.row.state == 1">已发放</span>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      ids: [],
+      showSearch: true,
+      response: {},
+      dateRange: [],
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        phone: null,
+        idCard: null,
+        orderByColumn: 'id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  props: {
+    param: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    layerid: {
+      type: String
+    }
+  },
+  created() {
+    this.queryParams.statementId = this.param.id;
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/statement/detailList', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.dateRange = [];
+      this.handleQuery();
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('/work/recharge/export', { ...this.queryParams }, '充值明细.xlsx');
+    }
+  }
+};
+</script>

+ 79 - 0
admin-ui/src/views/work/statement/give/send.vue

@@ -0,0 +1,79 @@
+<template>
+  <div class="cmain">
+    <div class="cards">
+      <div class="ctop">
+        <span class="icon">&#xe646;</span>
+        <span class="ctitle">{{ company.companyName }}</span>
+        <span class="ckk" @click="op('info')">查看</span>
+        <img :src="rz" class="rz" />
+        <span class="icon qr" title="点击查看企业二维码" @click="op('qr')">&#xe643;</span>
+      </div>
+      <div class="desc">账户余额(元)</div>
+      <div class="money">{{ company.money }}</div>
+    </div>
+    <el-table :data="response.rows" border>
+      <el-table-column label="结算单号" align="center" prop="name" width="100" />
+      <el-table-column label="应发人数" align="center" prop="idCard" width="170" />
+      <el-table-column label="应结算金额(元)" align="center" prop="idCard" width="170" />
+    </el-table>
+    <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+      <el-form-item label="充值金额" prop="money">
+        <el-input type="number" v-model="form.money" placeholder="请输入充值金额" clearable />
+      </el-form-item>
+      <el-form-item label="充值凭证" prop="certificate">
+        <ImageUpload v-model="form.certificate" :isShowTip="false" :limit="1"></ImageUpload>
+        <span class="tips">例如:付款或者转账截图</span>
+      </el-form-item>
+    </el-form>
+    <div class="mfooter">
+      <el-button type="primary" @click="submitForm">确 定</el-button>
+      <el-button @click="$layer.close(layerid)">取 消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import rz from '@/assets/images/rz.png';
+export default {
+  data() {
+    return {
+      rz: rz,
+      company: {},
+      form: {},
+      rules: {
+        money: [{ required: true, message: '充值金额不能为空', trigger: 'blur' }],
+        certificate: [{ required: true, message: '充值凭证不能为空', trigger: 'blur' }]
+      }
+    };
+  },
+  props: {
+    param: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    layerid: {
+      type: String
+    }
+  },
+  mounted() {
+    this.ajax({ url: '/work/company/index' }).then((response) => {
+      this.company = response.data;
+    });
+  },
+  methods: {
+    submitForm() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.ajax({ method: 'post', url: '/work/recharge/add', data: this.form }).then((response) => {
+            this.$modal.msgSuccess('提交成功');
+            this.$layer.close(this.layerid);
+            this.$parent.getList();
+          });
+        }
+      });
+    }
+  }
+};
+</script>

+ 13 - 5
admin-ui/src/views/work/statement/make/index.vue

@@ -26,16 +26,16 @@
       <el-table-column label="上传文档名称" align="center" prop="fileName" />
       <el-table-column label="结算批次" align="center" prop="batchName" />
       <el-table-column label="关联项目" align="center" prop="projectName" />
-      <el-table-column label="发放金额" align="center" prop="money" width="130" />
+      <el-table-column label="发放金额(元)" align="center" prop="money" width="130" />
       <el-table-column label="发放人数" align="center" prop="peoples" width="130" />
       <el-table-column label="创建人" align="center" prop="opBy" width="130" />
       <el-table-column label="创建日期" align="center" prop="createTime" />
       <el-table-column label="操作" align="center" width="250">
         <template slot-scope="scope">
           <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)" v-hasPermi="['work:statement:list']">详情</el-button>
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:statement:edit']">生成结算单</el-button>
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:statement:edit']">修改</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:statement:remove']">删除</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('generate', scope.row)" v-hasPermi="['work:statement:edit']" v-if="scope.row.state === 0">生成结算单</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:statement:edit']" v-if="scope.row.state === 0">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:statement:remove']" v-if="scope.row.state === 0">删除</el-button>
         </template>
       </el-table-column>
       <template slot="empty">
@@ -95,11 +95,19 @@ export default {
       }
       const id = row.id || this.ids[0];
       if (tag == 'detail') {
-        this.iframe({ obj: record, param: { id: id, detail: true }, title: '查看详情', width: '60%', height: '65%' });
+        this.iframe({ obj: record, param: { id: id, detail: true }, title: '查看结算单明细', width: '65%', height: '65%' });
       }
       if (tag == 'edit') {
         this.iframe({ obj: edit, param: { id: id }, title: '编辑', width: '50%', height: '50%' });
       }
+      if (tag == 'generate') {
+        this.$confirm('是否确认生成结算单?', '警告', { type: 'warning' }).then(() => {
+          this.ajax({ url: '/work/statement/generate/' + id }).then((response) => {
+            this.$modal.msgSuccess('生成成功');
+            this.getList();
+          });
+        });
+      }
     },
     del(row) {
       this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {

+ 1 - 3
admin-ui/src/views/work/statement/make/record.vue

@@ -23,9 +23,7 @@
       <el-table-column label="支付宝账户" align="center" prop="alipay" />
       <el-table-column label="结算金额(元)" align="center" prop="money" width="130" />
       <el-table-column label="结算单状态" align="center" width="130">
-        <template slot-scope="scope">
-          <el-tag type="success">信息正确</el-tag>
-        </template>
+        <template slot-scope="scope">信息正确</template>
       </el-table-column>
       <template slot="empty">
         <el-empty></el-empty>

+ 123 - 0
admin-ui/src/views/work/statement/manage/index.vue

@@ -0,0 +1,123 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="结算批次" prop="batchName">
+        <el-input v-model="queryParams.batchName" placeholder="请输入结算批次" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item label="关联项目" prop="projectId">
+        <el-select v-model="queryParams.projectId" placeholder="请选择关联项目" class="se" clearable>
+          <el-option v-for="dict in projectList" :key="dict.projectName" :label="dict.projectName" :value="dict.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 235px)">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号" align="center" width="80" />
+      <el-table-column label="结算单号" align="center" prop="num" width="160" />
+      <el-table-column label="结算批次" align="center" prop="batchName" />
+      <el-table-column label="服务公司" align="center" width="150">
+        <template slot-scope="scope">
+          <div class="omit" :title="scope.row.serviceCompany">{{ scope.row.serviceCompany }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column label="关联项目" align="center" prop="projectName" />
+      <el-table-column label="审核状态" align="center" width="110">
+        <template slot-scope="scope">
+          <el-tag type="info" v-if="scope.row.audit == 0">待提交</el-tag>
+          <el-tag type="danger" v-if="scope.row.audit == 1">待审核</el-tag>
+          <el-tag type="success" v-if="scope.row.audit == 2">审核通过</el-tag>
+          <el-popover placement="top-start" v-if="scope.row.audit == 3" title="原因" width="200" trigger="hover" :content="scope.row.msg">
+            <div slot="reference">
+              <el-tag type="info">驳回</el-tag>
+              <i class="el-icon-warning"></i>
+            </div>
+          </el-popover>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建人" align="center" prop="opBy" width="110" />
+      <el-table-column label="创建日期" align="center" prop="createTime" width="160" />
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)" v-hasPermi="['work:statement:manage']">详情</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('submit', scope.row)" v-hasPermi="['work:statement:manage']" v-if="scope.row.audit === 0">提交审核</el-button>
+          <el-button size="mini" type="text" icon="el-icon-circle-close" @click="op('cancel', scope.row)" v-hasPermi="['work:statement:manage']" v-if="scope.row.audit === 1">撤回</el-button>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+
+<script>
+import record from './record';
+export default {
+  data() {
+    return {
+      ids: [],
+      projectList: [],
+      showSearch: true,
+      response: {},
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        batchName: null,
+        projectId: null,
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.ajax({ url: '/work/project/selectAll' }).then((response) => {
+      this.projectList = response.data;
+    });
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/statement/manage', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.handleQuery();
+    },
+    selects(rows) {
+      this.ids = rows.map((item) => item.id);
+    },
+    op(tag, row) {
+      const id = row.id || this.ids[0];
+      if (tag == 'detail') {
+        this.iframe({ obj: record, param: { id: id, detail: true }, title: '查看详情', width: '75%', height: '65%' });
+      }
+      if (tag == 'submit') {
+        this.$confirm('是否提交审核?', '警告', { type: 'warning' }).then(() => {
+          this.ajax({ url: '/work/statement/manage/submit/' + id, data: { id: id } }).then((response) => {
+            this.$modal.msgSuccess('提交成功');
+            this.getList();
+          });
+        });
+      }
+      if (tag == 'cancel') {
+        this.$confirm('是否撤销审核?', '警告', { type: 'warning' }).then(() => {
+          this.ajax({ url: '/work/statement/manage/cancel/' + id, data: { id: id } }).then((response) => {
+            this.$modal.msgSuccess('撤销成功');
+            this.getList();
+          });
+        });
+      }
+    }
+  }
+};
+</script>

+ 96 - 0
admin-ui/src/views/work/statement/manage/record.vue

@@ -0,0 +1,96 @@
+<template>
+  <div class="cmain">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="姓名" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入姓名" @keyup.enter.native="handleQuery" class="inp" clearable />
+      </el-form-item>
+      <el-form-item label="手机号" prop="phone">
+        <el-input v-model="queryParams.phone" placeholder="请输入手机号" @keyup.enter.native="handleQuery" class="inp" clearable />
+      </el-form-item>
+      <el-form-item label="身份证号" prop="idCard">
+        <el-input v-model="queryParams.idCard" placeholder="请输入身份证号" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table :data="response.rows" border>
+      <el-table-column type="index" label="序号" align="center" width="80" />
+      <el-table-column label="姓名" align="center" prop="name" width="100" />
+      <el-table-column label="身份证号" align="center" prop="idCard" width="170" />
+      <el-table-column label="手机号" align="center" prop="phone" width="150" />
+      <el-table-column label="支付宝账户" align="center" prop="alipay" width="130" />
+      <el-table-column label="流水号" align="center" prop="num" width="170" />
+      <el-table-column label="结算金额(元)" align="center" prop="money" width="120" />
+      <el-table-column label="发放业务费(元)" align="center" prop="realMoney" width="120" />
+      <el-table-column label="综合服务费(元)" align="center" prop="serviceMoney" width="120" />
+      <el-table-column label="结算单状态" align="center">
+        <template slot-scope="scope">
+          <span v-if="scope.row.state == 0">待发放</span>
+          <span v-if="scope.row.state == 1">已发放</span>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      ids: [],
+      showSearch: true,
+      response: {},
+      dateRange: [],
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        phone: null,
+        idCard: null,
+        orderByColumn: 'id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  props: {
+    param: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    layerid: {
+      type: String
+    }
+  },
+  created() {
+    this.queryParams.statementId = this.param.id;
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/statement/detailList', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.dateRange = [];
+      this.handleQuery();
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('/work/recharge/export', { ...this.queryParams }, '充值明细.xlsx');
+    }
+  }
+};
+</script>

+ 69 - 9
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/StatementController.java

@@ -37,14 +37,75 @@ public class StatementController extends BaseController {
     @PreAuthorize("@ss.hasPermi('work:statement:list')")
     @GetMapping("/list")
     public TableDataInfo list(Statement statement) {
-        if (getLoginUser().getUser().getType() == 1) {
-            statement.setCompanyId(getLoginUser().getUser().getCompanyId());
-        }
+        statement.setCompanyId(getLoginUser().getUser().getCompanyId());
         startPage();
         List<Statement> list = statementService.selectList(statement);
         return getDataTable(list);
     }
 
+    /**
+     * 结算单管理
+     */
+    @PreAuthorize("@ss.hasPermi('work:statement:manage')")
+    @GetMapping("/manage")
+    public TableDataInfo manage(Statement statement) {
+        statement.setState(1);
+        statement.setAudit(null);
+        statement.setGive(null);
+        statement.setCompanyId(getLoginUser().getUser().getCompanyId());
+        startPage();
+        List<Statement> list = statementService.selectList(statement);
+        return getDataTable(list);
+    }
+
+    /**
+     * 结算单审核
+     */
+    @PreAuthorize("@ss.hasPermi('work:statement:audit')")
+    @GetMapping("/audit")
+    public TableDataInfo audit(Statement statement) {
+        statement.setState(1);
+        statement.setCompanyId(getLoginUser().getUser().getCompanyId());
+        startPage();
+        List<Statement> list = statementService.selectAuditList(statement);
+        return getDataTable(list);
+    }
+
+    /**
+     * 发放业务费
+     */
+    @PreAuthorize("@ss.hasPermi('work:statement:give')")
+    @GetMapping("/give")
+    public TableDataInfo give(Statement statement) {
+        statement.setState(1);
+        statement.setAudit(2);
+        statement.setCompanyId(getLoginUser().getUser().getCompanyId());
+        startPage();
+        List<Statement> list = statementService.selectList(statement);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:statement:audit')")
+    @Log(title = "结算单审核通过", businessType = BusinessType.UPDATE)
+    @GetMapping("/audit/success/{id}")
+    public AjaxResult auditSuccess(@PathVariable("id") Long id) {
+        return statementService.auditSuccess(id);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:statement:manage')")
+    @Log(title = "提交结算单审核", businessType = BusinessType.UPDATE)
+    @GetMapping("/manage/submit/{id}")
+    public AjaxResult manageSubmit(@PathVariable("id") Long id) {
+        return statementService.manageSubmit(id);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:statement:manage')")
+    @Log(title = "撤回结算单审核", businessType = BusinessType.UPDATE)
+    @GetMapping("/manage/cancel/{id}")
+    public AjaxResult manageCancel(@PathVariable("id") Long id) {
+        return statementService.manageCancel(id);
+    }
+
     @GetMapping("/detailList")
     public TableDataInfo detailList(StatementDetail detail) {
         startPage();
@@ -53,7 +114,7 @@ public class StatementController extends BaseController {
     }
 
     @PreAuthorize("@ss.hasPermi('work:statement:add')")
-    @Log(title = "结算单管理", businessType = BusinessType.INSERT)
+    @Log(title = "创建结算单", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     public AjaxResult add(@Validated Statement statement) throws Exception {
         ExcelUtil<StatementDetail> util = new ExcelUtil<StatementDetail>(StatementDetail.class);
@@ -61,11 +122,10 @@ public class StatementController extends BaseController {
         return statementService.add(detailList, statement);
     }
 
-    @Log(title = "结算单管理", businessType = BusinessType.UPDATE)
-    @PostMapping("/generate")
-    public AjaxResult generate(@RequestBody Statement statement) {
-        statement.setState(1);
-        return toAjax(statementService.updateById(statement));
+    @Log(title = "生成结算单", businessType = BusinessType.UPDATE)
+    @GetMapping("/generate/{id}")
+    public AjaxResult generate(@PathVariable("id") Long id) {
+        return statementService.generate(id);
     }
 
 

+ 8 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Platform.java

@@ -1,13 +1,15 @@
 package com.ruoyi.web.work.domain;
 
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
-import lombok.Data;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
 /**
  * @author lsw
  * @date 2024-04-15
@@ -29,6 +31,9 @@ public class Platform{
     @ApiModelProperty(value = "银行卡账号")
     private String bankAccount;
 
+    @ApiModelProperty(value = "综合服务费率")
+    private BigDecimal rate;
+
     @TableField(fill = FieldFill.INSERT)
     private String createBy;
 

+ 7 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Statement.java

@@ -66,7 +66,13 @@ public class Statement{
     @ApiModelProperty(value = "制单状态:0=待生成,1=已生成")
     private Integer state;
 
-    @ApiModelProperty(value = "发放状态:0=待审核,1=已审核,2=驳回")
+    @ApiModelProperty(value = "是否审核:0=待提交审核,1=待审核,2=审核通过,3=驳回")
+    private Integer audit;
+
+    @ApiModelProperty(value = "驳回原因")
+    private String msg;
+
+    @ApiModelProperty(value = "发放状态:0=待发放,1=已发放")
     private Integer give;
 
     @ApiModelProperty(value = "服务公司")

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/StatementDetailMapper.java

@@ -14,6 +14,6 @@ public interface StatementDetailMapper extends BaseMapper<StatementDetail> {
     List<StatementDetail> selectList(StatementDetail statementDetail);
 
 
-    @Select("SELECT * FROM tb_statement_detail WHERE id_card=#{idCard} AND project_id=#{projectId}")
+    @Select("SELECT * FROM tb_statement_detail WHERE id_card=#{idCard} AND statement_id=#{statementId}")
     StatementDetail check(StatementDetail statementDetail);
 }

+ 5 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/StatementMapper.java

@@ -1,8 +1,9 @@
 package com.ruoyi.web.work.mapper;
 
-import java.util.List;
-import com.ruoyi.web.work.domain.Statement;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.web.work.domain.Statement;
+
+import java.util.List;
 
 /**
  * @author lsw
@@ -10,4 +11,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface StatementMapper extends BaseMapper<Statement> {
     List<Statement> selectList(Statement statement);
+
+    List<Statement> selectAuditList(Statement statement);
 }

+ 37 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IStatementService.java

@@ -14,5 +14,42 @@ import java.util.List;
 public interface IStatementService extends IService<Statement> {
     List<Statement> selectList(Statement statement);
 
+    List<Statement> selectAuditList(Statement statement);
+
+    /**
+     * 创建结算单
+     * @param list
+     * @param statement
+     * @return
+     */
     AjaxResult add(List<StatementDetail> list, Statement statement);
+
+    /**
+     * 生成结算单
+     * @param id
+     * @return
+     */
+    AjaxResult generate(Long id);
+
+
+    /**
+     * 提交结算单审核
+     * @param id
+     * @return
+     */
+    AjaxResult manageSubmit(Long id);
+
+    /**
+     * 撤回结算单审核
+     * @param id
+     * @return
+     */
+    AjaxResult manageCancel(Long id);
+
+    /**
+     * 结算单审核通过
+     * @param id
+     * @return
+     */
+    AjaxResult auditSuccess(Long id);
 }

+ 75 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/StatementServiceImpl.java

@@ -49,6 +49,11 @@ public class StatementServiceImpl extends ServiceImpl<StatementMapper, Statement
         return statementMapper.selectList(statement);
     }
 
+    @Override
+    public List<Statement> selectAuditList(Statement statement) {
+        return statementMapper.selectAuditList(statement);
+    }
+
     @Transactional
     @Override
     public AjaxResult add(List<StatementDetail> list, Statement statement) {
@@ -61,6 +66,7 @@ public class StatementServiceImpl extends ServiceImpl<StatementMapper, Statement
         statement.setOpBy(SecurityUtils.getLoginUser().getUser().getNickName());
         statement.setState(0);
         statement.setGive(0);
+        statement.setAudit(0);
         statement.setMoney(BigDecimal.ZERO);
         statement.setServiceCompany(platform.getServiceCompany());
         statement.setFileName(statement.getFile().getOriginalFilename());
@@ -72,6 +78,10 @@ public class StatementServiceImpl extends ServiceImpl<StatementMapper, Statement
             BeanValidators.validateWithException(validator, detail);
             detail.setStatementId(statement.getId());
             detail.setProjectId(statement.getProjectId());
+            detail.setState(0);
+            detail.setNum(StringUtils.generateNumber());
+            detail.setServiceMoney(platform.getRate().divide(new BigDecimal("100")).multiply(detail.getMoney()));
+            detail.setRealMoney(detail.getMoney().subtract(detail.getServiceMoney()));
             StatementDetail check = statementDetailMapper.check(detail);
             if (check != null) {
                 throw new ServiceException("导入失败,身份证为:" + detail.getIdCard() + " 的数据已存在");
@@ -79,9 +89,73 @@ public class StatementServiceImpl extends ServiceImpl<StatementMapper, Statement
             if (!detailService.save(detail)) {
                 throw new ServiceException("导入失败,请联系平台");
             }
-
             successNum++;
         }
         return AjaxResult.success("创建成功!本次导入" + successNum + " 条数据");
     }
+
+    @Override
+    public AjaxResult generate(Long id) {
+        Statement statement = getById(id);
+        if (statement == null || !statement.getCompanyId().equals(SecurityUtils.getLoginUser().getUser().getCompanyId())) {
+            return AjaxResult.error("结算单不存在或非法操作");
+        }
+        if (statement.getState() != 0) {
+            return AjaxResult.error("不可操作");
+        }
+        statement.setState(1);
+        statement.setNum(StringUtils.generateNumber());
+        if (!updateById(statement)) {
+            throw new ServiceException("生成结算单失败,请联系平台");
+        }
+        return AjaxResult.success();
+    }
+
+    @Override
+    public AjaxResult manageSubmit(Long id) {
+        Statement statement = getById(id);
+        if (statement == null || !statement.getCompanyId().equals(SecurityUtils.getLoginUser().getUser().getCompanyId())) {
+            return AjaxResult.error("结算单不存在或非法操作");
+        }
+        if (statement.getAudit() != 0) {
+            return AjaxResult.error("不可操作");
+        }
+        statement.setAudit(1);
+        if (!updateById(statement)) {
+            throw new ServiceException("提交结算单审核失败,请联系平台");
+        }
+        return AjaxResult.success();
+    }
+
+    @Override
+    public AjaxResult manageCancel(Long id) {
+        Statement statement = getById(id);
+        if (statement == null || !statement.getCompanyId().equals(SecurityUtils.getLoginUser().getUser().getCompanyId())) {
+            return AjaxResult.error("结算单不存在或非法操作");
+        }
+        if (statement.getAudit() != 1) {
+            return AjaxResult.error("不可操作");
+        }
+        statement.setAudit(0);
+        if (!updateById(statement)) {
+            throw new ServiceException("撤回结算单审核失败,请联系平台");
+        }
+        return AjaxResult.success();
+    }
+
+    @Override
+    public AjaxResult auditSuccess(Long id) {
+        Statement statement = getById(id);
+        if (statement == null || !statement.getCompanyId().equals(SecurityUtils.getLoginUser().getUser().getCompanyId())) {
+            return AjaxResult.error("结算单不存在或非法操作");
+        }
+        if (statement.getAudit() != 1) {
+            return AjaxResult.error("数据不可操作");
+        }
+        statement.setAudit(2);
+        if (!updateById(statement)) {
+            throw new ServiceException("结算单审核失败,请联系平台");
+        }
+        return AjaxResult.success();
+    }
 }

+ 36 - 14
ruoyi-admin/src/main/resources/mapper/work/StatementMapper.xml

@@ -3,28 +3,50 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.web.work.mapper.StatementMapper">
-    
-    <select id="selectList" resultType="com.ruoyi.web.work.domain.Statement">
+
+    <sql id="selectStatementVo">
         SELECT
-        s.id,
-        s.batch_name,
-        s.create_time,
-        s.op_by,
-        s.file_name,
-        s.state,
-        s.give,
-        ( SELECT COUNT( d.id ) FROM tb_statement_detail d WHERE d.statement_id = s.id ) AS peoples,
-        ( SELECT SUM( d.money ) FROM tb_statement_detail d WHERE d.statement_id = s.id ) AS money,
-        p.project_name
+            s.id,
+            s.num,
+            s.audit,
+            s.batch_name,
+            s.create_time,
+            s.op_by,
+            s.file_name,
+            s.state,
+            s.service_company,
+            s.give,
+            ( SELECT COUNT( d.id ) FROM tb_statement_detail d WHERE d.statement_id = s.id ) AS peoples,
+            ( SELECT SUM( d.money ) FROM tb_statement_detail d WHERE d.statement_id = s.id ) AS money,
+            p.project_name
         FROM
-        tb_statement s
-        LEFT JOIN tb_project p ON p.id = s.project_id
+            tb_statement s
+                LEFT JOIN tb_project p ON p.id = s.project_id
+    </sql>
+    <select id="selectList" resultType="com.ruoyi.web.work.domain.Statement">
+        <include refid="selectStatementVo"/>
         <where>  
             <if test="companyId != null "> and s.company_id = #{companyId}</if>
             <if test="batchName != null  and batchName != ''"> and s.batch_name like concat('%', #{batchName}, '%')</if>
+            <if test="num != null  and num != ''"> and s.num like concat('%', #{num}, '%')</if>
+            <if test="projectId != null "> and s.project_id = #{projectId}</if>
             <if test="state != null "> and s.state = #{state}</if>
+            <if test="audit != null "> and s.audit = #{audit}</if>
             <if test="give != null "> and s.give = #{give}</if>
         </where>
     </select>
+    <!--结算单审核列表-->
+    <select id="selectAuditList" resultType="com.ruoyi.web.work.domain.Statement">
+        <include refid="selectStatementVo"/>
+        <where>
+            <if test="companyId != null "> and s.company_id = #{companyId}</if>
+            <if test="batchName != null  and batchName != ''"> and s.batch_name like concat('%', #{batchName}, '%')</if>
+            <if test="num != null  and num != ''"> and s.num like concat('%', #{num}, '%')</if>
+            <if test="state != null "> and s.state = #{state}</if>
+            <if test="projectId != null "> and s.project_id = #{projectId}</if>
+            <if test="audit == null "> and s.audit <![CDATA[ >= ]]> 1</if>
+            <if test="audit != null "> and s.audit=#{audit} and s.audit <![CDATA[ >= ]]> 1</if>
+        </where>
+    </select>
 
 </mapper>