lsw преди 1 година
родител
ревизия
aca5d40c63

+ 2 - 2
admin-ui/src/assets/styles/ruoyi.scss

@@ -79,7 +79,7 @@ h6 {
 }
 /** 弹出框样式 **/
 .v-modal{
-	z-index: 1502!important;
+	z-index: 1503!important;
 }
 .el-dialog {
   border-radius: 10px !important;
@@ -89,7 +89,7 @@ h6 {
   margin-top: 6vh !important;
 }
 .el-dialog__wrapper{
-	z-index: 1503!important;
+	z-index: 1504!important;
 }
 .el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body {
   overflow: auto;

+ 3 - 2
admin-ui/src/views/work/statement/give/index.vue

@@ -38,14 +38,15 @@
       <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>
+          <el-tag type="danger" v-if="scope.row.give == 1">待平台核实</el-tag>
+          <el-tag type="success" v-if="scope.row.give == 2">发放成功</el-tag>
         </template>
       </el-table-column>
       <el-table-column label="创建日期" align="center" prop="auditTime" 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)">发放</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">

+ 107 - 0
admin-ui/src/views/work/statement/pay/edit.vue

@@ -0,0 +1,107 @@
+<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>
+    <div></div>
+    <el-table :data="response.rows" border height="400">
+      <el-table-column type="index" label="序号" align="center" width="70" />
+      <el-table-column label="姓名" align="center" prop="name" width="100" />
+      <el-table-column label="身份证号" align="center" prop="idCard" />
+      <el-table-column label="手机号" align="center" prop="phone" width="130" />
+      <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" width="110">
+        <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 class="mfooter">
+      <el-button type="primary" @click="submitForm">确认发放</el-button>
+      <el-button @click="$layer.close(layerid)">取 消</el-button>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      ids: [],
+      showSearch: true,
+      response: {},
+      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.form.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.handleQuery();
+    },
+    submitForm() {
+      this.$confirm('是否确认发放业务费?', '警告', { type: 'warning' }).then(() => {
+        this.ajax({ url: '/work/statement/pay/ok/' + this.param.form.id }).then((response) => {
+          this.$modal.msgSuccess('发放成功,已成功扣款');
+          this.getList();
+        });
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('/work/recharge/export', { ...this.queryParams }, '充值明细.xlsx');
+    }
+  }
+};
+</script>

+ 90 - 0
admin-ui/src/views/work/statement/pay/index.vue

