jiangping
2024-02-01 bd28e0ab635f43b608df6a2ab1823dcc6f78da93
Merge remote-tracking branch 'origin/master'
已添加4个文件
已修改27个文件
2228 ■■■■ 文件已修改
company/src/api/business/applyChange.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeDetailWindow.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeUnitDetailWindow.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/add_subtract_return.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/additionSubtractionApplication.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/confirmJobType.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/editFactoryChange.vue 501 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/factoryChange.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/reinsurance.vue 594 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/switchCourt.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/add_subtract.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/switchCourt.vue 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/ApplyChagneDetailController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/DispatchUnitController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/NoticesController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/NoticesController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/join/NoticesJoinMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Member.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/MemberInsurance.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Notices.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/ApplyChagneDetailService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/NoticesServiceImpl.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/SettleClaimsServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/TaxesServiceImpl.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/applyChange.js
@@ -36,3 +36,8 @@
export function applyChagneDetailList (data) {
    return request.post('/business/applyChagneDetail/list', data)
}
// ä¿®æ”¹
export function update (data) {
    return request.post('/business/applyChange/update', data)
}
company/src/components/business/OperaApplyChangeDetailWindow.vue
@@ -12,21 +12,26 @@
                    <div class="desc_item_label_left">
                        <span>投保企业:{{ apply.companyName }}</span>
                      <span v-if="model.status === 0">保单状态:待签署</span>
<<<<<<< HEAD
                      <span v-if="model.status === 1">保单状态:待审核</span>
                      <span v-if="model.status === 2">保单状态:已上传批单</span>
=======
                      <span v-if="model.status === 1">保单状态:已签章</span>
                      <span v-if="model.status === 2">保单状态:已生效</span>
>>>>>>> 35bd55ad951fe8c5fb997dfa7bd836ad53db96fe
                      <span v-if="model.status === 3 || model.status === 4">保单状态:退回申请</span>
                      <span v-if="model.status === 5 || model.status === 8">保单状态:已退回</span>
                      <span v-if="model.status ===7">保单状态:已关闭</span>
                      <span v-if="model.status === 7 || model.status === 6">保单状态:已关闭</span>
                        <span>提交时间:{{ model.createDate }}</span>
                    </div>
                  <div class="desc_item_label_right">
                      <template v-if="userInfo.type === 1">
                          <el-button type="primary" @click="$refs.ApplyChangeDetails.open('加减保详单',apply,model)">导出详单</el-button>
                          <el-button v-if="[5, 8].includes(model.status)" type="primary" @click="$refs.additionSubtractionApplication.open('加减保申请', {id: dataId})">再次投保</el-button>
                          <el-button v-if="[5, 8].includes(model.status)" type="primary" @click="$refs.reinsurance.open('加减保申请', {id: dataId, applyChangId: modelId})">再次投保</el-button>
                          <el-button type="primary" v-if="model.status == 0" @click="goSign">签署申请单</el-button>
                          <el-button v-if="[2, 3, 7].includes(model.status)" type="primary">申请退回</el-button>
                          <el-button v-if="[0, 1, 2, 3, 7].includes(model.status)" type="primary" @click="$refs.add_subtract_return.open('申请退回', { id: modelId })">申请退回</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewApplyFile">查看申请单</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewPidan">查看批单</el-button>
                          <el-button v-if="model.status == 2" type="primary" @click="viewPidan">查看批单</el-button>
                          <el-button v-if="[5, 8].includes(model.status)" type="primary" @click="closeOrder">关闭订单</el-button>
                      </template>
                        <template v-else>
@@ -180,11 +185,12 @@
        <ApplyChangeDetails ref="ApplyChangeDetails" @success="successEvent" />
        <OperaApplyChangeCheckWindow ref="OperaApplyChangeCheckWindow" @success="successEvent" />
        <!--    ä¼ä¸šç”³è¯·é€€å›ž    -->
        <applyReturn ref="applyReturn" @success="successEvent" />
<!--        <applyReturn ref="applyReturn" @success="successEvent" />-->
        <add_subtract_return ref="add_subtract_return" @success="successEvent" />
        <!--    æ–°å¢žæŠ•保    -->
        <OperaInsuranceApply ref="OperaInsuranceApply" @success="successEvent" />
        <!--    åŠ å‡ä¿ç”³è¯·    -->
        <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
        <reinsurance ref="reinsurance" @success="successEvent" />
        <!--    æ¢åŽ‚ç”³è¯·    -->
        <factoryChange ref="factoryChange" @success="successEvent" />
    </GlobalWindow>
