From 61357693b8098a982a092006ba6260bf61d8a9d1 Mon Sep 17 00:00:00 2001 From: = <=> Date: Thu, 6 Mar 2025 20:41:51 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=B4=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MobileMemberCostListController.java | 5 + .../MemberPaymentConfigController.java | 25 ++ .../MemberPaymentProjectController.java | 58 ++- .../MemberPaymentSummaryController.java | 5 +- .../payment/MemberPaymentUserController.java | 89 +++++ .../memberCost/model/MemberPaymentConfig.java | 12 +- .../memberCost/model/MemberPaymentInfo.java | 11 + .../model/MemberPaymentProject.java | 5 + .../service/MemberPaymentService.java | 4 + .../impl/MemberPaymentServiceImpl.java | 11 + .../mobile/memberCost/memberCostList.html | 2 +- .../views/mobile/memberCost/summary.html | 101 +++++ .../platform/memberCost/payment/config.html | 86 ++++- .../platform/memberCost/payment/project.html | 47 +-- .../platform/memberCost/payment/user.html | 352 ++++++++++++++++++ 15 files changed, 760 insertions(+), 53 deletions(-) create mode 100644 src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentUserController.java create mode 100644 src/main/resources/views/mobile/memberCost/summary.html create mode 100644 src/main/resources/views/platform/memberCost/payment/user.html diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/controller/mobile/MobileMemberCostListController.java b/src/main/java/io/v/nutz/zhgh/memberCost/controller/mobile/MobileMemberCostListController.java index 8e3f55d..6907302 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/controller/mobile/MobileMemberCostListController.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/controller/mobile/MobileMemberCostListController.java @@ -36,6 +36,11 @@ public class MobileMemberCostListController { public void paySuccess() { } + @At("/summary") + @Ok("beetl:/mobile/memberCost/summary.html") + public void summary() { + } + @At @ViReturn diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentConfigController.java b/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentConfigController.java index 46a2552..1059c3d 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentConfigController.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentConfigController.java @@ -4,9 +4,11 @@ import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.dao.CndPlus; import io.v.nutz.base.query.PageForm; import io.v.nutz.zhgh.memberCost.model.MemberPaymentConfig; +import io.v.nutz.zhgh.memberCost.model.MemberPaymentProject; import io.v.nutz.zhgh.memberCost.service.MemberPaymentService; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Chain; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; @@ -56,6 +58,29 @@ public class MemberPaymentConfigController { return memberPaymentService.getConfig(); } + @At + @ViReturn + public Object getPaymentConfigList(){ + return memberPaymentService.getPaymentConfigList(); + } + + @At + @ViReturn + public Object doRemove(String id){ + memberPaymentService.dao().clear(MemberPaymentConfig.class, Cnd.where("id", "=", id)); + return null; + } + + @At + @ViReturn + public Object openClosedConfig(String id){ + //位运算 取反 + memberPaymentService.dao().update(MemberPaymentConfig.class, + Chain.makeSpecial("isDisabled", "isDisabled ^ 1"), + Cnd.where("id", "=", id)); + return null; + } + @At @ViReturn diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentProjectController.java b/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentProjectController.java index 6d4fb96..5d23841 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentProjectController.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentProjectController.java @@ -30,11 +30,13 @@ import org.nutz.mvc.annotation.Param; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -122,13 +124,15 @@ public class MemberPaymentProjectController { memberPaymentService.clear(Cnd.where("paymentProjectId", "=", id)); } + //获取缴费项目 + MemberPaymentProject project = memberPaymentService.dao().fetch(MemberPaymentProject.class, id); //获取缴费配置 - MemberPaymentConfig config = memberPaymentService.getConfig(); + MemberPaymentConfig config = memberPaymentService.getConfigById(project.getConfigId()); List payStandards = config.getPayStandards(); //缴费人员类型 List personTypeList = new ArrayList<>(); payStandards.forEach(v->{ - personTypeList.addAll(v.getPersonTypes()); + personTypeList.add(v.getPersonType()); }); //获取所有有入会时间的会员 @@ -138,23 +142,37 @@ public class MemberPaymentProjectController { //过滤出需要新增到记录表中的人员 List needInsertUserIds = memberList.stream().filter(v -> !paymentUserIdList.contains(v.getId())).collect(Collectors.toList()); - //获取缴费项目 - MemberPaymentProject project = memberPaymentService.dao().fetch(MemberPaymentProject.class, id); - //该项目的缴费月份是几月到几月,转为数组,判断新入职教工应缴费几个月 - String[] strings = project.getPaymentStartMonth().substring(0, project.getPaymentStartMonth().length() - 1).split("-"); - DateTime beginDate = DateUtil.parse(project.getYear() + "-" + strings[0] + "-01"); + + //该缴费配置的缴费月份是几月到几月,转为数组 + String[] strings = {config.getPaymentStartMonth(),config.getPaymentEndMonth()}; + DateTime beginDate = DateUtil.parse(strings[0] + "-01"); //获取月份的最后一天 - DateTime endDate = DateUtil.endOfMonth(DateUtil.parse(project.getYear() + "-" + strings[1] + "-01")); + DateTime endDate = DateUtil.endOfMonth(DateUtil.parse(strings[1] + "-01")); List memberPaymentInfos = new ArrayList<>(); needInsertUserIds.forEach(v -> { MemberPaymentInfo paymentInfo = new MemberPaymentInfo(); + paymentInfo.setPersonType(v.getPersonType()); + long differMonth = 0; //如果是新入职教工,计算需要缴纳的月数 if (v.getMemberJoinTime().after(beginDate) && v.getMemberJoinTime().before(endDate)){ - long differMonth = DateUtil.betweenMonth(v.getMemberJoinTime(), endDate, false); + differMonth = DateUtil.betweenMonth(v.getMemberJoinTime(), endDate, false)+1; paymentInfo.setPaymentMonth(String.valueOf(differMonth)); - } else { - paymentInfo.setPaymentMonth(config.getPaidDuration()); + paymentInfo.setPayPersonnel("新进会员"); + //getPayment(v, payStandards, paymentInfo, differMonth,"新进会员"); + + }else if(v.getRetireDate()!=null&&v.getRetireDate().after(beginDate)&&v.getRetireDate().before(endDate)){ + //如果是退休会员 + differMonth = DateUtil.betweenMonth(beginDate, v.getRetireDate(), false)+1; + paymentInfo.setPaymentMonth(String.valueOf(differMonth)); + paymentInfo.setPayPersonnel("退休会员"); + //getPayment(v, payStandards, paymentInfo, differMonth,"退休会员"); + }else { + //如果是普通会员 + differMonth = DateUtil.betweenMonth(beginDate, endDate, false)+1; + paymentInfo.setPaymentMonth(String.valueOf(differMonth)); + paymentInfo.setPayPersonnel("普通会员"); + //getPayment(v, payStandards, paymentInfo, differMonth,"普通会员"); } paymentInfo.setUserId(v.getId()); paymentInfo.setLoginname(v.getLoginname()); @@ -195,6 +213,24 @@ public class MemberPaymentProjectController { return null; } + private static void getPayment(Sys_user v, List payStandards, MemberPaymentInfo paymentInfo, long differMonth,String payPersonnel) { + List list = payStandards.stream().filter(v1 -> v1.getPersonType().equals(v.getPersonType()) && payPersonnel.equals(v1.getPayPersonnel())).collect(Collectors.toList()); + MemberPaymentConfig.PayStandards standards = null; + if (list!=null&&list.size()>0){ + standards = list.get(0); + } + if ("在编".equals(v.getPersonType())&&standards!=null){ + AtomicReference value= new AtomicReference<>(0); + standards.getPayModeValueList().forEach(v1->{ + value.set(value.get()+v1.getInt("value")); + }); + paymentInfo.setPaymentMoney(String.valueOf(value.get()*0.05* differMonth)); + } + if ("非编".equals(v.getPersonType())&&standards!=null){ + paymentInfo.setPaymentMoney(String.valueOf(Integer.valueOf(standards.getPayModeValue())* differMonth)); + } + } + /** * 删除 diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentSummaryController.java b/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentSummaryController.java index 0d6c90a..8968e0f 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentSummaryController.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentSummaryController.java @@ -85,7 +85,6 @@ public class MemberPaymentSummaryController { u.sex, u.member, u.welfareMember, - u.personType, u.userState, u.unionname, u.unionid, @@ -111,7 +110,7 @@ public class MemberPaymentSummaryController { if (StrUtil.isNotBlank(searchName) && StrUtil.isNotBlank(searchKeyword)) { cnd.and(Cnd.likeEX(searchName, searchKeyword)); } - if (!ShiroUtil.hasAnyRoles("sysadmin,A06,H03")) { + if (!ShiroUtil.hasAnyRoles("sysadmin,A06,H04")) { if (ShiroUtil.hasRole("H04")) { cnd.and("u.unionid", "=", Vi.getUnionId()); } else { @@ -173,7 +172,7 @@ public class MemberPaymentSummaryController { public Object modify(@Param("ids") String[] ids, String paymentMoney, boolean isPay, String remark) { List idList = Arrays.asList(ids); if (Lang.isNotEmpty(idList)) { - if (isPay) { + if (!isPay) { //未缴费设为已缴费 memberPaymentService.update(Chain.make("paymentMoney", paymentMoney) .add("remark", remark).add("isPayment", 1) diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentUserController.java b/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentUserController.java new file mode 100644 index 0000000..1cbec5d --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/memberCost/controller/payment/MemberPaymentUserController.java @@ -0,0 +1,89 @@ +package io.v.nutz.zhgh.memberCost.controller.payment; + + +import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.dao.CndPlus; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.memberCost.model.MemberPaymentInfo; +import io.v.nutz.zhgh.memberCost.model.MemberPaymentProject; +import io.v.nutz.zhgh.memberCost.service.MemberPaymentService; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.Static; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.lang.Strings; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * 个人缴费管理 + * @author hpf + */ +@IocBean +@Slf4j +@Ok("json:full") +@At("/platform/member/payment/user") +public class MemberPaymentUserController { + + @Inject + private MemberPaymentService memberPaymentService; + + @At("") + @Ok("beetl:/platform/memberCost/payment/user.html") + @RequiresPermissions("member.payment.user") + public void index() { + } + + @At + @ViReturn + @RequiresPermissions("member.payment.user") + public Object pageData(PageForm pageForm,@Param(value = "year", required = false) String year,@Param(value = "projectName", required = false) String projectName){ + Sql sql = Sqls.create("SELECT" + + " mpi.*," + + " mpp.`year`," + + " mpp.projectName," + + " mpp.startTime," + + " mpp.endTime," + + " mpp.configId," + + " mpc.payStandards," + + " mpc.paymentStartMonth," + + " mpc.paymentEndMonth" + + " FROM" + + " member_payment_info mpi" + + " LEFT JOIN member_payment_project mpp ON mpi.paymentProjectId = mpp.id " + + " LEFT JOIN member_payment_config mpc ON mpc.id = mpp.configId $condition"); + CndPlus cnd = CndPlus.create(); + + cnd.andEX("mpp.isDisabled", "=", '0'); + cnd.andEX("mpp.year", "=", year); + cnd.and("mpi.userId", "=", ShiroUtil.getUserId()); + if (Strings.isNotBlank(projectName)) { + cnd.and(Cnd.likeEX("mpp.projectName", projectName)); + } + cnd.desc("mpp.createTime"); + sql.setCondition(cnd); + return memberPaymentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + @At + @ViReturn + @RequiresPermissions("member.payment.user") + public Object doSave(MemberPaymentInfo memberPaymentInfo) { + memberPaymentService.insertOrUpdate(memberPaymentInfo); + return null; + } + +} diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentConfig.java b/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentConfig.java index 793707d..2bf4785 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentConfig.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentConfig.java @@ -50,11 +50,21 @@ public class MemberPaymentConfig extends BaseModel { @ColDefine(type = ColType.BOOLEAN) private boolean isDisabled; + @Column + @Comment("开始缴费月份") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String paymentStartMonth; + + @Column + @Comment("结束缴费月份") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String paymentEndMonth; + @Data public static class PayStandards implements Serializable { private String payPersonnel; private String payMode; - private List personTypes; + private String personType; private String payModeValue; private List payModeValueList; } diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentInfo.java b/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentInfo.java index a798ec0..b0b2c46 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentInfo.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentInfo.java @@ -87,4 +87,15 @@ public class MemberPaymentInfo { @Comment("缴费月份") @ColDefine(type = ColType.VARCHAR, width = 10) private String paymentMonth; + + @Column + @Comment("人员类型") + @ColDefine(type = ColType.VARCHAR, width = 10) + private String personType; + + + @Column + @Comment("会员类型") + @ColDefine(type = ColType.VARCHAR, width = 10) + private String payPersonnel; } diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentProject.java b/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentProject.java index 92b8cef..a8d890b 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentProject.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/model/MemberPaymentProject.java @@ -58,4 +58,9 @@ public class MemberPaymentProject extends BaseModel { @Comment("结束缴费时间") @ColDefine(type = ColType.VARCHAR,width = 32) private String endTime; + + @Column + @Comment("缴费配置id") + @ColDefine(type = ColType.VARCHAR,width = 32) + private String configId; } diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/service/MemberPaymentService.java b/src/main/java/io/v/nutz/zhgh/memberCost/service/MemberPaymentService.java index 7308adf..bd06971 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/service/MemberPaymentService.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/service/MemberPaymentService.java @@ -17,4 +17,8 @@ public interface MemberPaymentService extends ViService { Workbook exportOrZip(List list, OutputStream outputStream)throws Exception; MemberPaymentConfig getConfig(); + + List getPaymentConfigList(); + + MemberPaymentConfig getConfigById(String configId); } diff --git a/src/main/java/io/v/nutz/zhgh/memberCost/service/impl/MemberPaymentServiceImpl.java b/src/main/java/io/v/nutz/zhgh/memberCost/service/impl/MemberPaymentServiceImpl.java index 74683db..f87114a 100644 --- a/src/main/java/io/v/nutz/zhgh/memberCost/service/impl/MemberPaymentServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/memberCost/service/impl/MemberPaymentServiceImpl.java @@ -11,6 +11,7 @@ import io.v.nutz.zhgh.memberCost.model.MemberPaymentProject; import io.v.nutz.zhgh.memberCost.service.MemberPaymentService; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; @@ -61,4 +62,14 @@ public class MemberPaymentServiceImpl extends ViServiceImpl i public MemberPaymentConfig getConfig() { return dao().fetch(MemberPaymentConfig.class); } + + @Override + public List getPaymentConfigList() { + return dao().query(MemberPaymentConfig.class, Cnd.NEW().and("isDisabled","=","0")); + } + + @Override + public MemberPaymentConfig getConfigById(String configId) { + return dao().fetch(MemberPaymentConfig.class,configId); + } } diff --git a/src/main/resources/views/mobile/memberCost/memberCostList.html b/src/main/resources/views/mobile/memberCost/memberCostList.html index c5823d0..67937f0 100644 --- a/src/main/resources/views/mobile/memberCost/memberCostList.html +++ b/src/main/resources/views/mobile/memberCost/memberCostList.html @@ -267,7 +267,7 @@ layout("/mobile/platform.html"){ const payStandards = this.configData.payStandards resp.data.forEach((r) => { payStandards.map((p) => { - if (p.personTypes.includes(personType)) { + if (p.personType===personType) { r.selectMode = p.payMode if (p.c === "1") { r.modeValue = p.payModeValue diff --git a/src/main/resources/views/mobile/memberCost/summary.html b/src/main/resources/views/mobile/memberCost/summary.html new file mode 100644 index 0000000..80bd932 --- /dev/null +++ b/src/main/resources/views/mobile/memberCost/summary.html @@ -0,0 +1,101 @@ + +
+ + + + +
+ + +
+
+ + + + + + + + + + + + + + + +
+
+ + + diff --git a/src/main/resources/views/platform/memberCost/payment/config.html b/src/main/resources/views/platform/memberCost/payment/config.html index 2b67e2a..23eacff 100644 --- a/src/main/resources/views/platform/memberCost/payment/config.html +++ b/src/main/resources/views/platform/memberCost/payment/config.html @@ -18,7 +18,7 @@ layout("/layouts/platform.html"){
+ v-model="pageForm.name">
@@ -60,7 +60,7 @@ layout("/layouts/platform.html"){ @@ -100,9 +100,22 @@ layout("/layouts/platform.html"){ style="margin: 10px 0 0 0"> - - - + + + + + + + + + @@ -178,12 +191,8 @@ layout("/layouts/platform.html"){
( - - - - - + + + + + @@ -220,7 +213,6 @@ layout("/layouts/platform.html"){ tableColumns: [ {prop: 'year', label: '年度', sortable: true}, {prop: 'projectName', label: '项目名称', sortable: true}, - {prop: 'paymentMonth', label: '缴费月份', sortable: true}, {prop: 'startTime', label: '缴费开始时间', sortable: true}, {prop: 'endTime', label: '缴费截止时间', sortable: true}, {prop: 'createTime', label: '创建时间', sortable: true}, @@ -234,9 +226,11 @@ layout("/layouts/platform.html"){ year: [{required: true, message: '必填', trigger: ['blur', 'change']}], paymentMonth: [{required: true, message: '必填', trigger: ['blur', 'change']}], paymentTime: [{required: true, message: '必填', trigger: ['blur', 'change']}], + configId: [{required: true, message: '必填', trigger: ['blur', 'change']}], }, paymentConfig: {}, - monthSelect: [] + monthSelect: [], + configList:[] } }, components: { @@ -265,7 +259,10 @@ layout("/layouts/platform.html"){ }, openView(data) { this.formData = {} - this.formData = {...data} + this.formData = { + ...data, + paymentTime:[data.startTime, data.endTime], + } this.isSubmit = false this.$refs.guava.view() }, @@ -273,7 +270,6 @@ layout("/layouts/platform.html"){ this.formData = {} this.formData = { ...data, - paymentMonth:[data.paymentStartMonth, data.paymentEndMonth], paymentTime:[data.startTime, data.endTime], } this.isSubmit = true @@ -369,8 +365,6 @@ layout("/layouts/platform.html"){ }); this.formData.startTime=this.formData.paymentTime[0] this.formData.endTime=this.formData.paymentTime[1] - this.formData.paymentStartMonth=this.formData.paymentMonth[0] - this.formData.paymentEndMonth=this.formData.paymentMonth[1] const formData = clone(this.formData) const resp = await $.post(loc() + '/doSave', formData) loading.close() @@ -393,8 +387,15 @@ layout("/layouts/platform.html"){ this.notifyWarning(resp.msg) } }, + async getPaymentConfigList(id) { + const resp = await $.post('/platform/member/payment/config/getPaymentConfigList') + if (resp.code === 0) { + this.configList = resp.data + } + }, }, async created() { + this.getPaymentConfigList() this.pageData() } }) diff --git a/src/main/resources/views/platform/memberCost/payment/user.html b/src/main/resources/views/platform/memberCost/payment/user.html new file mode 100644 index 0000000..2f06427 --- /dev/null +++ b/src/main/resources/views/platform/memberCost/payment/user.html @@ -0,0 +1,352 @@ + +
+ + + + + + + + +
+ +