@@ -0,0 +1,90 @@
+<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>
+        <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 height="calc(100vh - 235px)">
+      <el-table-column type="index" label="序号" align="center" width="70" />
+      <el-table-column label="结算单号" align="center" prop="num" />
+      <el-table-column label="结算企业" align="center" width="200">
+        <template slot-scope="scope">
+          <div class="omit" :title="scope.row.companyName">{{ scope.row.companyName }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column label="结算人数" align="center" prop="peoples" width="110" />
+      <el-table-column label="结算金额(元)" align="center" prop="money" width="125" />
+      <el-table-column label="发放业务费(元)" align="center" prop="realMoney" width="125" />
+      <el-table-column label="综合服务费(元)" align="center" prop="serviceMoney" width="125" />
+      <el-table-column label="发放状态" align="center" width="110">
+        <template slot-scope="scope">
+          <el-tag type="info" v-if="scope.row.give == 1">待发放</el-tag>
+          <el-tag type="success" v-if="scope.row.give == 2">已发放</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建日期" align="center" prop="giveTime" width="160" />
+      <el-table-column label="操作" align="center" width="160">
+        <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('ok', scope.row)" v-hasPermi="['work:statement:ok']" v-if="scope.row.give === 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 edit from './edit';
+export default {
+  data() {
+    return {
+      showSearch: true,
+      response: {},
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        batchName: null,
+        projectId: null,
+        orderByColumn: 's.id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/statement/pay', 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;
+      if (tag == 'detail') {
+        this.iframe({ obj: edit, param: { id: id, detail: true }, title: '查看详情', width: '75%', height: '65%' });
+      }
+      if (tag == 'ok') {
+        this.iframe({ obj: edit, param: { form: row, detail: true }, title: '发放业务费', width: '75%', height: '65%' });
+      }
+    }
+  }
+};
+</script>

+ 18 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/StatementController.java

@@ -42,6 +42,17 @@ public class StatementController extends BaseController {
     private ICommonService commonService;
 
     /**
+     * 平台业务发放
+     */
+    @PreAuthorize("@ss.hasPermi('work:statement:pay')")
+    @GetMapping("/pay")
+    public TableDataInfo out(Statement statement) {
+        startPage();
+        List<Statement> list = statementService.selectPayList(statement);
+        return getDataTable(list);
+    }
+
+    /**
      * 制单管理
      */
     @PreAuthorize("@ss.hasPermi('work:statement:make')")
@@ -99,6 +110,13 @@ public class StatementController extends BaseController {
         return getDataTable(list);
     }
 
+    @PreAuthorize("@ss.hasPermi('work:statement:ok')")
+    @Log(title = "平台确认发放业务费", businessType = BusinessType.UPDATE)
+    @GetMapping("/pay/ok/{id}")
+    public AjaxResult payOk(@PathVariable("id") Long id) throws ServerException {
+        return statementService.payOk(id);
+    }
+
     @PreAuthorize("@ss.hasPermi('work:statement:give')")
     @Log(title = "发放业务费获取验证码", businessType = BusinessType.INSERT)
     @GetMapping("/give/sms")

+ 12 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Statement.java

@@ -111,6 +111,18 @@ public class Statement extends BaseData {
     @ApiModelProperty(value = "项目名称")
     private String projectName;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "企业名称")
+    private String companyName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "发放业务费")
+    private BigDecimal realMoney;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "综合服务费")
+    private BigDecimal serviceMoney;
+
     @NotNull(message = "请上传结算单")
     @TableField(exist = false)
     @JsonIgnore

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

@@ -2,7 +2,9 @@ package com.ruoyi.web.work.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.web.work.domain.StatementDetail;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 
 import java.util.List;
 
@@ -14,6 +16,9 @@ public interface StatementDetailMapper extends BaseMapper<StatementDetail> {
     List<StatementDetail> selectList(StatementDetail statementDetail);
 
 
+    @Update("UPDATE tb_statement_detail  SET state = 1 WHERE statement_id =#{statementId}")
+    boolean updateState(@Param("statementId") Long statementId);
+
     @Select("SELECT * FROM tb_statement_detail WHERE id_card=#{idCard} AND statement_id=#{statementId}")
     StatementDetail check(StatementDetail statementDetail);
 }

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

@@ -14,8 +14,8 @@ import java.util.List;
 public interface StatementMapper extends BaseMapper<Statement> {
     List<Statement> selectList(Statement statement);
 
-    List<Statement> selectAuditList(Statement statement);
+    List<Statement> selectPayList(Statement statement);
 
     @Select("SELECT s.id,s.audit,s.give,s.company_id,(SELECT SUM(money) FROM tb_statement_detail d WHERE d.statement_id=s.id)AS money FROM tb_statement s WHERE s.id=#{id}")
-    Statement selectById(@Param("id") Long id);
+    Statement calculate(@Param("id") Long id);
 }

+ 9 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IStatementService.java

@@ -17,7 +17,7 @@ import java.util.List;
 public interface IStatementService extends IService<Statement> {
     List<Statement> selectList(Statement statement);
 
-    List<Statement> selectAuditList(Statement statement);
+    List<Statement> selectPayList(Statement statement);
 
     /**
      * 创建结算单
@@ -83,4 +83,12 @@ public interface IStatementService extends IService<Statement> {
      * @return
      */
     AjaxResult giveSend(StatementDto dto) throws ServerException;
+
+    /**
+     * 平台确认发放业务费
+     * @param id
+     * @return
+     * @throws ServerException
+     */
+    AjaxResult payOk(Long id) throws ServerException;
 }

+ 1 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/CommonServiceImpl.java

