jiangping
2024-01-31 31a2a1e82c6d1a80b62ef65bcfba46e084e372aa
Merge remote-tracking branch 'origin/master'
已添加5个文件
已修改17个文件
1685 ■■■■■ 文件已修改
company/src/api/business/applyChange.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaInsuranceApplyWindow.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/OperaInsuranceApplyWindow.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/additionSubtractionApplication.vue 565 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/dispatchUnitDetails.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/factoryChange.vue 477 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/selectEmployees.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/selectEmployeesCopy.vue 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/add_subtract.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/dispatchUnit.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/myPolicy.vue 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/dto/ApplyChangeCyclePriceDTO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/dto/MemberQueryDTO.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java 139 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/applyChange.js
@@ -11,3 +11,13 @@
export function updateById (data) {
    return request.post('/business/applyChange/updateById', data)
}
// æ–°å»º
export function create (data) {
    return request.post('/business/applyChange/create', data)
}
// æ–°å»º
export function getChangeCountCyclePriceVO (data) {
    return request.post('/business/applyChange/getChangeCountCyclePriceVO', data)
}
company/src/components/business/OperaInsuranceApplyWindow.vue
@@ -8,6 +8,14 @@
    >
        <div class="desc">
            <div class="desc_item">
                <div class="desc_item_label" v-if="model.statusCollect === 2 || model.statusCollect === 3">
                    <div class="desc_item_label_left">
                        <span>保险到期还有 <b style="color: #F95601;">{{model.loseEfficacyDays ? model.loseEfficacyDays : '-'}}</b> å¤©</span>
                        <el-button type="primary" v-if="model.statusCollect === 2 || model.statusCollect === 3" @click="$refs.OperaInsuranceApply.open('投保申请', { id: dataId })">一键续保</el-button>
                        <el-button type="primary" v-if="model.statusCollect === 2" @click="$refs.additionSubtractionApplication.open('加减保申请', { id: dataId })">加减保申请</el-button>
                        <el-button type="primary" v-if="model.statusCollect === 2" @click="$refs.factoryChange.open('换厂申请', { id: dataId })">换厂申请</el-button>
                    </div>
                </div>
                <div class="desc_item_label">
                    <div class="desc_item_label_left">
                        <span>投保企业:{{ model.companyName }}</span>
@@ -34,8 +42,6 @@
                            <el-button v-if="model.status != 5 && model.status != 4 && model.status != 1" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('退回投保',model,1)">退回投保</el-button>
                            <el-button v-if="model.status == 5" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('修改保险单',model,4)">修改保险单</el-button>
                        </template>
                  </div>
                </div>
                <div class="desc_item_from">
@@ -231,6 +237,10 @@
        <applyReturn ref="applyReturn" @success="successEvent" />
        <!--    æ–°å¢žæŠ•保    -->
        <OperaInsuranceApply ref="OperaInsuranceApply" @success="successEvent" />
        <!--    åŠ å‡ä¿ç”³è¯·    -->
        <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
        <!--    æ¢åŽ‚ç”³è¯·    -->
        <factoryChange ref="factoryChange" @success="successEvent" />
    </GlobalWindow>