@@ -195,9 +201,9 @@
import GlobalWindow from '@/components/common/GlobalWindow'
import ApplyChangeDetails from '@/components/business/ApplyChangeDetails'
import OperaApplyChangeCheckWindow from '@/components/business/OperaApplyChangeCheckWindow'
import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
import reinsurance from '@/components/enterprise/reinsurance'
import factoryChange from '@/components/enterprise/factoryChange'
import applyReturn from '@/components/enterprise/applyReturn'
import add_subtract_return from '@/components/enterprise/add_subtract_return'
import {
  getDetail,
  getChangeDetail,
@@ -215,9 +221,9 @@
      GlobalWindow,
      ApplyChangeDetails,
      OperaApplyChangeCheckWindow,
      applyReturn,
      add_subtract_return,
      OperaInsuranceApply,
      additionSubtractionApplication,
      reinsurance,
      factoryChange
  },
  data () {
@@ -273,7 +279,7 @@
            this.search()
      },
      closeOrder() {
          this.$confirm('确认关闭次保单吗?', '提示', {
          this.$confirm('确认关闭此订单吗?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
company/src/components/business/OperaApplyChangeUnitDetailWindow.vue
@@ -12,8 +12,13 @@
                    <div class="desc_item_label_left">
                        <span>投保企业:{{ apply.companyName }}</span>
                      <span v-if="model.status === 0">保单状态:待签署</span>
<<<<<<< HEAD
                      <span v-if="model.status === 1">保单状态:待审核</span>
                      <span v-if="model.status === 2">保单状态:已上传批单</span>
=======
                      <span v-if="model.status === 1">保单状态:已签章</span>
                      <span v-if="model.status === 2">保单状态:已生效</span>
>>>>>>> 35bd55ad951fe8c5fb997dfa7bd836ad53db96fe
                      <span v-if="model.status === 3 || model.status === 4">保单状态:退回申请</span>
                      <span v-if="model.status ===5 || model.status === 8">保单状态:已退回</span>
                      <span v-if="model.status ===7">保单状态:已关闭</span>
@@ -21,13 +26,14 @@
                    </div>
                  <div class="desc_item_label_right">
                      <template v-if="userInfo.type === 1">
                          <el-button v-if="[0, 2, 3, 10].includes(model.status)" type="danger" @click="$refs.applyReturn.open('申请退回', {id: dataId})">申请退回</el-button>
                          <el-button v-if="model.status == 4" type="primary" @click="$refs.OperaInsuranceApply.open('投保申请', {id: dataId})">再次投保</el-button>
                          <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">签署申请单</el-button>
                          <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">申请退回</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">查看申请单</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">查看批单</el-button>
                          <el-button v-if="model.status == 2" type="primary" @click="goSign">关闭订单</el-button>
                          <el-button type="primary" @click="$refs.ApplyChangeDetails.open('换厂申请详单',apply,model)">导出详单</el-button>
<!--                          <el-button v-if="[0, 2, 3, 10].includes(model.status)" type="danger" @click="$refs.applyReturn.open('申请退回', {id: dataId})">申请退回</el-button>-->
                          <el-button v-if="[5, 8].includes(model.status)" type="primary" @click="$refs.editFactoryChange.open('换厂申请', {id: dataId, applyChangId: modelId})">再次投保</el-button>
                          <el-button type="primary" v-if="model.status == 0"   @click="goSign">签署申请单</el-button>
                          <el-button v-if="[0, 1, 2, 3, 7].includes(model.status)" type="primary" @click="$refs.add_subtract_return.open('申请退回', { id: modelId })">申请退回</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewApplyFile">查看申请单</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewPidan">查看批单</el-button>
                          <el-button v-if="[5, 8].includes(model.status)" type="primary" @click="closeOrder">关闭订单</el-button>
                      </template>
                        <template v-else>
                            <el-button type="primary" @click="$refs.ApplyChangeDetails.open('换厂申请详单',apply,model)">导出详单</el-button>
@@ -170,12 +176,15 @@
        <OperaApplyChangeUnitCheckWindow ref="OperaApplyChangeCheckWindow" @success="successEvent" />
        <!--    ä¼ä¸šç”³è¯·é€€å›ž    -->
        <applyReturn ref="applyReturn" @success="successEvent" />
        <add_subtract_return ref="add_subtract_return" @success="successEvent" />
        <!--    æ–°å¢žæŠ•保    -->
        <OperaInsuranceApply ref="OperaInsuranceApply" @success="successEvent" />
        <!--    åŠ å‡ä¿ç”³è¯·    -->
        <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
        <!--    æ¢åŽ‚ç”³è¯·    -->
        <factoryChange ref="factoryChange" @success="successEvent" />
        <editFactoryChange ref="editFactoryChange" @success="successEvent" />
    </GlobalWindow>
</template>
@@ -186,13 +195,16 @@
import OperaApplyChangeUnitCheckWindow from '@/components/business/OperaApplyChangeUnitCheckWindow'
import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
import factoryChange from '@/components/enterprise/factoryChange'
import editFactoryChange from '@/components/enterprise/editFactoryChange'
import applyReturn from '@/components/enterprise/applyReturn'
import add_subtract_return from '@/components/enterprise/add_subtract_return'
import {
  getDetail,
  getChangeDetail,
  applyChagneDetailPage,
  getChangeUnitSignLink
} from '@/api/business/insuranceApply'
import { applyChangeOpt } from '@/api/business/applyChange'
import OperaInsuranceApply from '@/components/enterprise/OperaInsuranceApplyWindow'
import { mapState } from 'vuex'
@@ -206,7 +218,9 @@
      applyReturn,
      OperaInsuranceApply,
      additionSubtractionApplication,
      factoryChange
      factoryChange,
      add_subtract_return,
      editFactoryChange
  },
  data () {
    return {
@@ -257,6 +271,24 @@
        this.getDetail()
        this.getList()
     },
      closeOrder() {
          this.$confirm('确认关闭此订单吗?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
          }).then(() => {
              applyChangeOpt({
                  optType: 6,
                  applyId: this.model.id
              }).then(res => {
                  this.getDetail()
              }).catch(e => {
                  this.$message.error(e)
              })
          }).catch(() => {
          });
      },
      resetting() {
            this.search()
      },
company/src/components/enterprise/add_subtract_return.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
<template>
    <GlobalWindow
            :title="title"
            width="40%"
            :visible.sync="visible"
            :confirm-working="isWorking"
            @confirm="confirm"
    >
        <el-form ref="form" :model="form" label-width="130px">
            <el-form-item label="填写申请说明">
                <el-input type="textarea" v-model="form.remark"></el-input>
            </el-form-item>
        </el-form>
    </GlobalWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    import { applyChangeOpt } from '@/api/business/applyChange'
    export default {
        name: 'add_subtract_return',
        extends: BaseOpera,
        components: { GlobalWindow },
        data () {
            return {
                // è¡¨å•数据
                form: {
                    id: null,
                    remark: ''
                }
            }
        },
        created () {
            this.config({
                api: '/business/insurance',
                'field.id': 'id'
            })
        },
        methods: {
            open (title, target) {
                this.title = title
                this.visible = true
                this.$nextTick(() => {
                    this.$refs.form.resetFields()
                    this.form[this.configData['field.id']] = null
                })
                this.$nextTick(() => {
                    for (const key in this.form) {
                        this.form[key] = target[key]
                    }
                })
            },
            confirm() {
                this.isWorking = true
                applyChangeOpt({ applyId: this.form.id, optIllustration: this.form.remark, optType: 3 })
                    .then(res => {
                        this.visible = false
                        this.$tip.apiSuccess('操作成功')
                        this.$emit('success')
                    })
                    .catch(e => {
                        this.$tip.apiFailed(e)
                    })
                    .finally(() => {
                        this.isWorking = false
                    })
            }
        }
    }
</script>
company/src/components/enterprise/additionSubtractionApplication.vue
@@ -183,7 +183,7 @@
    import confirmJobType from '@/components/enterprise/confirmJobType'
    import { all } from '@/api/business/solutions'
    import { getDetail } from '@/api/business/insuranceApply'
    import { create, getChangeCountCyclePriceVO, applyChagneDetailList } from '@/api/business/applyChange'
    import { create, getChangeCountCyclePriceVO } from '@/api/business/applyChange'
    export default {
        name: 'additionSubtractionApplication',
        extends: BaseOpera,
@@ -265,11 +265,6 @@
            },
            handleClick(e) {
                this.activeName = e.index
            },
            getApplyChagneDetailList() {
                applyChagneDetailList({
                })
            },
            // èŽ·å–æŠ•ä¿è¯¦æƒ…
            getDetails() {
company/src/components/enterprise/confirmJobType.vue
@@ -55,6 +55,8 @@
        methods: {
            open (title, arr) {
                this.title = title
                this.dw = ''
                this.gz = ''
                this.form.solutionId = arr.solutionId
                this.data = arr.seleData
                this.visible = true
company/src/components/enterprise/editFactoryChange.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,501 @@
<template>
    <GlobalWindow
            :title="title"
            width="100%"
            text="投保申请"
            :visible.sync="visible"
            :confirm-working="isWorking"
            @confirm="confirm"
    >
        <div class="list">
            <el-form :inline="true" ref="form" :model="form" :rules="rules" class="demo-form-inline">
                <el-form-item label="保险方案">
                    <span>{{form.solutionsName}}</span>
                </el-form-item>
                <el-form-item label="批单生效起期" prop="applyStartTime">
                    <div style="display: flex; flex-direction: column;">
                        <el-date-picker
                            v-model="form.applyStartTime"
                            type="datetime"
                            :picker-options="pickerOptions"
                            value-format="yyyy-MM-dd hh:mm:ss"
                            format="yyyy-MM-dd hh:mm:ss"
                            placeholder="选择日期">
                        </el-date-picker>
                        <span style="color: #F95601; font-size: 14px;">(次日生效投保请于17:30前提交,超时提交以保险单为准)</span>
                    </div>
                </el-form-item>
                <el-form-item label="投保年龄" v-if="item">
                    <span>{{item.minAge}} è‡³ {{item.maxAge}}</span>
                </el-form-item>
                <el-form-item label="费用" v-if="item">
                    <span>{{item.price}}元</span>
                    <span v-if="item.timeUnit === 0">/天</span>
                    <span v-if="item.timeUnit === 1">/半月</span>
                    <span v-if="item.timeUnit === 2">/月</span>
                    <span v-if="item.timeUnit === 3">/å¹´</span>
                    <span>/人</span>
                </el-form-item>
            </el-form>
        </div>
        <div class="desc_item_from">
            <el-table
                    :data="list"
                    border
                    style="width: 100%">
                <el-table-column
                        prop="code"
                        align="center"
                        label="关联保单号">
                </el-table-column>
                <el-table-column
                        prop="solutionsName"
                        label="保险方案"
                        align="center"
                        width="180">
                </el-table-column>
                <el-table-column
                        prop="startTime"
                        align="center"
                        label="保险生效起期">
                </el-table-column>
                <el-table-column
                        prop="endTime"
                        align="center"
                        label="保险生效止期">
                </el-table-column>
                <el-table-column
                        prop="insureNum"
                        align="center"
                        label="投保人数">
                </el-table-column>
                <el-table-column
                        prop="serviceDays"
                        align="center"
                        label="在保时长(天)">
                </el-table-column>
                <el-table-column
                        prop="currentFee"
                        align="center"
                        label="当前费用(元)">
                </el-table-column>
                <el-table-column
                        prop="fee"
                        align="center"
                        label="总费用(元)">
                </el-table-column>
            </el-table>
        </div>
        <div class="btns">
            <div class="btns_item">
                <el-button type="primary" @click="seleUser">选取员工</el-button>
                <el-button type="danger" @click="deleItem">删除</el-button>
            </div>
            <div class="btns_item">
                <el-button type="primary" @click="sele">选取派遣单位</el-button>
            </div>
        </div>
        <el-table
                :data="form.factory"
                border
                ref="multipleTable"
                @selection-change="handleSelectionChange"
                style="width: 100%;margin-bottom: 15px;">
            <el-table-column
                    type="selection"
                    width="55">
            </el-table-column>
            <el-table-column label="序号" width="80px">
                <template slot-scope="scope">
                    <span>{{scope.$index + 1}}</span>
                </template>
            </el-table-column>
            <el-table-column
                    prop="memberName"
                    label="姓名">
            </el-table-column>
            <el-table-column
                    prop="idCard"
                    label="身份证号">
            </el-table-column>
            <el-table-column
                    prop="oldDuName"
                    label="原派遣单位">
            </el-table-column>
            <el-table-column
                    prop="oldWorkTypeName"
                    label="原所属工种">
            </el-table-column>
            <el-table-column
                    prop="duName"
                    label="变更后派遣单位">
            </el-table-column>
            <el-table-column
                    prop="workTypeName"
                    label="变更后所属工种">
            </el-table-column>
            <el-table-column
                    label="操作">
                <template slot-scope="scope">
                    <el-button type="text" style="color: red;" @click="dele(scope.$index)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
        <div class="info" v-if="item">
            <span v-if="item.specialAgreement">{{item.specialAgreement}}</span>
            <span v-if="item.specialInfo">{{item.specialInfo}}</span>
            <span v-if="item.ortherInfo">{{item.ortherInfo}}</span>
        </div>
        <!--    é€‰æ‹©å‘˜å·¥    -->
        <selectEmployees ref="selectEmployees" @result="getValue" />
        <!--    æ·»åŠ å‘˜å·¥    -->
        <addEmployee ref="addEmployee" @result="getValue" />
        <!--    å¯¼å…¥åå•    -->
        <importEmployees ref="importEmployees" @result="getValue" />
        <!--    ç¡®è®¤å·¥ç§    -->
        <confirmJobType ref="confirmJobType" @result="getUser" />
    </GlobalWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    import selectEmployees from '@/components/enterprise/selectEmployees'
    import addEmployee from '@/components/enterprise/addEmployee'
    import importEmployees from '@/components/enterprise/importEmployees'
    import confirmJobType from '@/components/enterprise/confirmJobType'
    import { all } from '@/api/business/solutions'
    import { getDetail, findList } from '@/api/business/insuranceApply'
    import { create, update, applyChagneDetailList } from '@/api/business/applyChange'
    export default {
        name: 'editFactoryChange',
        extends: BaseOpera,
        components: { GlobalWindow, selectEmployees, addEmployee, importEmployees, confirmJobType },
        data () {
            return {
                form: {
                    id: null,
                    applyChangId: '',
                    solutionId: '',
                    solutionsName: '',
                    applyStartTime: '',
                    applyEndTime: '',
                    factory: []
                },
                pickerOptions: {},
                price: '',
                endTime: '',    //     å®žé™…保险生效止期
                company: [],
                seleData: [],
                item: null,
                // éªŒè¯è§„则
                rules: {
                    applyStartTime: [
                        { required: true, message: '请选择批单生效起期' }
                    ]
                },
                list: []
            }
        },
        created () {
            this.config({
                api: '/business/insuranceApply',
                'field.id': 'id'
            })
        },
        methods: {
            open (title, target) {
                this.title = title
                this.form.addDetailList = []
                this.form.delDetailList = []
                this.list = []
                this.form.id = null
                this.item = null
                this.form.solutionId = ''
                this.form.solutionsName = ''
                this.form.applyStartTime = ''
                this.form.applyEndTime = ''
                if (target && target.id) {
                    this.$nextTick(() => {
                        this.$refs.form.resetFields()
                        this.form.id = target.id
                        this.form.applyChangId = target.applyChangId
                        this.getDetails()
                        this.getapplyChagneDetailList()
                    })
                } else {
                    this.$nextTick(() => {
                        this.$refs.form.resetFields()
                        this.form[this.configData['field.id']] = null
                    })
                }
                this.getCompany()
                this.visible = true
                // this.updatePickerOptions()
            },
            // èŽ·å–æ¢åŽ‚äººå‘˜
            getapplyChagneDetailList() {
                applyChagneDetailList({
                    applyChangId: this.form.applyChangId,
                    types: [2]
                }).then(res => {
                    res.forEach(item => {
                        item.idCard = item.memberIdcardNo
                        item.oldDuId = item.duId
                        item.oldDuName = item.duName
                        item.oldWorkTypeName = item.workTypeName
                        item.oldWorktypeId = item.worktypeId
                        item.workTypeName = ''
                        item.worktypeId = ''
                        item.duId = ''
                        item.duName = ''
                    })
                    this.form.factory = res
                })
            },
            // èŽ·å–æŠ•ä¿è¯¦æƒ…
            getDetails() {
                findList({ applyId: this.form.id })
                    .then(res => {
                        res.forEach(item => {
                            item.idCard = item.idcardNo
                            item.fee = ''
                        })
                        res.forEach(item => {
                            item.oldDuId = item.duId
                            item.oldDuName = item.duName
                            item.oldWorkTypeName = item.workTypeName
                            item.oldWorktypeId = item.worktypeId
                            item.workTypeName = ''
                            item.worktypeId = ''
                            item.duId = ''
                            item.duName = ''
                        })
                        // this.form.factory = res
                    })
                getDetail(this.form.id)
                    .then(res => {
                        this.list.push(res)
                        this.endTime = res.endTime
                        this.form.solutionId = res.solutionId
                        this.form.solutionsName = res.solutionsName
                        this.pickerOptions = {
                            disabledDate(time) {
                                // - 8.64e7
                                return time.getTime() > new Date(res.endTime).getTime() || time.getTime() < new Date().getTime()
                            }
                        };
                        this.changeSolution1(res.solutionId)
                    })
            },
            deleItem() {
                if (this.seleData.length === 0) {
                    this.$message.warning('至少选择一项内容')
                    return
                }
                this.seleData.forEach(item => {
                    this.form.factory.forEach((row, index) => {
                        if (item === row.memberName) {
                            this.form.factory.splice(index, 1)
                        }
                    })
                })
            },
            confirm() {
                this.$refs.form.validate((valid) => {
                    if (valid) {
                        // if (this.form.addDetailList.length === 0) {
                        //     this.$message.warning('至少添加一项员工')
                        //     return
                        // }
                        for (let i = 0; i < this.form.factory.length; i++) {
                            if (!this.form.factory[i].worktypeId || !this.form.factory[i].duId) {
                                this.$message.warning('请完善派遣单位和工种信息')
                                return
                            }
                        }
                        this.form.factory.forEach(item => {
                            item.idcardNo = item.idCard
                        })
                        // let arr = JSON.parse(JSON.stringify(this.form.factory))
                        // arr.forEach(item => {
                        //     item.idcardNo = item.idCard
                        // })
                        this.isWorking = true
                        update({
                            id: this.form.applyChangId,
                            applyId: this.form.id,
                            changeDetailList: this.form.factory,
                            validTime: this.form.applyStartTime,
                            type: 1
                        }).then(() => {
                            this.visible = false
                            this.$tip.apiSuccess('操作成功')
                            this.$emit('success')
                        }).catch(e => {
                            this.$tip.apiFailed(e)
                        }).finally(() => {
                            this.isWorking = false
                        })
                    }
                })
            },
            seleUser() {
                if (!this.form.solutionId) {
                    this.$message.warning('请先选择保险方案')
                    return
                }
                this.$refs.selectEmployees.open('选取员工', { arr: this.form.delDetailList, price: this.price, insuranceApplyId: this.form.id })
            },
            addUser() {
                if (!this.form.solutionId) {
                    this.$message.warning('请先选择保险方案')
                    return
                }
                this.$refs.addEmployee.open('添加员工', { arr: this.form.factory, price: this.price })
            },
            uploadUser() {
                if (!this.form.solutionId) {
                    this.$message.warning('请先选择保险方案')
                    return
                }
                this.$refs.importEmployees.open('上传名单', { arr: this.form.factory, price: this.price })
            },
            // åˆ‡æ¢æ–¹æ¡ˆ
            changeSolution1(e) {
                this.company.forEach(item => {
                    if (item.id === e) {
                        this.item = item
                    }
                })
                // this.tableData.forEach(item => {
                //     item.fee = this.price
                // })
            },
            dele(index) {
                this.form.factory.splice(index, 1)
            },
            getUser(obj) {
                console.log(obj)
                this.seleData.forEach(item => {
                    this.form.factory.forEach(row => {
                        if (item === row.memberName) {
                            row.workTypeName = obj.workTypeName
                            row.worktypeId = obj.worktypeId
                            row.duName = obj.duName
                            row.duId = obj.duId
                        }
                    })
                })
                this.seleData = []
                this.$refs.multipleTable.clearSelection();
            },
            // é€‰æ‹©å‘˜å·¥
            sele() {
                if (!this.form.solutionId) {
                    this.$message.warning('请选择保险方案')
                    return
                }
                if (this.seleData.length === 0) {
                    this.$message.warning('请选择员工')
                    return
                }
                this.$refs.confirmJobType.open('确认工种', { solutionId: this.form.solutionId })
            },
            // æŸ¥è¯¢å…¨éƒ¨æ–¹æ¡ˆ
            getCompany() {
                all({})
                    .then(res => {
                        this.company = res
                    })
            },
            getAgeByIdCard(idCard){
                const sexAndAge = {}
                //获取用户身份证号码
                const userCard = idCard
                //如果用户身份证号码为undefined则返回空
                if (!userCard) {
                    return sexAndAge
                }
                // èŽ·å–å‡ºç”Ÿæ—¥æœŸ
                const yearBirth = userCard.substring(6, 10)
                const monthBirth = userCard.substring(10, 12)
                const dayBirth = userCard.substring(12, 14)
                // èŽ·å–å½“å‰å¹´æœˆæ—¥å¹¶è®¡ç®—å¹´é¾„
                const myDate = new Date()
                const monthNow = myDate.getMonth() + 1
                const dayNow = myDate.getDate()
                let age = myDate.getFullYear() - yearBirth
                if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) {
                    age--
                }
                // å¾—到年龄
                sexAndAge.age = age
                return sexAndAge.age
            },
            handleSelectionChange (e) {
                this.seleData = e.map(item => item.memberName)
            },
            getValue(list) {
                let arr = JSON.parse(JSON.stringify(list))
                arr.forEach(item => {
                    item.oldDuId = item.duId
                    item.oldDuName = item.duName
                    item.oldWorkTypeName = item.workTypeName
                    item.oldWorktypeId = item.worktypeId
                    item.duId = ''
                    item.duName = ''
                    item.workTypeName = ''
                    item.worktypeId = ''
                })
                this.form.factory.push(...arr)
            }
        }
    }
</script>
<style lang="scss" scoped>
    .list {
        width: 100%;
    }
    .btns {
        width: 100%;
        margin-bottom: 15px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        .btns_item {
            display: flex;
            align-items: center;
        }
    }
    .submit {
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        margin-bottom: 15px;
    }
    .desc_item_from {
        width: 100%;
        margin-bottom: 10px;
        .desc_item_from_page {
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: end;
            margin-top: 10px;
        }
    }
    .desc_item_cate {
        width: 100%;
        margin-bottom: 10px;
    }
    .info {
        width: 100%;
        font-size: 14px;
        color: black;
    }
</style>
company/src/components/enterprise/factoryChange.vue
@@ -16,10 +16,10 @@
                    <div style="display: flex; flex-direction: column;">
                        <el-date-picker
                            v-model="form.applyStartTime"
                            type="date"
                            type="datetime"
                            :picker-options="pickerOptions"
                            value-format="yyyy-MM-dd"
                            format="yyyy å¹´ MM æœˆ dd æ—¥"
                            value-format="yyyy-MM-dd hh:mm:ss"
                            format="yyyy-MM-dd hh:mm:ss"
                            placeholder="选择日期">
                        </el-date-picker>
                        <span style="color: #F95601; font-size: 14px;">(次日生效投保请于17:30前提交,超时提交以保险单为准)</span>
company/src/components/enterprise/reinsurance.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,594 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        text="投保申请"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="list">
            <el-form :inline="true" ref="form" :model="form" :rules="rules" class="demo-form-inline">
                <el-form-item label="保险方案">
                    <span>{{form.solutionsName}}</span>
                </el-form-item>
                <el-form-item label="批单生效起期" prop="applyStartTime">
                    <div style="display: flex; flex-direction: column;">
                        <el-date-picker
                                @change="changeApplyStartTime"
                                v-model="form.applyStartTime"
                                type="date"
                                :picker-options="pickerOptions"
                                value-format="yyyy-MM-dd"
                                format="yyyy å¹´ MM æœˆ dd æ—¥"
                                placeholder="选择日期">
                        </el-date-picker>
                        <span style="color: #F95601; font-size: 14px;">(次日生效投保请于17:30前提交,超时提交以保险单为准)</span>
                    </div>
                </el-form-item>
                <el-form-item label="投保年龄" v-if="item">
                    <span>{{item.minAge}} è‡³ {{item.maxAge}}</span>
                </el-form-item>
                <el-form-item label="费用" v-if="item">
                    <span>{{item.price}}元</span>
                    <span v-if="item.timeUnit === 0">/天</span>
                    <span v-if="item.timeUnit === 1">/半月</span>
                    <span v-if="item.timeUnit === 2">/月</span>
                    <span v-if="item.timeUnit === 3">/å¹´</span>
                    <span>/人</span>
                </el-form-item>
            </el-form>
        </div>
        <div class="desc_item_from">
            <el-table
                    :data="list"
                    border
                    style="width: 100%">
                <el-table-column
                        prop="code"
                        align="center"
                        label="关联保单号">
                </el-table-column>
                <el-table-column
                        prop="solutionsName"
                        label="保险方案"
                        align="center"
                        width="180">
                </el-table-column>
                <el-table-column
                        prop="startTime"
                        align="center"
                        label="保险生效起期">
                </el-table-column>
                <el-table-column
                        prop="endTime"
                        align="center"
                        label="保险生效止期">
                </el-table-column>
                <el-table-column
                        prop="insureNum"
                        align="center"
                        label="投保人数">
                </el-table-column>
                <el-table-column
                        prop="serviceDays"
                        align="center"
                        label="在保时长(天)">
                </el-table-column>
                <el-table-column
                        prop="currentFee"
                        align="center"
                        label="当前费用(元)">
                </el-table-column>
                <el-table-column
                        prop="fee"
                        align="center"
                        label="总费用(元)">
                </el-table-column>
            </el-table>
        </div>
        <div class="desc_item_cate">
            <el-tabs v-model="activeName" @tab-click="handleClick">
                <el-tab-pane label="加保员工" name="0"></el-tab-pane>
                <el-tab-pane label="减保员工" name="1"></el-tab-pane>
            </el-tabs>
        </div>
        <div class="btns">
            <div class="btns_item">
                <el-button type="primary" @click="seleUser">选取员工</el-button>
                <el-button type="primary" @click="uploadUser" v-if="activeName !== '1'">导入员工</el-button>
                <el-button type="primary" @click="addUser" v-if="activeName !== '1'">添加员工</el-button>
                <el-button type="danger" @click="deleItem">删除</el-button>
            </div>
            <div class="btns_item" v-if="activeName !== '1'">
                <el-button type="primary" @click="sele">选取派遣单位</el-button>
            </div>
        </div>
        <el-table
                :data="activeName === '0' ? form.addDetailList : form.delDetailList"
                border
                show-summary
                :summary-method="getSummaries"
                ref="multipleTable"
                @selection-change="handleSelectionChange"
                style="width: 100%;margin-bottom: 15px;">
            <el-table-column
                type="selection"
                width="55">
            </el-table-column>
            <el-table-column label="序号" width="80px">
                <template slot-scope="scope">
                    <span>{{scope.$index + 1}}</span>
                </template>
            </el-table-column>
            <el-table-column
                prop="memberName"
                label="姓名">
            </el-table-column>
            <el-table-column
                prop="idCard"
                label="身份证号">
            </el-table-column>
            <el-table-column
                label="年龄">
                <template slot-scope="{row}">
                    <template v-if="item">
                        <span style="color: red;" v-if="(getAgeByIdCard(row.idCard) < item.minAge) || (getAgeByIdCard(row.idCard) > item.maxAge)">{{getAgeByIdCard(row.idCard)}}</span>
                        <span v-else>{{ getAgeByIdCard(row.idCard) }}</span>
                    </template>
                </template>
            </el-table-column>
            <el-table-column
                prop="duName"
                label="派遣单位">
            </el-table-column>
            <el-table-column
                prop="workTypeName"
                label="所属工种">
            </el-table-column>
            <el-table-column
                label="费用">
                <template slot-scope="{row}">
                    <span v-if="activeName === '0'">{{row.fee}}</span>
                    <span v-else>-{{row.fee}}</span>
                </template>
            </el-table-column>
            <el-table-column
                    label="操作">
                <template slot-scope="scope">
                    <el-button type="text" style="color: red;" @click="dele(scope.$index)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
        <div class="info" v-if="item">
            <span v-if="item.specialAgreement">{{item.specialAgreement}}</span>
            <span v-if="item.specialInfo">{{item.specialInfo}}</span>
            <span v-if="item.ortherInfo">{{item.ortherInfo}}</span>
        </div>
        <!--    é€‰æ‹©å‘˜å·¥    -->
        <selectEmployees ref="selectEmployees" @result="getValue" />
        <!--    æ·»åŠ å‘˜å·¥    -->
        <addEmployee ref="addEmployee" @result="getValue" />
        <!--    å¯¼å…¥åå•    -->
        <importEmployees ref="importEmployees" @result="getValue" />
        <!--    ç¡®è®¤å·¥ç§    -->
        <confirmJobType ref="confirmJobType" @result="getUser" />
    </GlobalWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    import selectEmployees from '@/components/enterprise/selectEmployees'
    import addEmployee from '@/components/enterprise/addEmployee'
    import importEmployees from '@/components/enterprise/importEmployees'
    import confirmJobType from '@/components/enterprise/confirmJobType'
    import { all } from '@/api/business/solutions'
    import { getDetail } from '@/api/business/insuranceApply'
    import { update, getChangeCountCyclePriceVO, applyChagneDetailList } from '@/api/business/applyChange'
    export default {
        name: 'reinsurance',
        extends: BaseOpera,
        components: { GlobalWindow, selectEmployees, addEmployee, importEmployees, confirmJobType },
        data () {
            return {
                form: {
                    id: null,
                    applyChangId: '',
                    solutionId: '',
                    solutionsName: '',
                    applyStartTime: '',
                    applyEndTime: '',
                    addDetailList: [],
                    delDetailList: [],
                },
                activeName: '0',
                pickerOptions: {},
                price: '',
                endTime: '',    //     å®žé™…保险生效止期
                company: [],
                seleData: [],
                item: null,
                // éªŒè¯è§„则
                rules: {
                    applyStartTime: [
                        { required: true, message: '请选择批单生效起期' }
                    ]
                },
                list: []
            }
        },
        created () {
            this.config({
                api: '/business/insuranceApply',
                'field.id': 'id'
            })
        },
        methods: {
            open (title, target) {
                this.title = title
                this.form.addDetailList = []
                this.form.delDetailList = []
                this.list = []
                this.form.id = null
                this.item = null
                this.form.solutionId = ''
                this.form.solutionsName = ''
                this.form.applyStartTime = ''
                this.form.applyEndTime = ''
                if (target && target.id) {
                    this.$nextTick(() => {
                        this.$refs.form.resetFields()
                        this.form.id = target.id
                        this.form.applyChangId = target.applyChangId
                        this.getDetails()
                    })
                } else {
                    this.$nextTick(() => {
                        this.$refs.form.resetFields()
                        this.form[this.configData['field.id']] = null
                    })
                }
                this.getCompany()
                this.visible = true
                // this.updatePickerOptions()
            },
            changeApplyStartTime(e) {
                getChangeCountCyclePriceVO({
                    applyId: this.form.id,
                    validTime: e
                }).then(res => {
                    this.price = res.cyclePrice
                    this.form.addDetailList.forEach(item => {
                        item.fee = res.cyclePrice
                    })
                    this.form.delDetailList.forEach(item => {
                        item.fee = res.cyclePrice
                    })
                })
            },
            handleClick(e) {
                this.activeName = e.index
            },
            // èŽ·å–æŠ•ä¿è¯¦æƒ…
            getDetails() {
                applyChagneDetailList({
                    applyChangId: this.form.applyChangId,
                    types: [0]
                }).then(res => {
                    res.forEach(item => {
                        item.fee = ''
                        item.idCard = item.memberIdcardNo
                        item.workTypeName = ''
                        item.worktypeId = ''
                        item.duName = ''
                        item.duId = ''
                    })
                    this.form.addDetailList = res
                })
                applyChagneDetailList({
                    applyChangId: this.form.applyChangId,
                    types: [1]
                }).then(res => {
                    res.forEach(item => {
                        item.fee = ''
                        item.idCard = item.memberIdcardNo
                        item.workTypeName = ''
                        item.worktypeId = ''
                        item.duName = ''
                        item.duId = ''
                    })
                    this.form.delDetailList = res
                })
                getDetail(this.form.id)
                    .then(res => {
                        this.list.push(res)
                        this.endTime = res.endTime
                        this.form.solutionId = res.solutionId
                        this.form.solutionsName = res.solutionsName
                        this.pickerOptions = {
                            disabledDate(time) {
                                // - 8.64e7
                                return time.getTime() > new Date(res.endTime).getTime() || time.getTime() < new Date().getTime()
                            }
                        };
                        this.changeSolution1(res.solutionId)
                    })
            },
            getSummaries(param) {
                const { columns, data } = param
                const sums = []
                columns.forEach((column, index) => {
                    if (index === 0) {
                        sums[index] = '总价'
                        return
                    } else if (index === 7) {
                        let total = 0
                        if (this.activeName === '0') {
                            this.form.addDetailList.forEach(item => {
                                total += item.fee
                            })
                            sums[index] = total
                            return
                        } else {
                            this.form.delDetailList.forEach(item => {
                                total += item.fee
                            })
                            sums[index] = '-' + total
                            return
                        }
                        sums[index] = ''
                    }
                })
                return sums
            },
            deleItem() {
                if (this.seleData.length === 0) {
                    this.$message.warning('至少选择一项内容')
                    return
                }
                if (this.activeName === '0') {
                    this.seleData.forEach(item => {
                        this.form.addDetailList.forEach((row, index) => {
                            if (item === row.name) {
                                this.form.addDetailList.splice(index, 1)
                            }
                        })
                    })
                } else {
                    this.seleData.forEach(item => {
                        this.form.delDetailList.forEach((row, index) => {
                            if (item === row.name) {
                                this.form.delDetailList.splice(index, 1)
                            }
                        })
                    })
                }
            },
            confirm() {
                this.$refs.form.validate((valid) => {
                    if (valid) {
                        // if (this.form.addDetailList.length === 0) {
                        //     this.$message.warning('至少添加一项员工')
                        //     return
                        // }
                        for (let i = 0; i < this.form.addDetailList.length; i++) {
                            if (!this.form.addDetailList[i].worktypeId || !this.form.addDetailList[i].duId) {
                                this.$message.warning('请完善加保派遣单位和工种信息')
                                return
                            }
                        }
                        for (let i = 0; i < this.form.delDetailList.length; i++) {
                            if (!this.form.delDetailList[i].worktypeId || !this.form.delDetailList[i].duId) {
                                this.$message.warning('请完善减保派遣单位和工种信息')
                                return
                            }
                        }
                        this.form.addDetailList.forEach(item => {
                            item.idcardNo = item.idCard
                        })
                        this.form.delDetailList.forEach(item => {
                            item.idcardNo = item.idCard
                        })
                        // let arr = JSON.parse(JSON.stringify(this.form.addDetailList))
                        // arr.forEach(item => {
                        //     item.idcardNo = item.idCard
                        // })
                        this.isWorking = true
                        update({
                            id: this.form.applyChangId,
                            applyId: this.form.id,
                            addDetailList: this.form.addDetailList,
                            delDetailList: this.form.delDetailList,
                            validTime: this.form.applyStartTime,
                            type: 0
                        }).then(() => {
                            this.visible = false
                            this.$tip.apiSuccess('操作成功')
                            this.$emit('success')
                        }).catch(e => {
                            this.$tip.apiFailed(e)
                        }).finally(() => {
                            this.isWorking = false
                        })
                    }
                })
            },
            seleUser() {
                if (!this.form.solutionId) {
                    this.$message.warning('请先选择保险方案')
                    return
                }
                if (this.activeName === '0') {
                    this.$refs.selectEmployees.open('选取员工', { arr: this.form.addDetailList, price: this.price, notInInsuranceApplyId: this.form.id })
                } else {
                    this.$refs.selectEmployees.open('选取员工', { arr: this.form.delDetailList, price: this.price, insuranceApplyId: this.form.id })
                }
            },
            addUser() {
                if (!this.form.solutionId) {
                    this.$message.warning('请先选择保险方案')
                    return
                }
                if (this.activeName === '0') {
                    this.$refs.addEmployee.open('添加员工', { arr: this.form.addDetailList, price: this.price })
                } else {
                    this.$refs.addEmployee.open('添加员工', { arr: this.form.delDetailList, price: this.price })
                }
            },
            uploadUser() {
                if (!this.form.solutionId) {
                    this.$message.warning('请先选择保险方案')
                    return
                }
                if (this.activeName === '0') {
                    this.$refs.importEmployees.open('上传名单', { arr: this.form.addDetailList, price: this.price })
                } else {
                    this.$refs.importEmployees.open('上传名单', { arr: this.form.delDetailList, price: this.price })
                }
            },
            // åˆ‡æ¢æ–¹æ¡ˆ
            changeSolution1(e) {
                this.company.forEach(item => {
                    if (item.id === e) {
                        this.item = item
                    }
                })
                // this.tableData.forEach(item => {
                //     item.fee = this.price
                // })
            },
            dele(index) {
                if (this.activeName === '0') {
                    this.form.addDetailList.splice(index, 1)
                } else {
                    this.form.delDetailList.splice(index, 1)
                }
            },
            getUser(obj) {
                this.seleData.forEach(item => {
                    if (this.activeName === '0') {
                        this.form.addDetailList.forEach(row => {
                            if (item === row.name) {
                                row.workTypeName = obj.workTypeName
                                row.worktypeId = obj.worktypeId
                                row.duName = obj.duName
                                row.duId = obj.duId
                            }
                        })
                    } else {
                        this.form.delDetailList.forEach(row => {
                            if (item === row.name) {
                                row.workTypeName = obj.workTypeName
                                row.worktypeId = obj.worktypeId
                                row.duName = obj.duName
                                row.duId = obj.duId
                            }
                        })
                    }
                })
                this.seleData = []
                this.$refs.multipleTable.clearSelection();
            },
            // é€‰æ‹©å‘˜å·¥
            sele() {
                if (!this.form.solutionId) {
                    this.$message.warning('请选择保险方案')
                    return
                }
                if (this.seleData.length === 0) {
                    this.$message.warning('请选择员工')
                    return
                }
                this.$refs.confirmJobType.open('确认工种', { solutionId: this.form.solutionId })
            },
            // æŸ¥è¯¢å…¨éƒ¨æ–¹æ¡ˆ
            getCompany() {
                all({})
                    .then(res => {
                        this.company = res
                    })
            },
            getAgeByIdCard(idCard){
                if (!idCard) return ''
                const sexAndAge = {}
                //获取用户身份证号码
                const userCard = idCard
                //如果用户身份证号码为undefined则返回空
                if (!userCard) {
                    return sexAndAge
                }
                // èŽ·å–å‡ºç”Ÿæ—¥æœŸ
                const yearBirth = userCard.substring(6, 10)
                const monthBirth = userCard.substring(10, 12)
                const dayBirth = userCard.substring(12, 14)
                // èŽ·å–å½“å‰å¹´æœˆæ—¥å¹¶è®¡ç®—å¹´é¾„
                const myDate = new Date()
                const monthNow = myDate.getMonth() + 1
                const dayNow = myDate.getDate()
                let age = myDate.getFullYear() - yearBirth
                if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) {
                    age--
                }
                // å¾—到年龄
                sexAndAge.age = age
                return sexAndAge.age
            },
            handleSelectionChange (e) {
                this.seleData = e.map(item => item.name)
            },
            getValue(list) {
                console.log(list)
                if (this.activeName === '0') {
                    this.form.addDetailList.push(...list)
                } else {
                    this.form.delDetailList.push(...list)
                }
            }
        }
    }
</script>
<style lang="scss" scoped>
    .list {
        width: 100%;
    }
    .btns {
        width: 100%;
        margin-bottom: 15px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        .btns_item {
            display: flex;
            align-items: center;
        }
    }
    .submit {
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        margin-bottom: 15px;
    }
    .desc_item_from {
        width: 100%;
        margin-bottom: 10px;
        .desc_item_from_page {
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: end;
            margin-top: 10px;
        }
    }
    .desc_item_cate {
        width: 100%;
        margin-bottom: 10px;
    }
    .info {
        width: 100%;
        font-size: 14px;
        color: black;
    }
</style>
company/src/views/business/switchCourt.vue
@@ -109,7 +109,7 @@
import {all as solutionAll, all} from '@/api/business/solutions'
import {pageAll as companyAll} from "@/api/business/company";
export default {
  name: 'add_subtract',
  name: 'switchCourt',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaApplyChangeUnitDetailWindow },
  data () {
company/src/views/enterprise/add_subtract.vue
@@ -55,9 +55,10 @@
                <el-table-column prop="status" label="保单状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.status === 0">待签署</span>
                        <span v-if="row.status === 1">已签章</span>
                        <span v-if="row.status === 2">已上传批单</span>
                        <span v-if="row.status === 3">退回申请</span>
                        <span v-if="row.status === 1">待审核</span>
                        <span v-if="row.status === 2">已生效</span>
                        <span v-if="row.status === 3 || row.status === 4">申请退回</span>
                        <span v-if="row.status === 5 || row.status === 8">已退回</span>
                    </template>
                </el-table-column>
                <el-table-column prop="applyCode" label="关联保单号" min-width="100px"></el-table-column>
company/src/views/enterprise/switchCourt.vue
@@ -2,38 +2,34 @@
    <TableLayout :permissions="['business:applychange:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="保单状态" prop="status">
            <el-form-item label="状态" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择" @change="search">
                    <el-option label="全部" value=""></el-option>
                    <el-option label="待签署" value="0"></el-option>
                    <el-option label="已签章 " value="1"></el-option>
                    <el-option label="已上传批单" value="2"></el-option>
                    <el-option label="退回申请" value="3"></el-option>
                    <el-option label="待审核" value="1"></el-option>
                    <el-option label="已生效" value="2"></el-option>
                    <el-option label="申请退回" value="3"></el-option>
                    <!--                    3 4 éƒ½æ˜¯é€€å›žç”³è¯·ä¸­-->
                    <el-option label="已退回" value="5"></el-option>
                    <el-option label="已关闭" value="6"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="投保企业" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择">
            <el-form-item label="保险方案" prop="baseSolutionsId">
                <el-select v-model="searchForm.baseSolutionsId" placeholder="请选择" @change="search">
                    <el-option
                        v-for="item in options"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="保险方案" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择">
                    <el-option
                        v-for="item in options"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value">
                        v-for="item in solutionList"
                        :key="item.baseId"
                        :label="item.name"
                        :value="item.baseId">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="提交日期" prop="status">
                <el-date-picker
                    v-model="searchForm.status"
                    @change="changeTime"
                    v-model="searchForm.time"
                    type="daterange"
                    value-format="yyyy-MM-dd"
                    range-separator="至"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期">
@@ -56,21 +52,21 @@
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="status" label="保单状态" min-width="100px">
                <el-table-column prop="status" label="状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.status === 0">待签署</span>
                        <span v-if="row.status === 1">已签章</span>
                        <span v-if="row.status === 2">已上传批单</span>
                        <span v-if="row.status === 3">退回申请</span>
                        <span v-if="row.status === 1">待审核</span>
                        <span v-if="row.status === 2">已生效</span>
                        <span v-if="row.status === 3 || row.status === 4">申请退回</span>
                        <span v-if="row.status === 5 || row.status === 8">已退回</span>
                    </template>
                </el-table-column>
                <el-table-column prop="code" label="投保企业" min-width="100px"></el-table-column>
                <el-table-column prop="validCode" label="批单号" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="关联保单号" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="保险方案" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="加保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="减保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="费用变更" min-width="100px"></el-table-column>
                <el-table-column prop="solutionsName" label="保险方案" min-width="100px"></el-table-column>
                <el-table-column prop="changeNum" label="换厂人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="createDate" label="提交时间" min-width="100px"></el-table-column>
                <el-table-column prop="startTime" label="批单生效起期" min-width="100px"></el-table-column>
                <el-table-column
                    label="操作"
                    min-width="120"
@@ -98,7 +94,7 @@
    import TableLayout from '@/layouts/TableLayout'
    import Pagination from '@/components/common/Pagination'
    import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow'
    import {all as solutionAll} from "@/api/business/solutions";
    import {all as solutionAll, all} from '@/api/business/solutions'
    import {pageAll as companyAll} from "@/api/business/company";
    export default {
        name: 'switchCourt',
@@ -109,9 +105,14 @@
                // æœç´¢
                searchForm: {
                    status: '',
                    type: ''
                    type: '1',
                    solutionsId: '',
                    createDateE: '',
                    createDateS: '',
                    time: []
                },
                options: []
                solutionList:[],
                companyList:[]
            }
        },
        created () {
@@ -122,22 +123,36 @@
                'field.main': 'id'
            })
            this.search()
            this.loadSelectList()
        },
      methods:{
        // handlePageChange() {
        //   this.search()
        // },
        loadSelectList() {
          solutionAll({dataType:2}).then(res => {
            this.solutionList = res
          }).catch(err => {
          })
          companyAll({}).then(res => {
            this.companyList = res
          }).catch(err => {
          })
        methods: {
            loadSelectList() {
                solutionAll({dataType:2}).then(res => {
                    this.solutionList = res
                }).catch(err => {
                })
                companyAll({}).then(res => {
                    this.companyList = res
                }).catch(err => {
                })
            },
            changeTime(e) {
                if (e.length > 0) {
                    this.searchForm.createDateS = e[0]
                    this.searchForm.createDateE = e[1]
                } else {
                    this.searchForm.createDateS = ''
                    this.searchForm.createDateE = ''
                }
                this.search()
            },
            reset() {
                this.searchForm.createDateS = ''
                this.searchForm.createDateE = ''
                this.searchForm.time = []
                this.$refs.searchForm.resetFields();
                this.search()
            }
        }
      }
    }
</script>
server/company/src/main/java/com/doumee/api/business/ApplyChagneDetailController.java
@@ -75,6 +75,13 @@
        return ApiResponse.success(applyChagneDetailService.findPageForCompany(pageWrap));
    }
    @ApiOperation("列表查询")
    @PostMapping("/list")
    @RequiresPermissions("business:applychagnedetail:query")
    public ApiResponse<List<ApplyChagneDetail>> findList (@RequestBody ApplyDetailPageDTO applyDetailPageDTO) {
        return ApiResponse.success(applyChagneDetailService.findListForCompany(applyDetailPageDTO));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:applychagnedetail:exportExcel")
server/company/src/main/java/com/doumee/api/business/DispatchUnitController.java
@@ -43,7 +43,7 @@
    }
    @PreventRepeat
    @ApiOperation("添加工种")
    @ApiOperation("添加方案工种")
    @PostMapping("/createSolution")
    @RequiresPermissions("business:dispatchunit:create")
    public ApiResponse createSolution(@RequestBody SaveDispatchUnitDTO saveDispatchUnitDTO) {
server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -113,7 +113,7 @@
    public ApiResponse<InsuranceApply> findById(@PathVariable Integer id) {
        return ApiResponse.success(insuranceApplyService.findDetail(id));
    }
    @ApiOperation("根据ID查询")
    @ApiOperation("企业签署保单")
    @GetMapping("/getSignLink/{id}")
    @RequiresPermissions("business:insuranceapply:query")
    public ApiResponse<String> getSignLink(@PathVariable Integer id) {
@@ -127,7 +127,6 @@
        insuranceApplyService.applyOpt(insuranceApplyOptDTO);
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("获取保单止期与初始金额")
    @PostMapping("/getCountCyclePriceVO")
server/company/src/main/java/com/doumee/api/business/NoticesController.java
@@ -4,13 +4,16 @@
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Notices;
import com.doumee.service.business.NoticesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -71,6 +74,9 @@
    @PostMapping("/page")
    @RequiresPermissions("business:notices:query")
    public ApiResponse<PageData<Notices>> findPage (@RequestBody PageWrap<Notices> pageWrap) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        pageWrap.getModel().setCompanyId(loginUserInfo.getCompanyId());
        pageWrap.getModel().setPalt(Constants.ONE);
        return ApiResponse.success(noticesService.findPage(pageWrap));
    }
server/platform/src/main/java/com/doumee/api/business/NoticesController.java
@@ -6,6 +6,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Notices;
import com.doumee.service.business.NoticesService;
import io.swagger.annotations.Api;
@@ -71,6 +72,7 @@
    @PostMapping("/page")
    @RequiresPermissions("business:notices:query")
    public ApiResponse<PageData<Notices>> findPage (@RequestBody PageWrap<Notices> pageWrap) {
        pageWrap.getModel().setPalt(Constants.ZERO);
        return ApiResponse.success(noticesService.findPage(pageWrap));
    }
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -910,6 +910,181 @@
        }
    }
    public  enum NoticeObjectType {
        INSURANCE_APPLY(0, "投保申请","保险方案"),
        APPLY_CHANGE(1, "加减保申请","保险方案"),
        CHANGE_FACTORY(2, "员工换厂申请","保险方案"),
        DISPATCH_UNIT(3, "派遣单位申请","派遣单位"),
        TAXES(4, "开票申请","开票金额"),
        SETTLE_CLAIMS(5, "报案理赔","报案人")
        ;
        // æˆå‘˜å˜é‡
        private int key;
        private String name;
        private String info;
        // æž„造方法
        NoticeObjectType(int key, String name,String info) {
            this.name = name;
            this.key = key;
            this.info = info;
        }
        // æ™®é€šæ–¹æ³•
        public static String getName(int index) {
            for (NoticeObjectType c : NoticeObjectType.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        // get set æ–¹æ³•
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public String getInfo() {
            return info;
        }
        public void setInfo(String info) {
            this.info = info;
        }
    }
    public  enum NoticeType {
        ZERO(0, "待审批","","","待审核","已申请","待受理"),
        ONE(1, "企业待签署","","","工种待审核","","完成受理"),
        TWO(2, "待出单","待审批","待审批","","",""),
        THREE(3, "申请退回","申请退回","申请退回","","",""),
        FOUR(4, "已退回","已退回","已退回","","",""),
        FIVE(5, "申请驳回","申请驳回","申请驳回","","","")
        ;
        // æˆå‘˜å˜é‡
        private int status;
        private String insuranceApplyDetail;
        private String applyChangeDetail;
        private String changeFactoryDetail;
        private String dispatchUnitDetail;
        private String taxesDetail;
        private String settleClaimsDetail;
        // æž„造方法
        NoticeType(int status, String insuranceApplyDetail,String applyChangeDetail
                , String changeFactoryDetail,String dispatchUnitDetail
                , String taxesDetail,String settleClaimsDetail) {
            this.status = status;
            this.insuranceApplyDetail = insuranceApplyDetail;
            this.applyChangeDetail = applyChangeDetail;
            this.changeFactoryDetail = changeFactoryDetail;
            this.dispatchUnitDetail = dispatchUnitDetail;
            this.taxesDetail = taxesDetail;
            this.settleClaimsDetail = settleClaimsDetail;
        }
        // æ™®é€šæ–¹æ³•
        public static String getDetail(int status,int type) {
            for (NoticeType c : NoticeType.values()) {
                if (c.getStatus() == status) {
                    if(type==NoticeObjectType.INSURANCE_APPLY.getKey() ){
                        return c.getInsuranceApplyDetail();
                    }else if(type == NoticeObjectType.APPLY_CHANGE.getKey()){
                        return c.getApplyChangeDetail();
                    }else if(type == NoticeObjectType.CHANGE_FACTORY.getKey()){
                        return c.getChangeFactoryDetail();
                    }else if(type == NoticeObjectType.DISPATCH_UNIT.getKey()){
                        return c.getDispatchUnitDetail();
                    }else if(type == NoticeObjectType.TAXES.getKey()){
                        return c.getTaxesDetail();
                    }else if(type == NoticeObjectType.SETTLE_CLAIMS.getKey()){
                        return c.getSettleClaimsDetail();
                    }
                }
            }
            return null;
        }
        // get set æ–¹æ³•
        public int getStatus() {
            return status;
        }
        public void setStatus(int status) {
            this.status = status;
        }
        public String getInsuranceApplyDetail() {
            return insuranceApplyDetail;
        }
        public void setInsuranceApplyDetail(String name) {
            this.insuranceApplyDetail = insuranceApplyDetail;
        }
        public String getApplyChangeDetail() {
            return applyChangeDetail;
        }
        public void setApplyChangeDetail(String info) {
            this.applyChangeDetail = applyChangeDetail;
        }
        public String getChangeFactoryDetail() {
            return changeFactoryDetail;
        }
        public void setChangeFactoryDetail(String info) {
            this.changeFactoryDetail = changeFactoryDetail;
        }
        public String getDispatchUnitDetail() {
            return dispatchUnitDetail;
        }
        public void setDispatchUnitDetail(String info) {
            this.dispatchUnitDetail = dispatchUnitDetail;
        }
        public String getTaxesDetail() {
            return taxesDetail;
        }
        public void setTaxesDetail(String info) {
            this.taxesDetail = taxesDetail;
        }
        public String getSettleClaimsDetail() {
            return settleClaimsDetail;
        }
        public void setSettleClaimsDetail(String info) {
            this.settleClaimsDetail = settleClaimsDetail;
        }
    }
    public static BigDecimal countDetailFee(Solutions solutions,Date startDate, Date endDate){
        //查询保险实际周期
        Integer cycle = DateUtil.calculateBetween(endDate,startDate,solutions.getTimeUnit());
server/service/src/main/java/com/doumee/dao/business/join/NoticesJoinMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.dao.business.join;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.Notices;
import com.github.yulichang.base.mapper.MPJJoinMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2024/01/16 10:03
 */
public interface NoticesJoinMapper extends MPJJoinMapper<Notices> {
}
server/service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -104,4 +104,13 @@
    @TableField(exist = false)
    private String workTypeName;
    @ApiModelProperty(value = "企业名称")
    @TableField(exist = false)
    private String companyName;
    @ApiModelProperty(value = "保险状态:1=保障中;2=不在保")
    @TableField(exist = false)
    private Integer solutionsStatus;
}
server/service/src/main/java/com/doumee/dao/business/model/MemberInsurance.java
@@ -78,111 +78,91 @@
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
    @ExcelColumn(name="主键")
    private Integer id;
    @ApiModelProperty(value = "创建人编码", example = "1")
    @ExcelColumn(name="创建人编码")
    private Integer creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
    @ExcelColumn(name="更新人编码")
    private Integer editor;
    @ApiModelProperty(value = "更新时间")
    @ExcelColumn(name="更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date editDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    @ExcelColumn(name="是否删除0否 1是")
    private Integer isdeleted;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
    private String remark;
    @ApiModelProperty(value = "排序码", example = "1")
    @ExcelColumn(name="排序码")
    private Integer sortnum;
    @ApiModelProperty(value = "投保申请编码(关联insurance_apply", example = "1")
    @ExcelColumn(name="投保申请编码(关联insurance_apply")
    private Integer applyId;
    @ApiModelProperty(value = "人员编码(关联memeber)", example = "1")
    @ExcelColumn(name="人员编码(关联memeber)")
    private Integer memberId;
    @ApiModelProperty(value = "实际保险生效止期")
    @ExcelColumn(name="实际保险生效止期")
    @ExcelColumn(name="保险生效止期",index = 7)
    private Date endTime;
    @ApiModelProperty(value = "实际保险生效起期")
    @ExcelColumn(name="实际保险生效起期")
    @ExcelColumn(name="保险生效起期",index = 6)
    private Date startTime;
    @ApiModelProperty(value = "身份证号码")
    @ExcelColumn(name="身份证号码")
    private String idcardNo;
    @ApiModelProperty(value = "方案主键", example = "1")
    @ExcelColumn(name="方案主键")
    private Integer solutionId;
    @ApiModelProperty(value = "派遣单位编码(关联dispatch_unit)", example = "1")
    @ExcelColumn(name="派遣单位编码(关联dispatch_unit)")
    private Integer duId;
    @ApiModelProperty(value = "工种编码(关联worktype)", example = "1")
    @ExcelColumn(name="工种编码(关联worktype)")
    private Integer worktypeId;
    @ApiModelProperty(value = "当前产生费用", example = "1")
    @ExcelColumn(name="当前产生费用")
    private BigDecimal currentFee;
    @ApiModelProperty(value = "费用", example = "1")
    @ExcelColumn(name="费用")
    private BigDecimal fee;
    @ApiModelProperty(value = "性别 0男 1女", example = "1")
    @ExcelColumn(name="性别 0男 1女")
//    @ExcelColumn(name="性别",valueMapping = "0=男;1=女;")
    private Integer sex;
    @ApiModelProperty(value = "保单号")
    @ExcelColumn(name="保单号")
    @ExcelColumn(name="保单号",index = 2)
    private String bdCode;
    @ApiModelProperty(value = "批单号")
    @ExcelColumn(name="批单号")
    @ExcelColumn(name="批单号",index = 3)
    private String pdCode;
    @ApiModelProperty(value = "保险方案名称")
    @ExcelColumn(name="保险方案名称")
    @ExcelColumn(name="保险方案",index = 1)
    private String solutionName;
    @ApiModelProperty(value = "批单申请编码", example = "1")
    @ExcelColumn(name="批单申请编码")
    private Integer applyChangeId;
    @ApiModelProperty(value = "工种名称")
    @ExcelColumn(name="工种名称")
    @ExcelColumn(name="工种名称",index = 5)
    private String worktypeName;
    @ApiModelProperty(value = "派遣单位名称")
    @ExcelColumn(name="派遣单位名称")
    @ExcelColumn(name="派遣单位",index = 4)
    private String duName;
    @ApiModelProperty(value = "关联明细主键", example = "1")
    @ExcelColumn(name="关联明细主键")
    private Integer relationId;
//    @ApiModelProperty(value = "关联明细类型:0=投保申请;1=加减保/换厂", example = "1")
server/service/src/main/java/com/doumee/dao/business/model/Notices.java
@@ -1,6 +1,9 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -69,15 +72,20 @@
    @ApiModelProperty(value = "关联对象类型")
    @ExcelColumn(name="关联对象类型")
    private String objType;
    private Integer objType;
    @ApiModelProperty(value = "关联对象名称")
    @ExcelColumn(name="关联对象名称")
    private String objName;
    @ApiModelProperty(value = "类型 0平台消息 1企业消息")
    @ExcelColumn(name="类型 0平台消息 1企业消息")
    private String type;
    @ApiModelProperty(value = "类型")
    @ExcelColumn(name="类型")
    private Integer type;
    @ApiModelProperty(value = "类型描述")
    @TableField(exist = false)
    private String typeDetail;
    @ApiModelProperty(value = "关联参数1")
    @ExcelColumn(name="关联参数1")
@@ -107,6 +115,10 @@
    @ExcelColumn(name="关联企业编码(关联company)")
    private Integer companyId;
    @ApiModelProperty(value = "关联企业名称")
    @TableField(exist = false)
    private String companyName;
    @ApiModelProperty(value = "平台 0平台消息 1企业消息", example = "1")
    @ExcelColumn(name="平台 0平台消息 1企业消息")
    private Integer palt;
@@ -119,4 +131,35 @@
    @ExcelColumn(name="是否已读 0未读 1已读")
    private Integer readed;
    public Notices(){
    }
    /**
     *
     * @param noticeType æ¶ˆæ¯ç±»åž‹
     * @param palt æ•°æ®å¹³å° 0平台消息 1企业消息
     * @param objId å…³è”对象主键
     * @param content   æ–¹æ¡ˆåç§°/单位名称/开票金额/报案人
     * @param companyId ä¼ä¸šä¸»é”®
     */
    public Notices(Constants.NoticeObjectType noticeObjectType,Integer palt, Integer objId, String content, Integer companyId,Constants.NoticeType noticeType){
        this.createDate = new Date();
        this.creator = userId ;
        this.isdeleted = Constants.ZERO ;
        this.title = noticeObjectType.getName();
        this.objType = noticeObjectType.getKey();
        this.objId = objId;
        this.info = noticeObjectType.getInfo();
        this.content = content;
        this.status = Constants.ZERO;
        this.readed = Constants.ZERO;
        this.type = noticeType.getStatus();
        this.companyId = companyId;
        this.palt = palt ;
    }
}
server/service/src/main/java/com/doumee/service/business/ApplyChagneDetailService.java
@@ -90,7 +90,7 @@
    PageData<ApplyChagneDetail> findPageForCompany(PageWrap<ApplyDetailPageDTO> pageWrap);
    List<ApplyChagneDetail> findListForCompany(ApplyDetailPageDTO applyDetailPageDTO);
    /**
     * æ¡ä»¶ç»Ÿè®¡
     *
server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java
@@ -232,6 +232,29 @@
        return pageData;
    }
    @Override
    public List<ApplyChagneDetail> findListForCompany(ApplyDetailPageDTO applyDetailPageDTO) {
        MPJLambdaWrapper<ApplyChagneDetail> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(ApplyChagneDetail.class);
        queryWrapper.select("t2.name",ApplyChagneDetail::getWorkTypeName);
        queryWrapper.select("t3.name",ApplyChagneDetail::getDuName);
        queryWrapper.select("t4.name",ApplyChagneDetail::getOldWorkTypeName);
        queryWrapper.select("t5.name",ApplyChagneDetail::getOldDuName);
        queryWrapper.selectAs(Member::getName,ApplyChagneDetail::getMemberName);
        queryWrapper.selectAs(Member::getSex,ApplyChagneDetail::getSex);
        queryWrapper.selectAs(Member::getIdcardNo,ApplyChagneDetail::getMemberIdcardNo);
        queryWrapper.leftJoin(Member.class,Member::getId,ApplyChagneDetail::getMemberId);
        queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getWorktypeId);
        queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getDuId);
        queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getOldWorktypeId);
        queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getOldDuId);
        queryWrapper.in(CollectionUtils.isNotEmpty(applyDetailPageDTO.getTypes()),ApplyChagneDetail::getType,applyDetailPageDTO.getTypes());
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getApplyChangId()),ApplyChagneDetail::getApplyChangeId,applyDetailPageDTO.getApplyChangId());
        return applyChangeDetailJoinMapper.selectJoinList(ApplyChagneDetail.class, queryWrapper);
    }
    @Override
    public long count(ApplyChagneDetail applyChagneDetail) {
        QueryWrapper<ApplyChagneDetail> wrapper = new QueryWrapper<>(applyChagneDetail);
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -101,6 +101,8 @@
    @Autowired
    private SolutionsMapper solutionsMapper;
    @Autowired
    private NoticesMapper noticesMapper;
    /**
     * å¹³å°é€€å›žæŠ•保
     * @param param
@@ -126,7 +128,7 @@
        ApplyChange update = new ApplyChange();
        update.setEditDate(new Date());
        update.setEditor(user.getId());
        update.setStatus(Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey());
        update.setStatus(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey());
        update.setCheckDate(update.getEditDate());
        update.setCheckInfo(param.getCheckInfo());
        update.setCheckUserId(user.getId());
@@ -510,10 +512,23 @@
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId());
        if(Objects.isNull(insuranceApply)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(insuranceApply.getIsdeleted().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"数据已删除,无法进行该操作");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Constants.ApplyLogType applyLogType = null;
        String info = "";
        ApplyChange update = new ApplyChange();
        Constants.NoticeType noticeType = Constants.NoticeType.FOUR;
        if(param.getDealBackApply() ==1){
            //如果是驳回,只能可驳回已签章状态下的退回申请状态进行操作
            if(!Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())){
@@ -522,12 +537,8 @@
            applyLogType = Constants.ApplyLogType.CA_PALTFORM_REFUSE_APPLY;
            info = applyLogType.getInfo();
            info = info.replace("${param}", param.getCheckInfo());
//
            if( Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())){
                update.setStatus(Constants.ApplyChangeStatus.SIGNATURE.getKey());
            }else if( Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey())){
                update.setStatus(Constants.ApplyChangeStatus.UPLOAD.getKey());
            }
            update.setStatus(Constants.ApplyChangeStatus.SIGNATURE.getKey());
            noticeType = Constants.NoticeType.FIVE;
        }else{
            //如果是同意,两种申请退回状态都可操作
            if(!(Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())
@@ -537,6 +548,7 @@
            update.setStatus(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey());
            applyLogType = Constants.ApplyLogType.CA_PLATFORM_AGREE_BACK_APPLY;
        }
        update.setEditDate(new Date());
        update.setEditor(user.getId());
        //同意退回,直接回到最初状态,如果驳回退回申请,则保单状态回到待上传保险单
@@ -545,6 +557,18 @@
        update.setCheckUserId(user.getId());
        update.setId(model.getId());
        applyChangeMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.APPLY_CHANGE;
        if(model.getType().equals(Constants.ONE)){
            noticeObjectType = Constants.NoticeObjectType.CHANGE_FACTORY;
        }
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,model.getId(),solutions.getName(),
                model.getCompanyId(), noticeType);
        noticesMapper.insert(notices);
        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
        applyLogMapper.insert(log);
@@ -568,7 +592,6 @@
        if (!loginUserInfo.getType().equals(Constants.ONE)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "用户类型错误:非企业用户无法进行该操作");
        }
        BigDecimal fee = BigDecimal.ZERO;
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyChange.getApplyId());
        if (Objects.isNull(insuranceApply)) {
@@ -606,12 +629,13 @@
        applyChange.setStatus(Constants.ZERO);
        applyChangeMapper.insert(applyChange);
        this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,fee);
        BigDecimal fee  = this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,BigDecimal.ZERO);
        ApplyChange applyChangeFee = new ApplyChange();
        applyChangeFee.setId(applyChange.getId());
        applyChangeFee.setFee(fee);
        applyChangeMapper.updateById(applyChangeFee);
        this.saveApplyLog(applyChange,Constants.ApplyChangeLogStatus.UPLOAD,null);
        return applyChange.getId();
@@ -640,7 +664,9 @@
        if(Objects.isNull(dbApplyChange)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!dbApplyChange.getStatus().equals(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey())){
        if(! (dbApplyChange.getStatus().equals(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey())
        || dbApplyChange.getStatus().equals(Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey()) )
        ){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "业务保申请单状态错误");
        }
@@ -676,12 +702,12 @@
        applyChange.setEditDate(new Date());
        applyChange.setEditor(loginUserInfo.getId());
        applyChange.setApplyStartTime(applyChange.getValidTime());
        applyChange.setStatus(Constants.ZERO);
        BigDecimal fee = BigDecimal.ZERO;
        //删除历史数据
        applyChagneDetailJoinMapper.delete(new QueryWrapper<ApplyChagneDetail>().lambda().eq(ApplyChagneDetail::getApplyChangeId,applyChange.getId()));
        this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,fee);
        BigDecimal fee = this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,BigDecimal.ZERO);
        applyChange.setFee(fee);
        applyChangeMapper.updateById(applyChange);
        this.saveApplyLog(applyChange,Constants.ApplyChangeLogStatus.UPLOAD,null);
@@ -689,7 +715,7 @@
    }
    public void dealApplyChangeData(ApplyChange applyChange,InsuranceApply insuranceApply,CompanySolution companySolution,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal fee){
    public BigDecimal dealApplyChangeData(ApplyChange applyChange,InsuranceApply insuranceApply,CompanySolution companySolution,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal fee){
        //查询保险方案下的所有派遣单位
@@ -725,7 +751,7 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行加保");
            }
            //加保明细数据 è®¡ç®—金额  æ ¹æ®æ‰¹å•æ—¶é—´ è®¡ç®—
            applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(insuranceApply.getStartTime(),1));
            applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(applyChange.getValidTime(),1));
            CountCyclePriceVO countCyclePriceVO =  this.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO);
            BigDecimal detailFee = countCyclePriceVO.getCyclePrice();
@@ -741,7 +767,7 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行减保");
            }
            //减保明细数据 è®¡ç®—金额  æ ¹æ®æ‰¹å•æ—¶é—´ å‰ä¸€å¤© è®¡ç®—
            applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(insuranceApply.getStartTime(),3));
            applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(applyChange.getValidTime(),3));
            CountCyclePriceVO countCyclePriceVO =  this.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO);
            BigDecimal detailFee = countCyclePriceVO.getCyclePrice();
            this.delChangeDetail(applyChange,delDetailList,insuranceApply,solutions,loginUserInfo,detailFee);
@@ -753,6 +779,7 @@
        if (CollectionUtils.isNotEmpty(changeDetailList)) {
            this.changeDetail(applyChange,changeDetailList,duWorktypeList,duSolutionList,loginUserInfo);
        }
        return fee;
    }
@@ -798,6 +825,7 @@
            if (applyChagneDetailJoinMapper.selectJoinCount(
                    new MPJLambdaWrapper<ApplyChagneDetail>()
                            .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                            .eq(ApplyChange::getApplyId,applyChange.getApplyId())
                            .eq(ApplyChagneDetail::getMemberId, applyChagneDetail.getMemberId())
                            .in(ApplyChange::getStatus, Constants.ZERO, Constants.ONE)
            ) > Constants.ZERO) {
@@ -822,7 +850,7 @@
            applyChagneDetail.setType(Constants.ONE);
            applyChagneDetail.setStartTime(DateUtil.getMontageDate(applyDetail.getStartTime(),1));
            applyChagneDetail.setEndTime(DateUtil.getMontageDate(applyChange.getStartTime(),3));
            applyChagneDetail.setEndTime(DateUtil.getMontageDate(applyChange.getApplyStartTime(),3));
            applyChagneDetail.setFee( detailFee.multiply(new BigDecimal(-1)));
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
@@ -891,6 +919,7 @@
                    new MPJLambdaWrapper<ApplyChagneDetail>()
                            .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                            .eq(ApplyChagneDetail::getMemberId, applyChagneDetail.getMemberId())
                            .eq(ApplyChange::getApplyId,applyChange.getApplyId())
                            .in(ApplyChange::getStatus, Constants.ZERO, Constants.ONE)
            ) > Constants.ZERO) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在申请中的加减保/换厂单据");
@@ -963,10 +992,11 @@
            List<ApplyDetail>  applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                    .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
                    .le(ApplyDetail::getStartTime, DateUtil.getDate(new Date(),"yyyy-MM-dd HH:mm:ss"))
                    .ge(ApplyDetail::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd HH:mm:ss")));
                    .ge(ApplyDetail::getEndTime, new Date()));
            if(applyDetailList.size()>Constants.ONE){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,存在多条数据");
            }else if(applyDetailList.size()==Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】未查询到投保记录");
            }
            ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
            if(applyChange.getValidTime().compareTo( applyDetail.getEndTime())>0){
@@ -1128,7 +1158,7 @@
    public void changeOpt(ApplyChangeOptDTO applyChangeOptDTO){
        if(Objects.isNull(applyChangeOptDTO)
                ||Objects.isNull(applyChangeOptDTO.getApplyId())
                ||StringUtils.isBlank(applyChangeOptDTO.getOptIllustration())){
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -1144,11 +1174,20 @@
        if(applyChange.getIsdeleted().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"数据已删除,无法进行该操作");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        Constants.ApplyChangeLogStatus applyChangeLogStatus = Constants.ApplyChangeLogStatus.RETURN_APPLY;
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.APPLY_CHANGE;
        if(applyChange.getType().equals(Constants.ONE)){
            noticeObjectType = Constants.NoticeObjectType.CHANGE_FACTORY;
        }
        if(applyChangeOptDTO.getOptType().equals(3)){
            //发起退回申请
            if(loginUserInfo.getType().equals(Constants.ONE)){
            if(!loginUserInfo.getType().equals(Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非企业端用户无法进行该操作");
            }
            if(!(applyChange.getStatus().equals(Constants.ApplyChangeStatus.UPLOAD.getKey())
@@ -1161,6 +1200,14 @@
            }else{
                applyChange.setStatus(Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey());
            }
            //存储待办信息
            //删除其他待办
            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,applyChange.getId()));
            Notices notices = new Notices(noticeObjectType,Constants.ZERO,applyChange.getId(),solutions.getName(),
                    applyChange.getCompanyId(), Constants.NoticeType.THREE);
            noticesMapper.insert(notices);
        }else if(applyChangeOptDTO.getOptType().equals(4)){
            applyChangeLogStatus = Constants.ApplyChangeLogStatus.PLATFORM_AGREE;
@@ -1192,13 +1239,19 @@
        }else if(applyChangeOptDTO.getOptType().equals(6)){
            //企业关闭
            applyChangeLogStatus = Constants.ApplyChangeLogStatus.CLOSE;
            if(loginUserInfo.getType().equals(Constants.ONE)){
            if(!loginUserInfo.getType().equals(Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非企业端用户无法进行该操作");
            }
            if(!applyChange.getStatus().equals(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据状态错误无法进行该操作!");
            }
            applyChange.setStatus(Constants.ApplyChangeStatus.CLOSE.getKey());
            //存储待办信息
            //删除其他待办
            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,applyChange.getId()));
        }else{
            throw new BusinessException(ResponseStatus.BAD_REQUEST  );
        }
@@ -1326,6 +1379,14 @@
        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,企业尚未具备在线签章条件,请联系平台管理员确认~");
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId());
        if(Objects.isNull(insuranceApply)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询保单信息");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        String fileUrl = null;
        if(Constants.equalsObject(model.getType(), Constants.ONE)){
              fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"换厂申请表");
@@ -1349,6 +1410,8 @@
        update.setSignApplyNo(applyNo);
        applyChangeMapper.updateById(update);
        return  link;
    }
server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java
@@ -8,10 +8,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.DispatchUnitMapper;
import com.doumee.dao.business.DuLogMapper;
import com.doumee.dao.business.DuSolutionMapper;
import com.doumee.dao.business.DuWorktypeMapper;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.*;
import com.doumee.dao.business.join.DispatchUnitJoinMapper;
import com.doumee.dao.business.join.DuLogJoinMapper;
@@ -71,6 +68,9 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private NoticesMapper noticesMapper;
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer checkWorktype(DispatchUnit param) {
@@ -126,6 +126,13 @@
            //存储操作历史
            this.saveDuLog(update,Constants.DispatchUnitLogType.WORK_TYPE_AUDIT_UN_PASS,update.getCheckInfo());
        }
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.DISPATCH_UNIT;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        return  1;
    }
@@ -263,6 +270,13 @@
            //存储操作历史
            this.saveDuLog(dispatchUnit,Constants.DispatchUnitLogType.AUDIT_UN_PASS,update.getCheckInfo());
        }
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.DISPATCH_UNIT;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,dispatchUnit.getId()));
        return  1;
    }
    @Override
@@ -356,6 +370,16 @@
                duWorktypeMapper.insert(duWorktype);
            }
        }
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.DISPATCH_UNIT;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,dispatchUnit.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,dispatchUnit.getId(),dispatchUnit.getName(),
                dispatchUnit.getCompanyId(), Constants.NoticeType.ZERO);
        noticesMapper.insert(notices);
        return dispatchUnit.getId();
    }
@@ -402,6 +426,15 @@
//        this.dealDuData(saveDispatchUnitDTO,loginUserInfo);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.DISPATCH_UNIT;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,dispatchUnit.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,dispatchUnit.getId(),dispatchUnit.getName(),
                dispatchUnit.getCompanyId(), Constants.NoticeType.ZERO);
        noticesMapper.insert(notices);
        return dispatchUnit.getId();
    }
@@ -433,6 +466,15 @@
        //存储操作历史
        this.saveDuLog(dispatchUnit,Constants.DispatchUnitLogType.ADD_WORK_TYPE,null);
        this.dealDuData(saveDispatchUnitDTO,loginUserInfo);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.DISPATCH_UNIT;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,dispatchUnit.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,dispatchUnit.getId(),dispatchUnit.getName(),
                dispatchUnit.getCompanyId(), Constants.NoticeType.ONE);
        noticesMapper.insert(notices);
        return dispatchUnit.getId();
    }
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -96,6 +96,9 @@
    @Autowired
    private DuWorktypeMapper duWorktypeMapper;
    @Autowired
    private NoticesMapper noticesMapper;
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer back(InsuranceApply insuranceApply) {
@@ -110,6 +113,12 @@
        if(Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该申请状态已流转,当前不支持该操作~");
        }
        Solutions solutions = solutionsMapper.selectById(model.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        InsuranceApply update = new InsuranceApply();
        update.setEditDate(new Date());
@@ -120,6 +129,15 @@
        update.setCheckUserId(user.getId());
        update.setId(model.getId());
        insuranceApplyMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,insuranceApply.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ONE,insuranceApply.getId(),solutions.getName(),
                model.getCompanyId(), Constants.NoticeType.FOUR);
        noticesMapper.insert(notices);
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.PLATFORM_RETURN;
        String info =applyLogType.getInfo();
@@ -344,7 +362,10 @@
        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        Solutions solutions = solutionsMapper.selectById(model.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Constants.ApplyLogType applyLogType = null;
        String info = "";
@@ -384,6 +405,7 @@
        update.setEditDate(new Date());
        update.setSignApplyNo(applyNo);
        insuranceApplyMapper.updateById(update);
        return  link;
    }
    public String uploadSignFile(String link){
@@ -418,6 +440,13 @@
        update.setId(model.getId());
        insuranceApplyMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,model.getId(),model.getSolutionsName(),model.getCompanyId(),Constants.NoticeType.TWO);
        noticesMapper.insert(notices);
        Multifile f = new Multifile();
        f.setIsdeleted(Constants.ZERO);
        f.setCreator(model.getCreator());
@@ -448,6 +477,17 @@
        update.setCheckUserId(model.getCreator());
        update.setId(model.getId());
        applyChangeMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.APPLY_CHANGE;
        if(model.getType().equals(Constants.ONE)){
            noticeObjectType = Constants.NoticeObjectType.CHANGE_FACTORY;
        }
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ONE,model.getId(),model.getSolutionsName(),
                model.getCompanyId(), Constants.NoticeType.TWO);
        noticesMapper.insert(notices);
        Multifile f = new Multifile();
        f.setIsdeleted(Constants.ZERO);
@@ -651,6 +691,11 @@
//        info = info.replace("${param}", update.getCheckInfo());
        ApplyLog log = new ApplyLog(update,applyLogType.getName(),StringUtils.isNotBlank(update.getCheckInfo())?info:"",update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
        applyLogMapper.insert(log);
        //删除其他待办
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,insuranceApply.getId()));
        return  1;
    }
@@ -675,6 +720,11 @@
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该申请状态已流转,当前不支持该操作~");
        }
        Solutions solutions = solutionsMapper.selectById(model.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        Constants.ApplyLogType applyLogType = null;
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        InsuranceApply update = new InsuranceApply();
@@ -684,15 +734,26 @@
        update.setCheckInfo(insuranceApply.getCheckInfo());
        update.setCheckUserId(user.getId());
        update.setId(model.getId());
        Constants.NoticeType noticeType = Constants.NoticeType.ONE;
        if(insuranceApply.getDealBackApply() ==1){
            //如果是不通过
            applyLogType = Constants.ApplyLogType.PLATFORM_RETURN ;
            update.setStatus(Constants.InsuranceApplyStatus.PLATFORM_RETURN.getKey());
            noticeType = Constants.NoticeType.FOUR;
        }else{
            applyLogType = Constants.ApplyLogType.PLATFORM_CHECK_PASS;
            update.setStatus(Constants.InsuranceApplyStatus.PLATFORM_CHECK_PASS.getKey());
        }
        insuranceApplyMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ONE,model.getId(),solutions.getName(),model.getCompanyId(),noticeType);
        noticesMapper.insert(notices);
        String info =applyLogType.getInfo();
        info = info.replace("${param}", update.getCheckInfo());
        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
@@ -716,6 +777,10 @@
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!loginUserInfo.getType().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户类型错误:非企业用户无法进行该操作");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
        //判断是否存在重复信息
@@ -746,13 +811,22 @@
        //处理下级数据
        this.dealApplyDetailData(insuranceApply,applyDetailList,loginUserInfo,countCyclePriceVO);
        this.dealApplyDetailData(insuranceApply,solutions,applyDetailList,loginUserInfo,countCyclePriceVO);
        InsuranceApply updBean = new InsuranceApply();
        updBean.setId(insuranceApply.getId());
        updBean.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
        insuranceApplyMapper.updateById(updBean);
        //存储日志数据
        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
        //发送待办业务
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,insuranceApply.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,insuranceApply.getId(),solutions.getName(),insuranceApply.getCompanyId(),Constants.NoticeType.ZERO);
        noticesMapper.insert(notices);
        return insuranceApply.getId();
    }
@@ -811,22 +885,33 @@
        insuranceApply.setEndTime(countCyclePriceVO.getEndDate());
        applyDetailMapper.delete(new QueryWrapper<ApplyDetail>().lambda().eq(ApplyDetail::getApplyId,insuranceApply.getId()));
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        //处理下级数据
        this.dealApplyDetailData(insuranceApply,applyDetailList,loginUserInfo,countCyclePriceVO);
        this.dealApplyDetailData(insuranceApply,solutions,applyDetailList,loginUserInfo,countCyclePriceVO);
        insuranceApply.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
        insuranceApplyMapper.updateById(insuranceApply);
        //存储日志数据
        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,insuranceApply.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,insuranceApply.getId(),solutions.getName(),insuranceApply.getCompanyId(),Constants.NoticeType.ZERO);
        noticesMapper.insert(notices);
        return insuranceApply.getId();
    }
    public void dealApplyDetailData(InsuranceApply insuranceApply,List<ApplyDetail> applyDetailList,LoginUserInfo loginUserInfo,CountCyclePriceVO  countCyclePriceVO){
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
    public void dealApplyDetailData(InsuranceApply insuranceApply,Solutions solutions,List<ApplyDetail> applyDetailList,LoginUserInfo loginUserInfo,CountCyclePriceVO  countCyclePriceVO){
        //查询保险方案下的所有派遣单位
        List<DuSolution>  duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>()
                .selectAll(DuSolution.class)
@@ -1331,8 +1416,14 @@
        if(insuranceApply.getIsdeleted().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"数据已删除,无法进行该操作");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        //-----TODU-------RJ-------完善退回状态分开标记------------------
        Constants.InsuranceApplyStatus insuranceApplyStatus =  Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_SIGNATURE;
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
        if(insuranceApplyOptDTO.getOptType().equals(Constants.ONE)){
            if(!(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD.getKey())
                    ||insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())
@@ -1346,6 +1437,15 @@
            }else  if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.SIGNATURE.getKey())){
                insuranceApplyStatus =  Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_SIGNATURE;
            }
            //存储待办信息
            //删除其他待办
            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,insuranceApply.getId()));
            Notices notices = new Notices(noticeObjectType,Constants.ONE,insuranceApply.getId(),solutions.getName(),
                    insuranceApply.getCompanyId(), Constants.NoticeType.THREE);
            noticesMapper.insert(notices);
        }else if(insuranceApplyOptDTO.getOptType().equals(Constants.TWO)){
            insuranceApplyStatus =  Constants.InsuranceApplyStatus.CLOSE;
            if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.CLOSE.getKey())){
@@ -1356,6 +1456,8 @@
                    ||insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.PLATFORM_CHECK_PASS.getKey()))){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据状态非可申请退回!");
            }
            //删除其他待办
            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,insuranceApply.getId()));
        }
        insuranceApply.setStatus(insuranceApplyStatus.getKey());
        insuranceApply.setCheckDate(new Date());
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -181,6 +181,7 @@
                .selectAs(DispatchUnit::getName,Member::getDuName)
                .selectAs(Worktype::getName,Member::getWorkTypeName)
                .selectAs(Solutions::getName,Member::getSolutionName)
                .select(" case when  now() between t.start_time and t.end_time then 1  else 0 end solutionsStatus ")
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,Member::getApplyId)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(DispatchUnit.class,DispatchUnit::getId,Member::getDuId)
@@ -191,15 +192,9 @@
                .like(StringUtils.isNotBlank(memberQueryDTO.getIdCard()),Member::getIdcardNo, memberQueryDTO.getIdCard())
                .eq(!Objects.isNull(memberQueryDTO.getDuId()),Member::getDuId, memberQueryDTO.getDuId())
                .eq(!Objects.isNull(memberQueryDTO.getSolutionsId()),Solutions::getId, memberQueryDTO.getSolutionsId())
                .ge(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&!memberQueryDTO.getSolutionsStatus().equals(Constants.ZERO),
                        Member::getStartTime, DateUtil.getDate(new Date(),"yyyy-MM-dd")+" 00:00:00")
                .le(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&memberQueryDTO.getSolutionsStatus().equals(Constants.ONE),
                        Member::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd")+" 23:59:59")
                .ge(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&memberQueryDTO.getSolutionsStatus().equals(Constants.TWO),
                        Member::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd")+" 23:59:59")
                .apply(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&memberQueryDTO.getSolutionsStatus().equals(Constants.ONE),"now() between t.start_time and t.end_time")
                .apply(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&memberQueryDTO.getSolutionsStatus().equals(Constants.TWO),"now()  >  t.end_time")
        ;
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
@@ -220,15 +215,20 @@
    @Override
    public List<Member> findListByDTO(MemberQueryDTO memberQueryDTO) {
        MPJLambdaWrapper<Member> lambdaWrapper = new MPJLambdaWrapper<Member>()
                .selectAll(Member.class)
        MPJLambdaWrapper<Member> lambdaWrapper = new MPJLambdaWrapper<Member>();
        lambdaWrapper.selectAll(Member.class)
                .selectAs(DispatchUnit::getName,Member::getDuName)
                .selectAs(Worktype::getName,Member::getWorkTypeName)
                .selectAs(Company::getName,Member::getCompanyName)
                .select(" case when  now() between t.start_time and t.end_time then 1  else 2 end solutionsStatus ")
                .leftJoin(DispatchUnit.class,DispatchUnit::getId,Member::getDuId)
                .leftJoin(Worktype.class,Worktype::getId,Member::getWorktypeId)
                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .notIn(CollectionUtils.isNotEmpty(memberQueryDTO.getMemberIds()),Member::getId,memberQueryDTO.getMemberIds())
                .eq(!Objects.isNull(memberQueryDTO.getCompanyId()),Member::getCompanyId,memberQueryDTO.getCompanyId())
                .eq(Member::getIsdeleted, Constants.ZERO)
                .apply(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&memberQueryDTO.getSolutionsStatus().equals(Constants.ONE),"now() between t.start_time and t.end_time")
                .apply(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&memberQueryDTO.getSolutionsStatus().equals(Constants.TWO),"now()  >  t.end_time")
                .like(StringUtils.isNotBlank(memberQueryDTO.getName()),Member::getName, memberQueryDTO.getName())
                .notExists(!Objects.isNull(memberQueryDTO.getNotInInsuranceApplyId()),
                        " select 1 from apply_detail ad where ad.apply_id = "+memberQueryDTO.getNotInInsuranceApplyId()+" and ad.END_TIME > now() and ad.isdeleted = 0 " +
@@ -238,6 +238,7 @@
                    .selectAll(Member.class)
                    .selectAs(DispatchUnit::getName,Member::getDuName)
                    .selectAs(Worktype::getName,Member::getWorkTypeName)
                    .selectAs(Company::getName,Member::getCompanyName)
                    .leftJoin(ApplyDetail.class,ApplyDetail::getMemberId,Member::getId)
                    .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                    .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyDetail::getDuId)
@@ -248,8 +249,7 @@
                            " select 1 from apply_detail ad where ad.apply_id = "+memberQueryDTO.getInsuranceApplyId()+" and ad.END_TIME > now() and ad.isdeleted = 0 " +
                                    " and ad.member_id = t.id ");
        }
        List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,lambdaWrapper
        );
        List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,lambdaWrapper);
        return memberList;
    }
server/service/src/main/java/com/doumee/service/business/impl/NoticesServiceImpl.java
@@ -2,18 +2,23 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.NoticesMapper;
import com.doumee.dao.business.join.NoticesJoinMapper;
import com.doumee.dao.business.model.ApplyChagneDetail;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.model.Notices;
import com.doumee.service.business.NoticesService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
@@ -25,7 +30,7 @@
public class NoticesServiceImpl implements NoticesService {
    @Autowired
    private NoticesMapper noticesMapper;
    private NoticesJoinMapper noticesMapper;
    @Override
    public Integer create(Notices notices) {
@@ -87,90 +92,51 @@
    @Override
    public PageData<Notices> findPage(PageWrap<Notices> pageWrap) {
        IPage<Notices> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Notices> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Notices::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(Notices::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(Notices::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(Notices::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(Notices::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(Notices::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(Notices::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        queryWrapper.selectAll(Notices.class);
        queryWrapper.selectAs(Company::getName,Notices::getCompanyName);
        queryWrapper.leftJoin(Company.class,Company::getId,Notices::getCompanyId);
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(Notices::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(Notices::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getTitle() != null) {
            queryWrapper.lambda().eq(Notices::getTitle, pageWrap.getModel().getTitle());
        }
        if (pageWrap.getModel().getInfo() != null) {
            queryWrapper.lambda().eq(Notices::getInfo, pageWrap.getModel().getInfo());
        }
        if (pageWrap.getModel().getContent() != null) {
            queryWrapper.lambda().eq(Notices::getContent, pageWrap.getModel().getContent());
        }
        if (pageWrap.getModel().getObjId() != null) {
            queryWrapper.lambda().eq(Notices::getObjId, pageWrap.getModel().getObjId());
            queryWrapper.eq(Notices::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getObjType() != null) {
            queryWrapper.lambda().eq(Notices::getObjType, pageWrap.getModel().getObjType());
        }
        if (pageWrap.getModel().getObjName() != null) {
            queryWrapper.lambda().eq(Notices::getObjName, pageWrap.getModel().getObjName());
            queryWrapper.eq(Notices::getObjType, pageWrap.getModel().getObjType());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(Notices::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getParam1() != null) {
            queryWrapper.lambda().eq(Notices::getParam1, pageWrap.getModel().getParam1());
        }
        if (pageWrap.getModel().getParam2() != null) {
            queryWrapper.lambda().eq(Notices::getParam2, pageWrap.getModel().getParam2());
        }
        if (pageWrap.getModel().getParam3() != null) {
            queryWrapper.lambda().eq(Notices::getParam3, pageWrap.getModel().getParam3());
        }
        if (pageWrap.getModel().getParam4() != null) {
            queryWrapper.lambda().eq(Notices::getParam4, pageWrap.getModel().getParam4());
        }
        if (pageWrap.getModel().getParam5() != null) {
            queryWrapper.lambda().eq(Notices::getParam5, pageWrap.getModel().getParam5());
        }
        if (pageWrap.getModel().getUserId() != null) {
            queryWrapper.lambda().eq(Notices::getUserId, pageWrap.getModel().getUserId());
            queryWrapper.eq(Notices::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getCompanyId() != null) {
            queryWrapper.lambda().eq(Notices::getCompanyId, pageWrap.getModel().getCompanyId());
            queryWrapper.eq(Notices::getCompanyId, pageWrap.getModel().getCompanyId());
        }
        if (pageWrap.getModel().getPalt() != null) {
            queryWrapper.lambda().eq(Notices::getPalt, pageWrap.getModel().getPalt());
            queryWrapper.eq(Notices::getPalt, pageWrap.getModel().getPalt());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(Notices::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.eq(Notices::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getReaded() != null) {
            queryWrapper.lambda().eq(Notices::getReaded, pageWrap.getModel().getReaded());
            queryWrapper.eq(Notices::getReaded, pageWrap.getModel().getReaded());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
        if(CollectionUtils.isNotEmpty(pageWrap.getSorts())){
            for(PageWrap.SortData sortData: pageWrap.getSorts()) {
                if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                    queryWrapper.orderByDesc(sortData.getProperty());
                } else {
                    queryWrapper.orderByAsc(sortData.getProperty());
                }
            }
        }else{
            queryWrapper.orderByDesc(Notices::getCreateDate);
        }
        return PageData.from(noticesMapper.selectPage(page, queryWrapper));
        PageData<Notices> pageData = PageData.from(noticesMapper.selectJoinPage(page,Notices.class, queryWrapper));
        pageData.getRecords().forEach(i->{
            i.setTypeDetail(
                    Constants.NoticeType.getDetail(i.getObjType(),i.getType())
            );
        });
        return pageData;
    }
    @Override
server/service/src/main/java/com/doumee/service/business/impl/SettleClaimsServiceImpl.java
@@ -10,6 +10,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.NoticesMapper;
import com.doumee.dao.business.SettleClaimsLogMapper;
import com.doumee.dao.business.SettleClaimsMapper;
import com.doumee.dao.business.dto.SCSupplementDTO;
@@ -67,6 +68,8 @@
    @Autowired
    private SettleClaimsLogJoinMapper settleClaimsLogJoinMapper;
    @Autowired
    private NoticesMapper noticesMapper;
    /**
     * åˆ é™¤é™„ä»¶
     * @return
@@ -117,6 +120,12 @@
        update.setStatus(Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey());
        settleClaimsMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Constants.SettleClaimsLogType applyLogType = Constants.SettleClaimsLogType.PLATFORM_RETURN;
        String info =applyLogType.getInfo();
        info = info.replace("${param}", update.getCheckInfo());
@@ -155,6 +164,12 @@
        update.setId(model.getId());
        update.setStatus(Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey());
        settleClaimsMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Constants.SettleClaimsLogType applyLogType = Constants.SettleClaimsLogType.PLATFORM_CONFIRM_INFORMATION;
        String info =applyLogType.getInfo();
@@ -239,6 +254,14 @@
        update.setScClaimAccount(Constants.formatBigdecimal(param.getScClaimAccount()));
        update.setClaimAccount(update.getYlClaimAccount().add(update.getSwClaimAccount()).add(update.getScClaimAccount()).add(update.getWgClaimAccount()));
        settleClaimsMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ONE,model.getId(),model.getInformantName(),
                model.getCompanyId(), Constants.NoticeType.ONE);
        noticesMapper.insert(notices);
        Constants.SettleClaimsLogType applyLogType = Constants.SettleClaimsLogType.PLATFORM_FINISH;
        String info =applyLogType.getInfo();
@@ -385,6 +408,17 @@
        }
        //记录日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.UPLOAD,null);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,settleClaims.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,settleClaims.getId(),settleClaims.getInformantName(),
                settleClaims.getCompanyId(), Constants.NoticeType.ZERO);
        noticesMapper.insert(notices);
        return settleClaims.getId();
    }
@@ -555,6 +589,7 @@
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无法修改方案信息");
        }
        if(!(oldSettleClaims.getStatus().equals(Constants.SettleClaimsStatus.WAIT_ACCEPTANCE.getKey())
                || oldSettleClaims.getStatus().equals(Constants.SettleClaimsStatus.DEAL_ING.getKey())
                || oldSettleClaims.getStatus().equals(Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey()))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前状态无法进行该操作");
        }
@@ -593,6 +628,7 @@
        }
        SettleClaims settleClaims  = settleClaimsMapper.selectById(scSupplementDTO.getId());
        if(!(settleClaims.getStatus().equals(Constants.SettleClaimsStatus.WAIT_ACCEPTANCE.getKey())
                || settleClaims.getStatus().equals(Constants.SettleClaimsStatus.DEAL_ING.getKey())
                || settleClaims.getStatus().equals(Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey()))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前状态无法进行该操作");
        }
@@ -624,6 +660,7 @@
        SettleClaims settleClaims  = settleClaimsMapper.selectById(scSupplementDTO.getId());
        if(!(settleClaims.getStatus().equals(Constants.SettleClaimsStatus.WAIT_ACCEPTANCE.getKey())
                || settleClaims.getStatus().equals(Constants.SettleClaimsStatus.DEAL_ING.getKey())
                || settleClaims.getStatus().equals(Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey()))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前状态无法进行该操作");
        }
server/service/src/main/java/com/doumee/service/business/impl/TaxesServiceImpl.java
@@ -8,10 +8,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.CompanyMapper;
import com.doumee.dao.business.SolutionsMapper;
import com.doumee.dao.business.TaxDetialMapper;
import com.doumee.dao.business.TaxesMapper;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.DirectInvoicingDTO;
import com.doumee.dao.business.dto.DirectInvoicingDetailDTO;
import com.doumee.dao.business.dto.EntrustInvoicingDTO;
@@ -67,7 +64,8 @@
    private ApplyChangeJoinMapper applyChangeJoinMapper;
    @Autowired
    private SolutionsMapper solutionsMapper;
    @Autowired
    private NoticesMapper noticesMapper;
    @Override
    public Integer create(Taxes taxes) {
        taxesMapper.insert(taxes);
@@ -118,6 +116,10 @@
                }
            }
        }
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.TAXES;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
    }
    private List<TaxDetial> getDetailListById(Integer id) {
@@ -150,6 +152,8 @@
        queryWrapper.leftJoin(Taxes.class,Taxes::getId,TaxDetial::getDelTaxId);
        queryWrapper.eq(  TaxDetial::getTaxId,id);
        List<TaxDetial> detialList =  taxDetailJoinMapper.selectJoinList(TaxDetial.class,queryWrapper.orderByAsc(TaxDetial::getType));
        return detialList;
    }
@@ -184,6 +188,12 @@
        update.setDoneDate(update.getEditDate());
        update.setImgurl(taxes.getImgurl());
        taxesMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.TAXES;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,taxes.getId()));
    }
    @Override
@@ -430,6 +440,17 @@
            taxDetial.setType(Constants.ZERO);
        }
        taxDetailJoinMapper.insertBatchSomeColumn(taxDetialList);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.TAXES;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,taxes.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,taxes.getId(),taxes.getPrice().toString(),
                taxes.getCompanyId(), Constants.NoticeType.ZERO);
        noticesMapper.insert(notices);
    }
@@ -622,43 +643,14 @@
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无可开票数据,操作失败");
        }
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.TAXES;
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,taxes.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,taxes.getId(),taxes.getPrice().toString(),
                taxes.getCompanyId(), Constants.NoticeType.ZERO);
        noticesMapper.insert(notices);
//        List<DirectInvoicingDetailDTO> directInvoicingDetailDTOList = directInvoicingDTO.getDirectInvoicingDetailDTOList();
//        for (DirectInvoicingDetailDTO directInvoicingDetailDTO:directInvoicingDetailDTOList) {
//            if(Objects.isNull(directInvoicingDetailDTO)
//                    || Objects.isNull(directInvoicingDetailDTO.getId())
//                    || Objects.isNull(directInvoicingDetailDTO.getType())
//                    || Objects.isNull(directInvoicingDetailDTO.getFee())
//            ){
//                throw new BusinessException(ResponseStatus.BAD_REQUEST);
//            }
//
//            if(directInvoicingDetailDTO.getType().equals(Constants.ZERO)){
//                //保单
//                InsuranceApply insuranceApply =  insuranceApplyJoinMapper.selectJoinOne(InsuranceApply.class,
//                        new MPJLambdaWrapper<InsuranceApply>()
//                                .selectAll(InsuranceApply.class)
//                                .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
//                                .select(" ( select count(1) from apply_detail ad  where ad.apply_id = t.id ) as insureNum")
//                                .notExists(" select 1 from taxes t1 inner join tax_detial t2 on t1.id  = t2.tax_id where t2.type = 0 and t1.status != 2 and t.id = t2.INSURANCE_APPLY_ID  ")
//                                .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
//                                .eq(InsuranceApply::getId,directInvoicingDetailDTO.getId())
//                );
//                if(Objects.isNull(insuranceApply)){
//                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"保单号【"+insuranceApply.getCode()+"】未查询到保单信息");
//                }
//
//
//
//            }else if(directInvoicingDetailDTO.getType().equals(Constants.ZERO)){
//                //加减保
//            }else{
//                //冲红单
//            }
//
//
//        }
//        taxDetailJoinMapper.insertBatchSomeColumn(taxDetialList);
    }