@@ -46,5 +46,6 @@ public class CommonServiceImpl implements ICommonService {
         if (!code.equals(redisCache.getCacheObject(CacheConstants.APP_CODE_KEY + phone))) {
             throw new ServerException("验证码错误");
         }
+        redisCache.deleteObject(CacheConstants.APP_CODE_KEY + phone);
     }
 }

+ 34 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/StatementServiceImpl.java

@@ -63,8 +63,8 @@ public class StatementServiceImpl extends ServiceImpl<StatementMapper, Statement
     }
 
     @Override
-    public List<Statement> selectAuditList(Statement statement) {
-        return statementMapper.selectAuditList(statement);
+    public List<Statement> selectPayList(Statement statement) {
+        return statementMapper.selectPayList(statement);
     }
 
     @Transactional
@@ -210,7 +210,7 @@ public class StatementServiceImpl extends ServiceImpl<StatementMapper, Statement
     @Override
     public AjaxResult giveSend(StatementDto dto) throws ServerException {
         commonService.verifyCode(SecurityUtils.getLoginUser().getUser().getPhonenumber(), dto.getCode());
-        Statement statement = statementMapper.selectById(dto.getId());
+        Statement statement = statementMapper.calculate(dto.getId());
         if (statement == null || !statement.getCompanyId().equals(SecurityUtils.getLoginUser().getUser().getCompanyId())) {
             return AjaxResult.error("结算单不存在或非法操作");
         }
@@ -231,4 +231,35 @@ public class StatementServiceImpl extends ServiceImpl<StatementMapper, Statement
         }
         return AjaxResult.success();
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public AjaxResult payOk(Long id){
+        Statement statement = statementMapper.calculate(id);
+        if (statement == null) {
+            return AjaxResult.error("发放业务不存在");
+        }
+        if (statement.getGive() != 1) {
+            return AjaxResult.error("当前结算业务不能发放");
+        }
+        Company company = companyService.getById(statement.getCompanyId());
+        if (company == null) {
+            return AjaxResult.error("企业信息不存在");
+        }
+        if (statement.getMoney().compareTo(company.getMoney()) > 0) {
+            return AjaxResult.error("发放金额已超过当前企业账户余额,请提醒企业充值再进行发放");
+        }
+        statement.setGive(2);
+        if (!updateById(statement)) {
+            throw new ServiceException("当前结算业务发放失败,请联系管理员");
+        }
+        company.setMoney(company.getMoney().subtract(statement.getMoney()));
+        if (!companyService.updateById(company)) {
+            throw new ServiceException("更新企业余额失败,请联系管理员");
+        }
+        if (!statementDetailMapper.updateState(statement.getId())) {
+            throw new ServiceException("更新结算单失败,请联系管理员");
+        }
+        return AjaxResult.success();
+    }
 }

+ 11 - 8
ruoyi-admin/src/main/resources/mapper/work/StatementMapper.xml

@@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <sql id="selectStatementVo">
         SELECT
             s.id,
+            s.company_id,
             s.num,
             s.state,
             s.audit,
@@ -22,10 +23,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             s.give_time,
             ( 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
+            ( SELECT SUM( d.real_money ) FROM tb_statement_detail d WHERE d.statement_id = s.id ) AS real_money,
+            ( SELECT SUM( d.service_money ) FROM tb_statement_detail d WHERE d.statement_id = s.id ) AS service_money,
+            p.project_name,
+            c.company_name
         FROM
             tb_statement s
                 LEFT JOIN tb_project p ON p.id = s.project_id
+                LEFT JOIN tb_company c ON c.id = s.company_id
     </sql>
     <select id="selectList" resultType="com.ruoyi.web.work.domain.Statement">
         <include refid="selectStatementVo"/>
@@ -47,16 +52,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </choose>
         </where>
     </select>
-    <!--结算单审核列表-->
-    <select id="selectAuditList" resultType="com.ruoyi.web.work.domain.Statement">
+    <select id="selectPayList" 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>
-
+            <choose>
+                <when test="give != null">and s.give=#{give} and s.give <![CDATA[ >= ]]> 1</when>
+                <otherwise>s.give <![CDATA[ >= ]]> 1</otherwise>
+            </choose>
         </where>
     </select>