</template>
@@ -239,6 +249,8 @@
import GlobalWindow from '@/components/common/GlobalWindow'
import InsuranceDetails from '@/components/business/InsuranceDetails'
import OperaInsuranceApplyCheckWindow from '@/components/business/OperaInsuranceApplyCheckWindow'
import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
import factoryChange from '@/components/enterprise/factoryChange'
import applyReturn from '@/components/enterprise/applyReturn'
import { getDetail, getSignLink, applyDetailPage, applyChagneDetailPage, exportExcel, applyChagneDetailExcel } from "@/api/business/insuranceApply";
@@ -250,7 +262,15 @@
export default {
  name: 'OperaInsuranceApplyWindow',
  extends: BaseOpera,
  components: { GlobalWindow, InsuranceDetails ,OperaInsuranceApplyCheckWindow, applyReturn, OperaInsuranceApply },
  components: {
      GlobalWindow,
      InsuranceDetails,
      OperaInsuranceApplyCheckWindow,
      applyReturn,
      OperaInsuranceApply,
      additionSubtractionApplication,
      factoryChange
  },
  data () {
    return {
      // è¡¨å•数据
company/src/components/enterprise/OperaInsuranceApplyWindow.vue
@@ -189,8 +189,11 @@
          this.form.applyStartTime = ''
          this.form.applyEndTime = ''
          if (target && target.id) {
              this.$nextTick(() => {
                  this.$refs.form.resetFields()
              this.form.id = target.id
              this.getDetails()
              })
          } else {
              this.$nextTick(() => {
                  this.$refs.form.resetFields()
company/src/components/enterprise/additionSubtractionApplication.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,565 @@
<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}">
                    <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>
            </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 { create, getChangeCountCyclePriceVO } from '@/api/business/applyChange'
    export default {
        name: 'additionSubtractionApplication',
        extends: BaseOpera,
        components: { GlobalWindow, selectEmployees, addEmployee, importEmployees, confirmJobType },
        data () {
            return {
                form: {
                    id: null,
                    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.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() {
                // findList({ applyId: this.form.id })
                //     .then(res => {
                //         res.forEach(item => {
                //             item.idCard = item.idcardNo
                //             item.fee = ''
                //         })
                //         this.tableData = 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
                            })
                        } else {
                            this.form.delDetailList.forEach(item => {
                                total += item.fee
                            })
                        }
                        sums[index] = '-' + total
                        return
                    }
                })
                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
                        create({
                            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){
                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/components/enterprise/dispatchUnitDetails.vue
@@ -18,8 +18,12 @@
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">派遣单位状态:</div>
                    <div class="info_list_item_val" v-if="form.unitStatus === 0">待审核</div>
                    <div class="info_list_item_val" style="color: green;" v-if="form.unitStatus === 1">审核通过</div>
                    <div class="info_list_item_val" style="color:#2E68EC;" v-if="form.unitStatus === 0">待审核</div>
                    <div class="info_list_item_val"   v-if="form.unitStatus === 1">
                        <span style="color:#2E68EC;" v-if="form.worktypeStatus  ==null||form.worktypeStatus === 0">工种待审</span>
                        <span style="color: green" v-if="form.worktypeStatus === 1">审核通过</span>
                        <span style="color: red;" v-if="form.worktypeStatus === 2">工种审核不通过</span>
                    </div>
                    <div class="info_list_item_val" style="color: red;" v-if="form.unitStatus === 2">审核不通过</div>
                </div>
                <div class="info_list_item">
company/src/components/enterprise/factoryChange.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,477 @@
<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="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="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 } from '@/api/business/applyChange'
    export default {
        name: 'factoryChange',
        extends: BaseOpera,
        components: { GlobalWindow, selectEmployees, addEmployee, importEmployees, confirmJobType },
        data () {
            return {
                form: {
                    id: null,
                    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.getDetails()
                    })
                } else {
                    this.$nextTick(() => {
                        this.$refs.form.resetFields()
                        this.form[this.configData['field.id']] = null
                    })
                }
                this.getCompany()
                this.visible = true
                // this.updatePickerOptions()
            },
            // èŽ·å–æŠ•ä¿è¯¦æƒ…
            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
                        create({
                            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/selectEmployees.vue
@@ -54,6 +54,8 @@
                val: '',
                list: [],
                price: '',
                insuranceApplyId: '',
                notInInsuranceApplyId: '',
                seleData: [],
                oldList: []
            }
@@ -66,8 +68,17 @@
        },
        methods: {
            open (title, obj) {
                this.insuranceApplyId = ''
                this.notInInsuranceApplyId = ''
                this.price = obj.price
                this.oldList = obj.arr
                this.list = []
                if (obj.insuranceApplyId) {
                    this.insuranceApplyId = obj.insuranceApplyId
                }
                if (obj.notInInsuranceApplyId) {
                    this.notInInsuranceApplyId = obj.notInInsuranceApplyId
                }
                this.title = title
                this.visible = true
                this.getList()
@@ -88,10 +99,13 @@
                this.seleData.forEach(item => {
                    item.idCard = item.idcardNo
                    item.memberName = item.name
                    item.memberId = item.id
                    if (this.notInInsuranceApplyId) {
                    item.workTypeName = ''
                    item.worktypeId = ''
                    item.duId = ''
                    item.duName = ''
                    }
                    item.fee = this.price
                })
                this.$emit('result', this.seleData)
@@ -102,7 +116,9 @@
            },
            getList() {
                findListByDTO({
                    name: this.val
                    name: this.val,
                    insuranceApplyId: this.insuranceApplyId,
                    notInInsuranceApplyId: this.notInInsuranceApplyId
                }).then(res => {
                    res.forEach(item => {
                        item.fee = ''
company/src/components/enterprise/selectEmployeesCopy.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
<template>
    <GlobalWindow
            :title="title"
            width="100%"
            :visible.sync="visible"
            :confirm-working="isWorking"
            @confirm="confirm"
    >
        <el-input v-model="val" placeholder="查询员工姓名" @keypress.enter.native="getList" style="margin-bottom: 15px;"></el-input>
        <el-table
                :data="list"
                border
                @selection-change="handleSelectionChange"
                style="width: 100%">
            <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="name"
                    label="姓名">
            </el-table-column>
            <el-table-column
                    prop="idcardNo"
                    label="身份证号">
            </el-table-column>
            <el-table-column
                    prop="duName"
                    label="派遣单位">
            </el-table-column>
            <el-table-column
                    prop="workTypeName"
                    label="所属工种">
            </el-table-column>
        </el-table>
    </GlobalWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    import { findListByDTO } from '@/api/business/member'
    export default {
        name: 'selectEmployeesCopy',
        extends: BaseOpera,
        components: { GlobalWindow },
        data () {
            return {
                val: '',
                list: [],
                price: '',
                insuranceApplyId: '',
                notInInsuranceApplyId: '',
                seleData: [],
                oldList: []
            }
        },
        created () {
            this.config({
                api: '/business/dispatchUnit',
                'field.id': 'id'
            })
        },
        methods: {
            open (title, obj) {
                this.insuranceApplyId = ''
                this.notInInsuranceApplyId = ''
                this.price = obj.price
                this.oldList = obj.arr
                this.list = []
                if (obj.insuranceApplyId) {
                    this.insuranceApplyId = obj.insuranceApplyId
                }
                if (obj.notInInsuranceApplyId) {
                    this.notInInsuranceApplyId = obj.notInInsuranceApplyId
                }
                this.title = title
                this.visible = true
                this.getList()
            },
            confirm() {
                if (this.seleData.length === 0) {
                    this.$message.warning('至少选择一项内容')
                    return
                }
                for (let i = 0; i < this.seleData.length; i++) {
                    for (let a = 0; a < this.oldList.length; a++) {
                        if (this.seleData[i].name === this.oldList[a].memberName || this.seleData[i].idCard === this.oldList[a].idcardNo) {
                            this.$message.warning(`[${this.seleData[i].name}]员工重复`)
                            return
                        }
                    }
                }
                this.seleData.forEach(item => {
                    item.idCard = item.idcardNo
                    item.memberName = item.name
                    item.memberId = item.id
                    item.oldDuId = JSON.parse(JSON.stringify(item.duId))
                    item.oldDuName = JSON.parse(JSON.stringify(item.duName))
                    item.oldWorkTypeName = JSON.parse(JSON.stringify(item.workTypeName))
                    item.oldWorktypeId = JSON.parse(JSON.stringify(item.worktypeId))
                    item.duId = ''
                    item.duName = ''
                    item.workTypeName = ''
                    item.worktypeId = ''
                    item.fee = this.price
                })
                this.$emit('result', this.seleData)
                this.visible = false
            },
            handleSelectionChange (e) {
                this.seleData = e
            },
            getList() {
                findListByDTO({
                    name: this.val,
                    insuranceApplyId: this.insuranceApplyId,
                    notInInsuranceApplyId: this.notInInsuranceApplyId
                }).then(res => {
                    res.forEach(item => {
                        item.fee = ''
                    })
                    this.list = res
                })
            }
        }
    }
</script>
<style lang="scss" scoped>
</style>
company/src/views/enterprise/add_subtract.vue
@@ -9,8 +9,9 @@
                    <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="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="solutionsId">
company/src/views/enterprise/dispatchUnit.vue
@@ -26,11 +26,15 @@
                    </template>
                </el-table-column>
                <el-table-column prop="name" label="派遣单位"></el-table-column>
                <el-table-column label="企业状态">
                <el-table-column label="派遣单位状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.unitStatus === 0">待审核</span>
                        <span v-if="row.unitStatus === 1" style="color: green;">审核通过</span>
                        <span v-if="row.unitStatus === 2" style="color: red;">审核不通过</span>
                        <span style="color: #2E68EC" v-if="row.unitStatus === 0">待审核</span>
                        <span v-if="row.unitStatus === 1">
                            <span style="color:#2E68EC" v-if="row.worktypeStatus ==null || row.worktypeStatus === 0">工种待审</span>
                            <span style="color: green" v-else-if="row.worktypeStatus === 1">审核通过</span>
                            <span style="color: red"  v-else-if="row.worktypeStatus === 2">工种审核不通过</span>
                        </span>
                        <span style="color: red" v-if="row.unitStatus === 2">审核不通过</span>
                    </template>
                </el-table-column>
                <el-table-column prop="createDate" label="添加日期"></el-table-column>
company/src/views/enterprise/myPolicy.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,186 @@
<template>
    <TableLayout :permissions="['business:insuranceapply:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="保单号" prop="code">
                <el-input v-model="searchForm.code" placeholder="请输入" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="保险方案" prop="baseSolutionId">
                <el-select v-model="searchForm.baseSolutionId" placeholder="请选择" @change="search">
                    <el-option
                        v-for="item in solutionList"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="状态" prop="statusCollect">
                <el-select v-model="searchForm.statusCollect" placeholder="请选择" @change="search">
                    <el-option label="待审批" value="0"></el-option>
                    <el-option label="待出单" value="1"></el-option>
                    <el-option label="待签章" value="7"></el-option>
                    <el-option label="保障中" value="2"></el-option>
                    <el-option label="已过期" value="3"></el-option>
                    <el-option label="已退回" value="4"></el-option>
                    <el-option label="退回申请中" value="5"></el-option>
                    <el-option label="已关闭" value="6"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="保险生效起期" prop="time1">
                <el-date-picker
                    v-model="time1"
                    @change="changeS"
                    type="daterange"
                    range-separator="至"
                    value-format="yyyy-MM-dd"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期">
                </el-date-picker>
            </el-form-item>
            <el-form-item label="保险生效止期" prop="time2">
                <el-date-picker
                    v-model="time2"
                    @change="changeE"
                    type="daterange"
                    range-separator="至"
                    value-format="yyyy-MM-dd"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期">
                </el-date-picker>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
            </section>
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:dispatchunit:create']">
                <li><el-button type="primary" @click="$refs.OperaInsuranceApplyWindow.open('投保申请')">投保申请</el-button></li>
            </ul>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
                <el-table-column label="序号" width="80px">
                    <template slot-scope="scope">
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="statusInfo" label="状态"></el-table-column>
                <el-table-column prop="solutionsName" label="保险方案"></el-table-column>
                <el-table-column prop="insureNum" label="投保人数"></el-table-column>
                <el-table-column prop="serviceDays" label="投保时长(天)"></el-table-column>
                <el-table-column prop="fee" label="总费用(元)"></el-table-column>
                <el-table-column prop="checkDate" label="提交日期"></el-table-column>
                <el-table-column prop="startTime" label="投保生效日期"></el-table-column>
                <el-table-column prop="endTime" label="投保失效日期"></el-table-column>
                <el-table-column
                    v-if="containPermissions(['business:insuranceapply:update', 'business:insuranceapply:delete'])"
                    label="操作"
                    min-width="150"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.OperaInsuranceApplyDetails.open('投保详情', { id: row.id })" v-permissions="['business:insuranceapply:update']">查看详情</el-button>
                        <el-button type="text" @click="$refs.additionSubtractionApplication.open('加减保申请', { id: row.id })">加减保申请</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!--    æ–°å¢žæŠ•保    -->
        <OperaInsuranceApplyWindow ref="OperaInsuranceApplyWindow" @success="handlePageChange" />
        <!--    æŠ•保详情    -->
        <OperaInsuranceApplyDetails ref="OperaInsuranceApplyDetails" @success="handlePageChange" />
        <!--    åŠ å‡ä¿ç”³è¯·    -->
        <additionSubtractionApplication ref="additionSubtractionApplication" @success="handlePageChange" />
    </TableLayout>
</template>
<script>
    import BaseTable from '@/components/base/BaseTable'
    import TableLayout from '@/layouts/TableLayout'
    import Pagination from '@/components/common/Pagination'
    import OperaInsuranceApplyWindow from '@/components/enterprise/OperaInsuranceApplyWindow'
    import OperaInsuranceApplyDetails from '@/components/business/OperaInsuranceApplyWindow'
    import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
    import { all as solutionAll} from '@/api/business/solutions'
    export default {
        name: 'myPolicy',
        extends: BaseTable,
        components: { TableLayout, Pagination, OperaInsuranceApplyWindow, OperaInsuranceApplyDetails, additionSubtractionApplication },
        data () {
            return {
                // æœç´¢
                searchForm: {
                    code: '',
                    endTimeE: '',
                    endTimeS: '',
                    startTimeE: '',
                    startTimeS: '',
                    baseSolutionId: '',
                    statusCollect: '2'
                },
                time1: [],
                time2: [],
                solutionList:[]
            }
        },
        created () {
            this.config({
                module: '投保申请信息表',
                api: '/business/insuranceApply',
                'field.id': 'id',
                'field.main': 'id'
            })
            this.search()
            this.loadSelectList()
        },
        methods:{
            reset() {
                this.time1 = []
                this.time2 = []
                this.searchForm.endTimeE = ''
                this.searchForm.endTimeS = ''
                this.searchForm.startTimeE = ''
                this.searchForm.startTimeS = ''
                this.$refs.searchForm.resetFields()
                this.search()
            },
            changeE(e) {
                if (e.length > 0) {
                    this.searchForm.endTimeS = e[0]
                    this.searchForm.endTimeE = e[1]
                } else {
                    this.searchForm.endTimeS = ''
                    this.searchForm.endTimeE = ''
                }
                this.search()
            },
            changeS(e) {
                if (e.length > 0) {
                    this.searchForm.startTimeS = e[0]
                    this.searchForm.startTimeE = e[1]
                } else {
                    this.searchForm.startTimeS = ''
                    this.searchForm.startTimeE = ''
                }
                this.search()
            },
            loadSelectList() {
                solutionAll({ dataType: 0 }).then(res => {
                    this.solutionList = res
                })
            }
        }
    }
</script>
server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -6,9 +6,12 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
import com.doumee.dao.business.dto.ApplyChangeOptDTO;
import com.doumee.dao.business.dto.CountCyclePriceDTO;
import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
import com.doumee.dao.business.model.ApplyChange;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.service.business.ApplyChangeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -122,5 +125,10 @@
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("加减保业务补充金额")
    @PostMapping("/getChangeCountCyclePriceVO")
    public ApiResponse<CountCyclePriceVO> getChangeCountCyclePriceVO (@RequestBody ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO) {
        return ApiResponse.success("操作成功",applyChangeService.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO));
    }
}
server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -136,6 +136,9 @@
    }
    @ApiOperation("测试实际金额")
    @GetMapping("/testFee")
    public ApiResponse testFee(@RequestParam Integer id) {
server/service/src/main/java/com/doumee/dao/business/dto/ApplyChangeCyclePriceDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.doumee.dao.business.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @author RenKang
 */
@Data
public class ApplyChangeCyclePriceDTO {
    @ApiModelProperty(value = "保单主键", example = "1")
    private Integer applyId;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "批单日期")
    private Date validTime;
}
server/service/src/main/java/com/doumee/dao/business/dto/MemberQueryDTO.java
@@ -26,7 +26,10 @@
    @ApiModelProperty(value = "需过滤数据集合")
    private List<Integer> memberIds;
    @ApiModelProperty(value = "过滤保单主键下数据")
    @ApiModelProperty(value = "过滤保单主键下数据" ,notes = "加保申请")
    private Integer notInInsuranceApplyId;
    @ApiModelProperty(value = "保单主键下数据" , notes = "减保申请/换厂申请")
    private Integer insuranceApplyId;
    @ApiModelProperty(value = "企业主键")
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
@@ -11,6 +11,7 @@
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@@ -93,6 +94,10 @@
    private String signApplyNo;
    @ApiModelProperty(value = "期望保险生效起期")
    @ExcelColumn(name="期望保险生效起期")
    //入参
     @DateTimeFormat(pattern = "yyyy-MM-dd")
    //出参
    @JsonFormat(pattern="yyyy-MM-dd")
    private Date validTime;
    @ApiModelProperty(value = "批单号")
server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java
@@ -2,9 +2,11 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
import com.doumee.dao.business.dto.ApplyChangeOptDTO;
import com.doumee.dao.business.model.ApplyChange;
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import java.util.List;
@@ -116,4 +118,6 @@
    String getSignLinkJiajiabao(ApplyChange model);
    String getSignLinkChangeUnit(ApplyChange model);
    CountCyclePriceVO getChangeCountCyclePriceVO(ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO);
}
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -12,12 +12,16 @@
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
import com.doumee.dao.business.dto.ApplyChangeOptDTO;
import com.doumee.dao.business.dto.CountCyclePriceDTO;
import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
import com.doumee.dao.business.join.ApplyChagneDetailJoinMapper;
import com.doumee.dao.business.join.ApplyChangeJoinMapper;
import com.doumee.dao.business.join.ApplyDetailJoinMapper;
import com.doumee.dao.business.join.DuSolutionJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.service.business.ApplyChangeService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -50,6 +54,8 @@
    @Autowired
    private ApplyChangeMapper applyChangeMapper;
    @Autowired
    private DuSolutionJoinMapper duSolutionJoinMapper;
    @Autowired
    private InsuranceApplyMapper insuranceApplyMapper;
@@ -440,7 +446,7 @@
                || Objects.isNull(applyChange.getApplyId())
                || Objects.isNull(applyChange.getValidTime())
                || Objects.isNull(applyChange.getType())
                || !(applyChange.getType().equals(Constants.ZERO) || applyChange.getType().equals(Constants.TWO))
                || !(applyChange.getType().equals(Constants.ZERO) || applyChange.getType().equals(Constants.ONE))
        ) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -452,10 +458,11 @@
        if (Objects.isNull(insuranceApply)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if (insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())) {
        System.out.println(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey());
        if (!Constants.equalsInteger(insuranceApply.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())) {
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "保单状态错误");
        }
        if (DateUtil.compareDate(new Date(), insuranceApply.getEndTime()) >= Constants.ZERO
        if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO
        ) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "保单已过保,无法进行该操作");
        }
@@ -473,18 +480,24 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到企业分配保险方案信息");
        }
        //申请时间必须处于保单的时间范围内
        if (!(DateUtil.compareDate(applyChange.getValidTime(), insuranceApply.getStartTime()) >= Constants.ZERO
                && DateUtil.compareDate(insuranceApply.getEndTime(), applyChange.getValidTime()) >= Constants.ZERO)) {
        if (!(DateUtil.compareDate( insuranceApply.getStartTime(),applyChange.getValidTime()) >= Constants.ZERO
                && DateUtil.compareDate( applyChange.getValidTime(),insuranceApply.getEndTime()) >= Constants.ZERO)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "申请日期未处于保单日期内,无法进行该操作");
        }
        applyChange.setCreateDate(new Date());
        applyChange.setCreator(loginUserInfo.getId());
        applyChange.setIsdeleted(Constants.ZERO);
        applyChange.setApplyStartTime(applyChange.getValidTime());
        applyChange.setStatus(Constants.ZERO);
        applyChangeMapper.insert(applyChange);
        List<DuSolution> duSolutionList = duSolutionMapper.selectList(new QueryWrapper<DuSolution>().lambda()
        //查询保险方案下的所有派遣单位
        List<DuSolution>  duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>()
                .selectAll(DuSolution.class)
                .innerJoin(DispatchUnit.class,DispatchUnit::getId,DuSolution::getDispatchUnitId)
                .eq(DispatchUnit::getCompanyId,insuranceApply.getCompanyId())
                .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
                .eq(DispatchUnit::getUnitStatus,Constants.ONE)
                .eq(DuSolution::getIsdeleted, Constants.ZERO)
                .eq(DuSolution::getStatus, Constants.ONE)
                .eq(DuSolution::getSolutionId, insuranceApply.getSolutionId()));
@@ -501,6 +514,7 @@
        if (!CollectionUtils.isNotEmpty(duWorktypeList)) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "数据异常:保险方案下未查询到工种信息");
        }
        BigDecimal fee = BigDecimal.ZERO;
        //加保数据
        List<ApplyChagneDetail> addDetailList = applyChange.getAddDetailList();
        if (CollectionUtils.isNotEmpty(addDetailList)) {
@@ -508,16 +522,25 @@
               throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行加保");
           }
            this.addChangeDetail(applyChange,addDetailList,duWorktypeList,duSolutionList,insuranceApply,solutions,loginUserInfo);
            fee = addDetailList.stream().map(ApplyChagneDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add);
        }
        //减保数据
        List<ApplyChagneDetail> delDetailList = applyChange.getDelDetailList();
        if (CollectionUtils.isNotEmpty(delDetailList)) {
            if(companySolution.getCanReduce().equals(Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行加保");
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行减保");
            }
            this.delChangeDetail(applyChange,delDetailList,insuranceApply,solutions,loginUserInfo);
            fee = fee.add(delDetailList.stream().map(ApplyChagneDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
        }
        ApplyChange applyChangeFee = new ApplyChange();
        applyChangeFee.setId(applyChange.getId());
        applyChangeFee.setFee(fee);
        applyChangeMapper.updateById(applyChangeFee);
        //换厂业务
        List<ApplyChagneDetail> changeDetailList = applyChange.getChangeDetailList();
        if (CollectionUtils.isNotEmpty(changeDetailList)) {
@@ -537,7 +560,11 @@
        applyLog.setIsdeleted(Constants.ZERO);
        applyLog.setApplyId(applyChange.getApplyId());
        applyLog.setTitle(applyChangeLogStatus.getName());
        if(StringUtils.isNotBlank(content)){
        applyLog.setContent(applyChangeLogStatus.getInfo().replace("${param}",content));
        }else{
            applyLog.setContent(applyChangeLogStatus.getInfo());
        }
        applyLog.setObjType(applyChangeLogStatus.getKey());
        applyLog.setObjId( applyChange.getId());
        applyLog.setStatus(applyChange.getStatus());
@@ -578,7 +605,7 @@
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,存在多条数据");
            }
            ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
            if (applyChange.getValidTime().compareTo(applyDetail.getEndTime()) <= 0) {
            if (applyChange.getValidTime().compareTo(applyDetail.getEndTime()) > 0) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】保单保障日期至:【" + applyDetail.getEndTime() + "】无法通过本次申请");
            }
            applyChagneDetail.setCreateDate(new Date());
@@ -586,9 +613,17 @@
            applyChagneDetail.setIsdeleted(Constants.ZERO);
            applyChagneDetail.setApplyChangeId(applyChange.getId());
            applyChagneDetail.setType(Constants.ONE);
            System.out.println(DateUtil.dateToString(applyDetail.getEndTime(),"yyyy-MM-dd"));
            System.out.println(DateUtil.dateToString(applyDetail.getStartTime(),"yyyy-MM-dd"));
            System.out.println(DateUtil.dateToString(applyChange.getValidTime(),"yyyy-MM-dd"));
            BigDecimal sumFee = Constants.countDetailFee(solutions, applyDetail.getEndTime(),applyDetail.getStartTime());
            BigDecimal useFee = Constants.countDetailFee(solutions, applyChange.getValidTime(),applyDetail.getStartTime());
            applyChagneDetail.setFee(
                    Constants.countDetailFee(solutions, applyDetail.getEndTime(),applyDetail.getStartTime())
                            .subtract(Constants.countDetailFee(solutions,applyChange.getValidTime(), applyDetail.getStartTime()))
                            .subtract(Constants.countDetailFee(solutions,applyChange.getValidTime(), applyDetail.getStartTime())).multiply(new BigDecimal(-1))
            );
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
        }
@@ -606,15 +641,51 @@
     */
    public void addChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,List<DuWorktype> duWorktypeList,List<DuSolution> duSolutionList,InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo){
        for (ApplyChagneDetail applyChagneDetail : addDetailList) {
            if (Objects.isNull(applyChagneDetail.getMemberId())
                    || Objects.isNull(applyChagneDetail.getDuId())
            if (    Objects.isNull(applyChagneDetail.getDuId())
                    || Objects.isNull(applyChagneDetail.getWorktypeId())
                    || StringUtils.isBlank(applyChagneDetail.getIdcardNo())
            ) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】必填项缺失");
            }
            Member member = memberMapper.selectById(applyChagneDetail.getMemberId());
            Member member = new Member();
            if(Objects.isNull(applyChagneDetail.getMemberId())){
                //查询是否存在该用户
                member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                        .eq(Member::getCompanyId,insuranceApply.getCompanyId())
                        .eq(Member::getIsdeleted,Constants.ZERO)
                        .eq(Member::getIdcardNo,applyChagneDetail.getIdcardNo())
                        .last(" limit 1")
                );
                if(Objects.isNull(member)){
                    member = new Member();
                    member.setCreateDate(new Date());
                    member.setCreator(loginUserInfo.getId());
                    member.setIsdeleted(Constants.ZERO);
                    member.setName(applyChagneDetail.getMemberName());
                    member.setCompanyId(insuranceApply.getCompanyId());
                    member.setSex(Constants.getSexByIdCard(applyChagneDetail.getIdcardNo()));
                    member.setIdcardNo(applyChagneDetail.getIdcardNo());
                    member.setApplyId(insuranceApply.getId());
                    member.setDuId(applyChagneDetail.getDuId());
                    member.setWorktypeId(applyChagneDetail.getWorktypeId());
                    memberMapper.insert(member);
                }else{
                    member.setApplyId(insuranceApply.getId());
                    member.setDuId(applyChagneDetail.getDuId());
                    member.setWorktypeId(applyChagneDetail.getWorktypeId());
                    memberMapper.updateById(member);
                }
            }else{
                member = memberMapper.selectById(applyChagneDetail.getMemberId());
            if (Objects.isNull(member)) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】未查询到系统人员信息");
                }
                member.setApplyId(insuranceApply.getId());
                member.setDuId(applyChagneDetail.getDuId());
                member.setWorktypeId(applyChagneDetail.getWorktypeId());
                memberMapper.updateById(member);
            }
            //查询员工是否存在  0待签署 1已签章 çš„æ­¤ç±»ä¸šåŠ¡ä¿æ•°æ® åŒä¸€ä¸»å•下
            if (applyChagneDetailJoinMapper.selectJoinCount(
@@ -626,6 +697,7 @@
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在申请中的加减保/换厂单据");
            }
            //查询员工是在主单下 æ˜¯å¦å­˜åœ¨ç”Ÿæ•ˆä¸­çš„æ•°æ®
            if(!Objects.isNull(applyChagneDetail.getMemberId())){
            if (applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                    .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
@@ -634,22 +706,22 @@
            ) > Constants.ZERO) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在保障中的保单信息,无法进行加保");
            }
            }
            //验证派遣单位信息 ä¸Žå·¥ç§ä¿¡æ¯ æ˜¯å¦å­˜åœ¨
            if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "【" + applyChagneDetail.getMemberName() + "】员工派遣单位未查询到!");
            }
            if (duWorktypeList.stream().filter(d -> d.getDuSolutionId().equals(applyChagneDetail.getDuId()) && d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
            if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
                    .collect(Collectors.toList()).size() <= Constants.ZERO) {
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "【" + applyChagneDetail.getMemberName() + "】员工工种信息未查询到!");
            }
            applyChagneDetail.setMemberId(member.getId());
            applyChagneDetail.setCreateDate(new Date());
            applyChagneDetail.setCreator(loginUserInfo.getId());
            applyChagneDetail.setIsdeleted(Constants.ZERO);
            applyChagneDetail.setApplyChangeId(applyChange.getId());
            applyChagneDetail.setType(Constants.ZERO);
            applyChagneDetail.setFee(
                    Constants.countDetailFee(solutions,insuranceApply.getEndTime(),applyChange.getValidTime())
            );
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
@@ -692,20 +764,20 @@
            List<ApplyDetail>  applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                    .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
                    .le(ApplyDetail::getStartTime, "now()")
                    .ge(ApplyDetail::getEndTime, "now()"));
                    .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")));
            if(applyDetailList.size()>Constants.ONE){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,存在多条数据");
            }
            ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
            if(applyChange.getValidTime().compareTo( applyDetail.getEndTime())<=0){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单保障日期至:【"+applyDetail.getEndTime()+"】无法通过本次申请");
            if(applyChange.getValidTime().compareTo( applyDetail.getEndTime())>0){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单保障日期至:【"+DateUtil.getDate(applyDetail.getEndTime(),"yyyy-MM-dd HH:mm:ss")+"】无法通过本次申请");
            }
            //验证派遣单位信息 ä¸Žå·¥ç§ä¿¡æ¯ æ˜¯å¦å­˜åœ¨
            if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】员工派遣单位未查询到!");
            }
            if (duWorktypeList.stream().filter(d -> d.getDuSolutionId().equals(applyChagneDetail.getDuId()) && d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
            if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
                    .collect(Collectors.toList()).size() <= Constants.ZERO) {
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】员工工种信息未查询到!");
            }
@@ -1116,4 +1188,29 @@
    }
    @Override
    public CountCyclePriceVO getChangeCountCyclePriceVO(ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO){
        if(Objects.isNull(applyChangeCyclePriceDTO)
            || Objects.isNull(applyChangeCyclePriceDTO.getApplyId())
            || Objects.isNull(applyChangeCyclePriceDTO.getValidTime())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyChangeCyclePriceDTO.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(),"未查询方案信息");
        }
        CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO();
        countCyclePriceVO.setCyclePrice(Constants.countDetailFee(solutions,insuranceApply.getEndTime(),applyChangeCyclePriceDTO.getValidTime()));
        return countCyclePriceVO;
    }
}
server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java
@@ -856,7 +856,8 @@
                        .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
                        .eq(loginUserInfo.getType().equals(Constants.ONE),DispatchUnit::getCompanyId,loginUserInfo.getCompanyId())
                        .eq(DispatchUnit::getStatus,Constants.ZERO)
                        .eq(DispatchUnit::getDataType,dispatchUnitQueryDTO.getDataType())
                        //.eq(DispatchUnit::getDataType,dispatchUnitQueryDTO.getDataType())
                        .eq(DispatchUnit::getDataType,Constants.TWO)
                        .eq(!Objects.isNull(dispatchUnitQueryDTO.getSolutionId()),DuSolution::getSolutionId,dispatchUnitQueryDTO.getSolutionId())
                        .exists(!Objects.isNull(dispatchUnitQueryDTO.getApplyId()),
                                " select 1 from apply_detail ad where ad.isdeleted = 0 and ad.apply_id = "+dispatchUnitQueryDTO.getApplyId()+" " +
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -17,6 +17,7 @@
import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
import com.doumee.dao.business.join.ApplyDetailJoinMapper;
import com.doumee.dao.business.join.ApplyLogJoinMapper;
import com.doumee.dao.business.join.DuSolutionJoinMapper;
import com.doumee.dao.business.join.InsuranceApplyJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.CountCyclePriceVO;
@@ -86,6 +87,8 @@
    private MemberMapper memberMapper;
    @Autowired
    private DuSolutionMapper duSolutionMapper;
    @Autowired
    private DuSolutionJoinMapper duSolutionJoinMapper;
    @Autowired
    private DuWorktypeMapper duWorktypeMapper;
@@ -704,7 +707,12 @@
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        //查询保险方案下的所有派遣单位
        List<DuSolution> duSolutionList = duSolutionMapper.selectList(new QueryWrapper<DuSolution>().lambda()
        List<DuSolution>  duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>()
                .selectAll(DuSolution.class)
                .innerJoin(DispatchUnit.class,DispatchUnit::getId,DuSolution::getDispatchUnitId)
                .eq(DispatchUnit::getCompanyId,insuranceApply.getCompanyId())
                .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
                .eq(DispatchUnit::getUnitStatus,Constants.ONE)
                .eq(DuSolution::getIsdeleted,Constants.ZERO)
                .eq(DuSolution::getStatus,Constants.ONE)
                .eq(DuSolution::getSolutionId,insuranceApply.getSolutionId()));
@@ -1044,7 +1052,7 @@
        MPJLambdaWrapper wrapper=  new MPJLambdaWrapper<InsuranceApply>()
                .selectAll(InsuranceApply.class)
                .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
                .selectAs(Company::getName,ApplyLog::getCompanyName)
                .selectAs(Company::getName,InsuranceApply::getCompanyName)
                .select(" ( select count(1) from apply_detail ad  where ad.apply_id = t.id ) as insureNum")
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
@@ -1056,6 +1064,11 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(insuranceApply.getStartTime().compareTo(new Date())<0  && insuranceApply.getEndTime().compareTo(new Date()) > 0 ){
            insuranceApply.setLoseEfficacyDays(DateUtil.daysBetweenDates(insuranceApply.getEndTime(),new Date()));
        }
        initApplyStatus(insuranceApply);
        //查询附件数据
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -219,7 +219,8 @@
    @Override
    public List<Member> findListByDTO(MemberQueryDTO memberQueryDTO) {
        List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
        MPJLambdaWrapper<Member> lambdaWrapper = new MPJLambdaWrapper<Member>()
                .selectAll(Member.class)
                .selectAs(DispatchUnit::getName,Member::getDuName)
                .selectAs(Worktype::getName,Member::getWorkTypeName)
@@ -229,9 +230,25 @@
                .eq(!Objects.isNull(memberQueryDTO.getCompanyId()),Member::getCompanyId,memberQueryDTO.getCompanyId())
                .eq(Member::getIsdeleted, Constants.ZERO)
                .like(StringUtils.isNotBlank(memberQueryDTO.getName()),Member::getName, memberQueryDTO.getName())
                .notExists(!Objects.isNull(memberQueryDTO.getInsuranceApplyId()),
                        " select 1 from apply_detail ad where ad.applyId = "+memberQueryDTO.getInsuranceApplyId()+" and ad.END_TIME > now() and ad.isdeleted = 0 " +
                                " and ad.member_id = t.id ")
                .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 " +
                                " and ad.member_id = t.id ");
        if(!Objects.isNull(memberQueryDTO.getInsuranceApplyId())){
            lambdaWrapper = new MPJLambdaWrapper<Member>()
                    .selectAll(Member.class)
                    .selectAs(DispatchUnit::getName,Member::getDuName)
                    .selectAs(Worktype::getName,Member::getWorkTypeName)
                    .leftJoin(ApplyDetail.class,ApplyDetail::getMemberId,Member::getId)
                    .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                    .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyDetail::getDuId)
                    .leftJoin(Worktype.class,Worktype::getId,ApplyDetail::getWorktypeId)
                    .eq(Member::getIsdeleted, Constants.ZERO)
                    .eq(InsuranceApply::getId,memberQueryDTO.getInsuranceApplyId())
                    .exists(!Objects.isNull(memberQueryDTO.getInsuranceApplyId()),
                            " 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
        );
        return memberList;
    }
server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java
@@ -102,6 +102,7 @@
    public List<Worktype> findListByDTO(WorkTypeQueryDTO workTypeQueryDTO){
        List<Worktype> list = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
                .eq(Worktype::getIsdeleted,Constants.ZERO)
                .eq(Worktype::getDataType,Constants.TWO)
                .apply(workTypeQueryDTO.getQueryType().equals(Constants.ZERO),
                        "id in ( select  sw.worktype_id from solution_worktype sw where sw.SOLUTION_ID = "+workTypeQueryDTO.getId()+" )")
                .apply(workTypeQueryDTO.getQueryType().equals(Constants.ONE),