lsw преди 1 година
родител
ревизия
81b427391d
променени са 19 файла, в които са добавени 752 реда и са изтрити 12 реда
  1. 5 5
      admin-ui/src/views/work/company/index.vue
  2. 128 0
      admin-ui/src/views/work/statement/edit.vue
  3. 119 0
      admin-ui/src/views/work/statement/make.vue
  4. 3 4
      ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/CompanyController.java
  5. 79 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/StatementController.java
  6. 81 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Statement.java
  7. 72 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/StatementDetail.java
  8. 13 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/StatementDetailMapper.java
  9. 13 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/StatementMapper.java
  10. 4 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/ICompanyService.java
  11. 13 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IStatementDetailService.java
  12. 17 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IStatementService.java
  13. 47 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/CompanyServiceImpl.java
  14. 24 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/StatementDetailServiceImpl.java
  15. 79 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/StatementServiceImpl.java
  16. 23 0
      ruoyi-admin/src/main/resources/mapper/work/StatementDetailMapper.xml
  17. 27 0
      ruoyi-admin/src/main/resources/mapper/work/StatementMapper.xml
  18. 4 2
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java
  19. 1 1
      ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 5 - 5
admin-ui/src/views/work/company/index.vue

@@ -14,7 +14,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="创建日期">
-        <el-date-picker v-model="dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+        <el-date-picker v-model="dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :clearable="false"></el-date-picker>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@@ -119,10 +119,10 @@ export default {
       }
       //账号状态
       if (tag == 'change') {
-        let text = row.state === 0 ? '启用' : '用';
-        this.$confirm('确认要' + text + '该企业吗,停用后该企业的所有账号都不能登录?', '警告', { type: 'warning' })
+        let text = row.state === 0 ? '启用' : '用';
+        this.$confirm('确认要' + text + '该企业吗,停用后该企业的所有账号都不能登录?', '警告', { type: 'warning' })
           .then(() => {
-            this.post({ url: '/work/company/change', data: { id: row.id, state: row.state } })
+            this.post({ url: '/work/company/edit', data: { id: row.id, state: row.state } })
               .then((response) => {
                 this.$modal.msgSuccess(text + '成功');
               })
@@ -136,7 +136,7 @@ export default {
       }
     },
     del(row) {
-      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+      this.$confirm('是否确认删除选中企业?删除后该企业下的所有账号都被删除', '警告', { type: 'warning' }).then(() => {
         this.get({ url: '/work/company/remove/' + (row.id || this.ids) }).then((response) => {
           this.$modal.msgSuccess('删除成功');
           this.getList();

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

@@ -0,0 +1,128 @@
+<template>
+  <div class="cmain">
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="关联企业" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入关联企业" clearable/>
+        </el-form-item>
+        <el-form-item label="关联用户" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入关联用户" clearable/>
+        </el-form-item>
+        <el-form-item label="上传文档名称" prop="fileName">
+          <el-input v-model="form.fileName" placeholder="请输入上传文档名称" clearable/>
+        </el-form-item>
+        <el-form-item label="文档路径" prop="filePath">
+          <el-input v-model="form.filePath" placeholder="请输入文档路径" clearable/>
+        </el-form-item>
+        <el-form-item label="结算批次" prop="batchName">
+          <el-input v-model="form.batchName" placeholder="请输入结算批次" clearable/>
+        </el-form-item>
+        <el-form-item label="发票类型" prop="invoice">
+          <el-input v-model="form.invoice" placeholder="请输入发票类型" clearable/>
+        </el-form-item>
+        <el-form-item label="支付渠道" prop="channel">
+          <el-input v-model="form.channel" placeholder="请输入支付渠道" clearable/>
+        </el-form-item>
+        <el-form-item label="结算单号" prop="num">
+          <el-input v-model="form.num" placeholder="请输入结算单号" clearable/>
+        </el-form-item>
+        <el-form-item label="发放金额" prop="money">
+          <el-input v-model="form.money" placeholder="请输入发放金额" clearable/>
+        </el-form-item>
+        <el-form-item label="发放人数" prop="peoples">
+          <el-input v-model="form.peoples" placeholder="请输入发放人数" clearable/>
+        </el-form-item>
+        <el-form-item label="关联项目" prop="projectId">
+          <el-input v-model="form.projectId" placeholder="请输入关联项目" clearable/>
+        </el-form-item>
+        <el-form-item label="制单状态" prop="state">
+          <el-input v-model="form.state" placeholder="请输入制单状态" clearable/>
+        </el-form-item>
+        <el-form-item label="发放状态" prop="give">
+          <el-input v-model="form.give" placeholder="请输入发放状态" clearable/>
+        </el-form-item>
+        <el-form-item label="服务公司" prop="serviceCompany">
+          <el-input v-model="form.serviceCompany" placeholder="请输入服务公司" clearable/>
+        </el-form-item>
+        <el-form-item label="创建者" prop="createBy">
+          <el-input v-model="form.createBy" placeholder="请输入创建者" clearable/>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">
+          <el-date-picker clearable
+            v-model="form.createTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择创建时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="更新者" prop="updateBy">
+          <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable/>
+        </el-form-item>
+        <el-form-item label="更新时间" prop="updateTime">
+          <el-date-picker clearable
+            v-model="form.updateTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择更新时间">
+          </el-date-picker>
+        </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>
+export default {
+  data() {
+    return {
+      form: {},
+      rules: {
+        peoples: [
+          { required: true, message: "发放人数不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  props: {
+    param: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    layerid: {
+      type: String
+    }
+  },
+  mounted() {
+    if (this.param.id) {
+      this.ajax({ url: '/work/statement/detail/' + this.param.id }).then(response => {
+        this.form = response.data;
+      });
+    }
+  },
+  methods: {
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id) {
+              this.ajax({method: 'post',url: '/work/statement/edit', data: this.form }).then(response => {
+                  this.$modal.msgSuccess("修改成功");
+                  this.$layer.close(this.layerid);
+                  this.$parent.getList();
+              });
+          } else {
+              this.ajax({method: 'post',url: '/work/statement/add', data: this.form }).then(response => {
+                  this.$modal.msgSuccess("新增成功");
+                  this.$layer.close(this.layerid);
+                  this.$parent.getList();
+               });
+          }
+        }
+      });
+    }
+  }
+};
+</script>

+ 119 - 0
admin-ui/src/views/work/statement/make.vue

@@ -0,0 +1,119 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="关联企业" prop="companyId">
+        <el-input v-model="queryParams.companyId" placeholder="请输入关联企业" @keyup.enter.native="handleQuery" clearable class="inp" />
+      </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-row :gutter="10" class="mb8">
+      <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:statement:add']">新增</el-button>
+      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:statement:edit']">修改</el-button>
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:statement:remove']">删除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}</el-button>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="关联企业" align="center" prop="companyId" />
+      <el-table-column label="关联用户" align="center" prop="userId" />
+      <el-table-column label="上传文档名称" align="center" prop="fileName" />
+      <el-table-column label="文档路径" align="center" prop="filePath" />
+      <el-table-column label="结算批次" align="center" prop="batchName" />
+      <el-table-column label="发票类型" align="center" prop="invoice" />
+      <el-table-column label="支付渠道" align="center" prop="channel" />
+      <el-table-column label="结算单号" align="center" prop="num" />
+      <el-table-column label="发放金额" align="center" prop="money" />
+      <el-table-column label="发放人数" align="center" prop="peoples" />
+      <el-table-column label="关联项目" align="center" prop="projectId" />
+      <el-table-column label="制单状态" align="center" prop="state" />
+      <el-table-column label="发放状态" align="center" prop="give" />
+      <el-table-column label="服务公司" align="center" prop="serviceCompany" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <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>
+        </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 {
+  name: 'Statement',
+  data() {
+    return {
+      ids: [],
+      showSearch: true,
+      response: {},
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: null,
+        userId: null,
+        fileName: null,
+        filePath: null,
+        batchName: null,
+        invoice: null,
+        channel: null,
+        num: null,
+        money: null,
+        peoples: null,
+        projectId: null,
+        state: null,
+        give: null,
+        serviceCompany: null,
+        orderByColumn: 'id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/statement/list', 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) {
+      if (tag == 'add') {
+        this.iframe({ obj: edit, param: {}, title: '新增', width: '45%', height: '55%' });
+      }
+      if (tag == 'edit') {
+        const id = row.id || this.ids[0];
+        this.iframe({ obj: edit, param: { id: id }, title: '编辑', width: '50%', height: '50%' });
+      }
+    },
+    del(row) {
+      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/statement/remove/' + (row.id || this.ids) }).then((response) => {
+          this.$modal.msgSuccess('删除成功');
+          this.getList();
+        });
+      });
+    }
+  }
+};
+</script>

+ 3 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/CompanyController.java

@@ -12,7 +12,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.rmi.ServerException;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -60,14 +59,14 @@ public class CompanyController extends BaseController {
     @PreAuthorize("@ss.hasPermi('work:company:edit')")
     @Log(title = "企业管理", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
-    public AjaxResult edit(@RequestBody Company company) {
-        return toAjax(companyService.updateById(company));
+    public AjaxResult edit(@RequestBody Company company) throws ServerException {
+        return companyService.edit(company);
     }
 
     @PreAuthorize("@ss.hasPermi('work:company:remove')")
     @Log(title = "企业管理", businessType = BusinessType.DELETE)
     @GetMapping("/remove/{ids}")
     public AjaxResult remove(@PathVariable Long[] ids) {
-        return toAjax(companyService.removeByIds(Arrays.asList(ids)));
+        return toAjax(companyService.remove(ids));
     }
 }

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

@@ -0,0 +1,79 @@
+package com.ruoyi.web.work.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.web.work.domain.Statement;
+import com.ruoyi.web.work.domain.StatementDetail;
+import com.ruoyi.web.work.service.IStatementService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 结算单管理
+ *
+ * @author lsw
+ * @date 2024-04-20
+ */
+@RestController
+@RequestMapping("/work/statement")
+public class StatementController extends BaseController {
+    @Autowired
+    private IStatementService statementService;
+
+    @PreAuthorize("@ss.hasPermi('work:statement:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(Statement statement) {
+        startPage();
+        List<Statement> list = statementService.selectList(statement);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导入题库管理
+     */
+    @PreAuthorize("@ss.hasPermi('work:statement:import')")
+    @Log(title = "结算单管理", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, @RequestBody Statement statement) throws Exception {
+        ExcelUtil<StatementDetail> util = new ExcelUtil<StatementDetail>(StatementDetail.class);
+        List<StatementDetail> detailList = util.importExcel(file.getInputStream());
+        String message = statementService.importData(detailList, statement);
+        return AjaxResult.success(message);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:statement:query')")
+    @GetMapping(value = "/detail/{id}")
+    public AjaxResult detail(@PathVariable("id") Long id) {
+        return AjaxResult.success(statementService.getById(id));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:statement:add')")
+    @Log(title = "结算单管理", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody Statement statement) {
+        return toAjax(statementService.save(statement));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:statement:edit')")
+    @Log(title = "结算单管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody Statement statement) {
+        return toAjax(statementService.updateById(statement));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:statement:remove')")
+    @Log(title = "结算单管理", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(statementService.removeByIds(Arrays.asList(ids)));
+    }
+}

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

@@ -0,0 +1,81 @@
+package com.ruoyi.web.work.domain;
+
+import java.math.BigDecimal;
+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 io.swagger.annotations.ApiModelProperty;
+import lombok.experimental.Accessors;
+/**
+ * @author lsw
+ * @date 2024-04-20
+ */
+@Data
+@TableName(value = "tb_statement")
+@Accessors(chain = true)
+public class Statement{
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    @ApiModelProperty(value = "关联企业")
+    private Long companyId;
+
+    @ApiModelProperty(value = "关联用户")
+    private Long userId;
+
+    @ApiModelProperty(value = "上传文档名称")
+    private String fileName;
+
+    @ApiModelProperty(value = "文档路径")
+    private String filePath;
+
+    @ApiModelProperty(value = "结算批次")
+    private String batchName;
+
+    @ApiModelProperty(value = "发票类型")
+    private String invoice;
+
+    @ApiModelProperty(value = "支付渠道")
+    private String channel;
+
+    @ApiModelProperty(value = "结算单号")
+    private String num;
+
+    @ApiModelProperty(value = "发放金额")
+    private BigDecimal money;
+
+    @ApiModelProperty(value = "发放人数")
+    private Integer peoples;
+
+    @ApiModelProperty(value = "关联项目")
+    private Long projectId;
+
+    @ApiModelProperty(value = "制单状态:0=待审核,1=已审核,2=驳回")
+    private Integer state;
+
+    @ApiModelProperty(value = "发放状态:0=待审核,1=已审核,2=驳回")
+    private Integer give;
+
+    @ApiModelProperty(value = "服务公司")
+    private String serviceCompany;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateBy;
+
+    @TableField(fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+
+}

+ 72 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/StatementDetail.java

@@ -0,0 +1,72 @@
+package com.ruoyi.web.work.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+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-20
+ */
+@Data
+@TableName(value = "tb_statement_detail")
+@Accessors(chain = true)
+public class StatementDetail {
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    @ApiModelProperty(value = "关联结算单")
+    private Long statementId;
+
+    @Excel(name = "姓名")
+    private String name;
+
+    @Excel(name = "身份证号")
+    private String idCard;
+
+    @Excel(name = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "流水号")
+    private String num;
+
+    @Excel(name = "支付宝")
+    private String alipay;
+
+    @Excel(name = "金额(元)")
+    private BigDecimal money;
+
+    @ApiModelProperty(value = "实发金额")
+    private BigDecimal realMoney;
+
+    @ApiModelProperty(value = "综合服务费")
+    private BigDecimal serviceMoney;
+
+    @ApiModelProperty(value = "发放状态:0=待审核,1=已审核,2=驳回")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateBy;
+
+    @TableField(fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+
+}

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

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.mapper;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.StatementDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @author lsw
+ * @date 2024-04-20
+ */
+public interface StatementDetailMapper extends BaseMapper<StatementDetail> {
+    List<StatementDetail> selectList(StatementDetail statementDetail);
+}

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

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.mapper;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.Statement;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @author lsw
+ * @date 2024-04-20
+ */
+public interface StatementMapper extends BaseMapper<Statement> {
+    List<Statement> selectList(Statement statement);
+}

+ 4 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/ICompanyService.java

@@ -20,4 +20,8 @@ public interface ICompanyService extends IService<Company>{
 
     AjaxResult add(Company company) throws ServerException;
 
+    AjaxResult edit(Company company) throws ServerException;
+
+    boolean remove(Long[] ids);
+
 }

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IStatementDetailService.java

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.service;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.StatementDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @author lsw
+ * @date 2024-04-20
+ */
+public interface IStatementDetailService extends IService<StatementDetail>{
+    List<StatementDetail> selectList(StatementDetail statementDetail);
+}

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

@@ -0,0 +1,17 @@
+package com.ruoyi.web.work.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.web.work.domain.Statement;
+import com.ruoyi.web.work.domain.StatementDetail;
+
+import java.util.List;
+
+/**
+ * @author lsw
+ * @date 2024-04-20
+ */
+public interface IStatementService extends IService<Statement> {
+    List<Statement> selectList(Statement statement);
+
+    String importData(List<StatementDetail> list, Statement statement);
+}

+ 47 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/CompanyServiceImpl.java

@@ -5,6 +5,7 @@ import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.web.work.domain.Company;
 import com.ruoyi.web.work.domain.dto.CompanyDto;
@@ -17,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.rmi.ServerException;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -31,6 +33,9 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
     @Autowired
     private ISysUserService userService;
 
+    @Autowired
+    private SysPermissionService permissionService;
+
     @Override
     public List<Company> selectList(Company company) {
         return companyMapper.selectList(company);
@@ -69,4 +74,46 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
         }
         return AjaxResult.success();
     }
+
+    @Override
+    public AjaxResult edit(Company company) throws ServerException {
+        Company bean = companyMapper.selectById(company.getId());
+        if (bean == null) {
+            return AjaxResult.error("企业不存在");
+        }
+        if (!updateById(company)) {
+            throw new ServerException("编辑企业失败,请联系管理员");
+        }
+        if (company.getState() == 1) {
+            SysUser user = new SysUser();
+            user.setCompanyId(bean.getId());
+            List<SysUser> list = userService.selectUserList(user);
+            list.forEach(e -> {
+                e.setStatus("1");
+                if (userService.updateUser(e) > 0) {
+                    permissionService.refreshUserPermission(e.getUserId());
+                }
+            });
+        }
+        return AjaxResult.success();
+    }
+
+    @Transactional
+    @Override
+    public boolean remove(Long[] ids) {
+        boolean row = removeByIds(Arrays.asList(ids));
+        if (row) {
+            for (Long id : ids) {
+                SysUser user = new SysUser();
+                user.setCompanyId(id);
+                List<SysUser> list = userService.selectUserList(user);
+                list.forEach(e -> {
+                    if (userService.deleteUserById(e.getUserId()) > 0) {
+                        permissionService.refreshUserPermission(e.getUserId());
+                    }
+                });
+            }
+        }
+        return row;
+    }
 }

+ 24 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/StatementDetailServiceImpl.java

@@ -0,0 +1,24 @@
+package com.ruoyi.web.work.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.web.work.mapper.StatementDetailMapper;
+import com.ruoyi.web.work.domain.StatementDetail;
+import com.ruoyi.web.work.service.IStatementDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @author lsw
+ * @date 2024-04-20
+ */
+@Service
+public class StatementDetailServiceImpl extends ServiceImpl<StatementDetailMapper, StatementDetail> implements IStatementDetailService {
+    @Autowired
+    private StatementDetailMapper statementDetailMapper;
+
+    @Override
+    public List<StatementDetail> selectList(StatementDetail statementDetail) {
+        return statementDetailMapper.selectList(statementDetail);
+    }
+}

+ 79 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/StatementServiceImpl.java

@@ -0,0 +1,79 @@
+package com.ruoyi.web.work.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.bean.BeanValidators;
+import com.ruoyi.web.work.domain.Statement;
+import com.ruoyi.web.work.domain.StatementDetail;
+import com.ruoyi.web.work.mapper.StatementMapper;
+import com.ruoyi.web.work.service.IStatementService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author lsw
+ * @date 2024-04-20
+ */
+@Service
+public class StatementServiceImpl extends ServiceImpl<StatementMapper, Statement> implements IStatementService {
+    @Autowired
+    private StatementMapper statementMapper;
+
+    @Override
+    public List<Statement> selectList(Statement statement) {
+        return statementMapper.selectList(statement);
+    }
+
+    @Override
+    public String importData(List<StatementDetail> list, Statement statement) {
+        if (StringUtils.isNull(list) || list.size() == 0) {
+            throw new ServiceException("导入数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (StatementDetail detail : list) {
+            try {
+                // 验证是否存在这个用户
+                SysUser u = userMapper.selectUserByUserName(user.getUserName());
+                if (StringUtils.isNull(u)) {
+                    BeanValidators.validateWithException(validator, user);
+                    user.setPassword(SecurityUtils.encryptPassword(password));
+                    user.setCreateBy(operName);
+                    this.insertUser(user);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
+                } else if (isUpdateSupport) {
+                    BeanValidators.validateWithException(validator, user);
+                    checkUserAllowed(user);
+                    checkUserDataScope(user.getUserId());
+                    user.setUpdateBy(operName);
+                    this.updateUser(user);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
+                }
+            } catch (Exception e) {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0) {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+}

+ 23 - 0
ruoyi-admin/src/main/resources/mapper/work/StatementDetailMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.web.work.mapper.StatementDetailMapper">
+    
+    <select id="selectList" resultType="com.ruoyi.web.work.domain.StatementDetail">
+        select * from tb_statement_detail
+        <where>  
+            <if test="statementId != null "> and statement_id = #{statementId}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="idCard != null  and idCard != ''"> and id_card = #{idCard}</if>
+            <if test="phone != null  and phone != ''"> and phone = #{phone}</if>
+            <if test="num != null  and num != ''"> and num = #{num}</if>
+            <if test="alipay != null  and alipay != ''"> and alipay = #{alipay}</if>
+            <if test="money != null "> and money = #{money}</if>
+            <if test="realMoney != null "> and real_money = #{realMoney}</if>
+            <if test="serviceMoney != null "> and service_money = #{serviceMoney}</if>
+            <if test="state != null "> and state = #{state}</if>
+        </where>
+    </select>
+
+</mapper>

+ 27 - 0
ruoyi-admin/src/main/resources/mapper/work/StatementMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+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">
+        select * from tb_statement
+        <where>  
+            <if test="companyId != null "> and company_id = #{companyId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
+            <if test="filePath != null  and filePath != ''"> and file_path = #{filePath}</if>
+            <if test="batchName != null  and batchName != ''"> and batch_name like concat('%', #{batchName}, '%')</if>
+            <if test="invoice != null  and invoice != ''"> and invoice = #{invoice}</if>
+            <if test="channel != null  and channel != ''"> and channel = #{channel}</if>
+            <if test="num != null  and num != ''"> and num = #{num}</if>
+            <if test="money != null "> and money = #{money}</if>
+            <if test="peoples != null "> and peoples = #{peoples}</if>
+            <if test="projectId != null "> and project_id = #{projectId}</if>
+            <if test="state != null "> and state = #{state}</if>
+            <if test="give != null "> and give = #{give}</if>
+            <if test="serviceCompany != null  and serviceCompany != ''"> and service_company = #{serviceCompany}</if>
+        </where>
+    </select>
+
+</mapper>

+ 4 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java

@@ -114,10 +114,12 @@ public class SysPermissionService {
             LoginUser loginUser = redisCache.getCacheObject(key);
             if (loginUser != null && loginUser.getUser().getUserId().equals(userId)) {
                 loginUser.setUser(userService.selectUserById(loginUser.getUser().getUserId()));
-                if(!getMenuPermission(loginUser.getUser()).isEmpty()){
+                if (loginUser.getUser() != null && !getMenuPermission(loginUser.getUser()).isEmpty()) {
                     loginUser.setPermissions(getMenuPermission(loginUser.getUser()));
+                    tokenService.setLoginUser(loginUser);
+                } else {
+                    tokenService.delLoginUser(loginUser.getToken());
                 }
-                tokenService.setLoginUser(loginUser);
             }
         }
     }

+ 1 - 1
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -61,7 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
 		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
-		where u.del_flag = '0'
+		where 1=1
 		<if test="userId != null and userId != 0">
 			AND u.user_id = #{userId}
 		</if>