增加妇幼生殖VIP

This commit is contained in:
wyn
2026-05-12 14:50:58 +08:00
parent bc52704f0f
commit d70492031e
9 changed files with 86 additions and 14 deletions

View File

@@ -70,12 +70,14 @@ public class UserVipController {
List<UserVip> l9 = userVipService.list(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId,ShiroUtils.getUId()).eq(UserVip::getType,9).orderByDesc(UserVip::getEndTime));
List<UserVip> l5 = userVipService.list(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId,ShiroUtils.getUId()).eq(UserVip::getType,5).orderByDesc(UserVip::getEndTime));
List<UserVip> l6 = userVipService.list(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId,ShiroUtils.getUId()).eq(UserVip::getType,6).orderByDesc(UserVip::getEndTime));
if (l4.size()>0&&l9.size()>0&&l5.size()>0&&l6.size()>0){
List<UserVip> l10 = userVipService.list(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId,ShiroUtils.getUId()).eq(UserVip::getType,10).orderByDesc(UserVip::getEndTime));
if (l4.size()>0&&l9.size()>0&&l5.size()>0&&l6.size()>0&&l10.size()>0){
Date t4 = l4.get(0).getEndTime();
Date t9 = l9.get(0).getEndTime();
Date t5 = l5.get(0).getEndTime();
Date t6 = l6.get(0).getEndTime();
if (t4.getTime()==t9.getTime()&&t9.getTime()==t5.getTime()&&t5.getTime()==t6.getTime()){
Date t10 = l10.get(0).getEndTime();
if (t4.getTime()==t9.getTime()&&t9.getTime()==t5.getTime()&&t5.getTime()==t6.getTime()&&t6.getTime()==t10.getTime()){
Map map = new HashMap();
map.put("type",1);
map.put("endTime",t4);
@@ -98,6 +100,10 @@ public class UserVipController {
map6.put("type",6);
map6.put("endTime",t6);
tempList.add(map6);
Map map10 = new HashMap();
map10.put("type",10);
map10.put("endTime",t10);
tempList.add(map10);
tempList = tempList.stream().sorted((map1,map2)->{
return Long.compare(((Date)map1.get("endTime")).getTime(),((Date)map2.get("endTime")).getTime());
}).collect(Collectors.toList());
@@ -133,6 +139,13 @@ public class UserVipController {
resList.add(map);
}
if (l10.size()>0){
Map map = new HashMap();
map.put("type",10);
map.put("endTime",l10.get(0).getEndTime());
resList.add(map);
}
}
}
List<UserVip> l7 = userVipService.list(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId,ShiroUtils.getUId()).eq(UserVip::getType,7).orderByDesc(UserVip::getEndTime));
@@ -203,6 +216,7 @@ public class UserVipController {
ll.add(Arrays.asList(6));
ll.add(Arrays.asList(2));
ll.add(Arrays.asList(7,8));
ll.add(Arrays.asList(10));
}
List<Map<String,Object>> resList = new ArrayList<>();
for (List l : ll) {
@@ -369,6 +383,7 @@ public class UserVipController {
public R placeVipOrder(@RequestBody BuyOrder buyOrder){
int uid = ShiroUtils.getUId();
buyOrder.setOrderStatus("0");
buyOrder.setPaymentDate(new Date());
buyOrder.setOrderType("vip");
String timeId = IdWorker.getTimeId().substring(0, 32);
buyOrder.setOrderSn(timeId);
@@ -469,7 +484,7 @@ public class UserVipController {
Map map = new HashMap();
map.put("courseCount",0);
map.put("originalPrice",0);
if ("4".equals(type)||"9".equals(type)||"5".equals(type)||"6".equals(type)){
if ("4".equals(type)||"9".equals(type)||"5".equals(type)||"6".equals(type)||"10".equals(type)){
List list = new ArrayList<>();
if ("4".equals(type)){
userVipService.bottomLabel(1,list);
@@ -479,6 +494,8 @@ public class UserVipController {
userVipService.bottomLabel(2,list);
}else if ("6".equals(type)){
userVipService.bottomLabel(5,list);
}else if ("10".equals(type)){
userVipService.bottomLabel(109,list);
}
if (list.size()>0){
MPJLambdaWrapper<CourseCatalogueEntity> wrapper = new MPJLambdaWrapper();

View File

@@ -14,4 +14,6 @@ public interface UserVipLogDao extends MPJBaseMapper<UserVipLog> {
List<Map<String,Object>> getUserVipLogInfo(@Param("date") String date);
Map<String,Object> getUserVipLogInfoTotal(@Param("date") String date);
List<Map<String,Object>> getUserVipRefundInfo(@Param("date") String last_l_date,@Param("date") String last_date);
}

View File

@@ -22,6 +22,8 @@ public interface UserVipLogService extends IService<UserVipLog> {
List<Map<String,Object>> getUserVipLogInfo(String date);
List<Map<String, Object>> getUserVipRefundInfo(String last_l_date, String last_date);
Map<String, Object> getUserVipLogInfoTotal(String date);
}

View File

@@ -1396,7 +1396,7 @@ public class ClassEntityServiceImpl extends ServiceImpl<ClassEntityDao, ClassEnt
.eq(ClassTaskAndQuesReply::getUserId,params.get("userId").toString()));
for (ClassTaskAndQuesReply reply:classTaskAndQuesReplys){
ClassEntity classEntity = this.getById(reply.getClassId());
if (!"2".equals(classEntity.getState())){
if (classEntity!=null && !"2".equals(classEntity.getState())){
res = reply;
}
}

View File

@@ -93,6 +93,11 @@ public class UserVipLogServiceImpl extends ServiceImpl<UserVipLogDao, UserVipLog
return this.baseMapper.getUserVipLogInfo(date);
}
@Override
public List<Map<String, Object>> getUserVipRefundInfo(String last_l_date, String last_date) {
return this.baseMapper.getUserVipRefundInfo(last_l_date,last_date);
}
@Override
public Map<String, Object> getUserVipLogInfoTotal(String date) {
return this.baseMapper.getUserVipLogInfoTotal(date);

View File

@@ -140,7 +140,7 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
.eq(UserVip::getUserId, u==null?ShiroUtils.getUId():u.getId())
.eq(UserVip::getState,0));
for (UserVip userVip : userVipList) {
if (userVip.getType()==4||userVip.getType()==9||userVip.getType()==5||userVip.getType()==6) {
if (userVip.getType()==4||userVip.getType()==9||userVip.getType()==5||userVip.getType()==6||userVip.getType()==10) {
List<CourseToMedicine> list = courseToMedicalDao.selectList(new LambdaQueryWrapper<CourseToMedicine>()
.eq(CourseToMedicine::getCourseId,courseId));
for (CourseToMedicine ctm:list) {
@@ -149,6 +149,7 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
if ((cm.getId()==1&&userVip.getType()==4)||//中医学
(cm.getId()==74&&userVip.getType()==9)||//中西汇通
(cm.getId()==2&&userVip.getType()==5)||//针灸学
(cm.getId()==109&&userVip.getType()==10)||//妇幼生殖
(cm.getId()==5&&userVip.getType()==6)){//肿瘤学
return userVip;
}
@@ -205,6 +206,8 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
set.add(6);
}else if (cm.getId() == 4) {//心身医学
set.add(8);
}else if (cm.getId() == 109){//妇幼生殖
set.add(10);
}
}
}
@@ -221,7 +224,8 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
return set;
}
public CourseMedicine topLabel(int labelId) {
public CourseMedicine
topLabel(int labelId) {
CourseMedicine cm = courseMedicineDao.selectById(labelId);
if (cm != null) {
CourseMedicine pcm = courseMedicineDao.selectById(cm.getPid());
@@ -258,8 +262,9 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
List<UserVip> resList = new ArrayList();
if(vipBuyConfigEntity.getType()==1){//医学超级
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,buyOrder.getUserId()).eq(UserVip::getState,0).in(UserVip::getType,4,9,5,6));
for (int i=4;i<=7;i++){
.eq(UserVip::getUserId,buyOrder.getUserId()).eq(UserVip::getState,0).in(UserVip::getType,4,9,5,6,10));
for (int i=4;i<=10;i++){
log.info("openVipForUser====i:"+i);
if (i==7){
i=9;
}
@@ -289,7 +294,7 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
}
}
}else if(vipBuyConfigEntity.getType()==11){//延期医学超级
for (int i=4;i<=7;i++){
for (int i=4;i<=10;i++){
if (i==7){
i=9;
}
@@ -367,7 +372,7 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
}
}
}else if (vipBuyConfigEntity.getType()==4||vipBuyConfigEntity.getType()==9||vipBuyConfigEntity.getType()==5||vipBuyConfigEntity.getType()==6||
vipBuyConfigEntity.getType()==7||vipBuyConfigEntity.getType()==8){
vipBuyConfigEntity.getType()==7||vipBuyConfigEntity.getType()==8 || vipBuyConfigEntity.getType()==10){
UserVip userVip = new UserVip();
userVip.setUserId(buyOrder.getUserId());
userVip.setType(vipBuyConfigEntity.getType());
@@ -376,7 +381,7 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
userVipDao.insert(userVip);
resList.add(userVip);
}else if (vipBuyConfigEntity.getType()==41||vipBuyConfigEntity.getType()==91||vipBuyConfigEntity.getType()==51||vipBuyConfigEntity.getType()==61||
vipBuyConfigEntity.getType()==71||vipBuyConfigEntity.getType()==81){
vipBuyConfigEntity.getType()==71||vipBuyConfigEntity.getType()==81 ||vipBuyConfigEntity.getType()==101){
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,buyOrder.getUserId())
.eq(UserVip::getType,vipBuyConfigEntity.getType().toString().substring(0,1))

View File

@@ -19,6 +19,8 @@ import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
@@ -600,7 +602,17 @@ public class StatisticsController {
//导出vip记录明细
@RequestMapping("/exportUserVipLogInfo")
public void exportUserVipLogInfo(HttpServletResponse response, @RequestBody Map<String,Object> params){
List<Map<String,Object>> maps = userVipLogService.getUserVipLogInfo(params.get("date").toString());
String dateStr = params.get("date").toString();
List<Map<String,Object>> maps = userVipLogService.getUserVipLogInfo(dateStr);
/* DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(params.get("date").toString(), fmt);
String date_last_date = date.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
List<Map<String,Object>> refundMaps = userVipLogService.getUserVipRefundInfo(date_last_date,dateStr);*/
XSSFWorkbook wb = new XSSFWorkbook();
//创建一张表
Sheet sheet = wb.createSheet("vip记录明细");
@@ -626,6 +638,14 @@ public class StatisticsController {
titleRow.createCell(17).setCellValue("已摊销金额");
titleRow.createCell(18).setCellValue("当月摊销金额");
titleRow.createCell(19).setCellValue("剩余摊销金额");
// for (Map<String,Object> map:refundMaps){
// Map<String,Object> newMap = new HashMap<>();
// newMap.put("name",map.get("name").toString());
// newMap.put("tel",map.get("tel").toString());
// newMap.put("type",map.get("type").toString());
//
// }
//序号默认为1
int cell = 1;
//遍历

View File

@@ -35,7 +35,7 @@
left join course_catalogue cc on cc.id = ucb.catalogue_id
left join pay_zfb_order pzo on pzo.relevanceOid = ucbl.order_sn and pzo.trade_no is not null
where ucbl.del_flag = 0 and ucbl.fee > 0 and DATE_FORMAT(ucbl.pay_time,'%Y-%m-%d') &lt;= #{date}
and u.id not in (select id from user where tester_flag = 1)
and (u.id not in (select id from user where tester_flag = 1) or (u.id in (select id from user where tester_flag = 1 and ( ucbl.pay_type in ('微信','支付宝') and ucbl.create_time>='2026-05-06 00:00:00'))))
order by ucb.id
) t) s) q) w) e) r
</select>

View File

@@ -20,7 +20,8 @@
left join pay_zfb_order pzo on pzo.relevanceOid = uvl.order_sn and pzo.trade_no is not null
where u.del_flag = 0 and uvl.del_flag = 0 and uv.del_flag = 0
and DATE_FORMAT(IF(uvl.pay_time is NULL,uvl.start_time,uvl.pay_time), '%Y-%m') &lt;= SUBSTR(#{date},1,7)
and u.id not in (select id from user where tester_flag = 1)
and
(u.id not in (select id from user where tester_flag = 1) or (u.id in (select id from user where tester_flag = 1 and (uvl.pay_type in('微信','支付宝') and uvl.create_time>='2026-05-06 00:00:00'))))
order by uvl.end_time asc
) t order by currentDays desc
</select>
@@ -49,5 +50,25 @@
) s
</select>
<select id="getUserVipRefundInfo" resultType="map">
select t.*,
IF(totalDays=alreadyDays,fee,dayAmount*alreadyDays) alreadyTanxiao,
dayAmount*currentDays currentTanxiao,
fee-IF(totalDays=alreadyDays,fee,dayAmount*alreadyDays)-(dayAmount*currentDays) notyetTanxiao
from (select uvl.*,c.create_time refund_time,u.name,if(u.tel is null,if(u.email is null,'',u.email),u.tel) tel, IF(uv.type=4,'中医学',IF(uv.type=5,'针灸学',IF(uv.type=6,'肿瘤学',IF(uv.type=7,'国学',IF(uv.type=8,'心理学','中西汇通学'))))) type,
uvl.start_time startTime,uvl.end_time endTime,if(uvl.pay_time is null,'',uvl.pay_time) payTime,uvl.order_sn orderSn,pzo.trade_no zfbOrder,uvl.pay_type payType,uvl.remark,uvl.price,uvl.fee,DATEDIFF(uvl.end_time,uvl.start_time)+1 totalDays,ROUND(uvl.fee/(DATEDIFF(uvl.end_time,uvl.start_time)+1),2) dayAmount,
IF(DATE_FORMAT(uvl.end_time, '%Y-%m') &lt; SUBSTR(#{date},1,7),DATEDIFF(uvl.end_time,uvl.start_time)+1,IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(uvl.start_time, '%Y-%m') &lt; SUBSTR(#{date},1,7),DATEDIFF(concat(SUBSTR(#{date},1,7),'-01'),uvl.start_time),0))) alreadyDays,
IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(uvl.end_time, '%Y-%m') &lt; SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(uvl.end_time, '%Y-%m') > SUBSTR(#{date},1,7),if(DATE_FORMAT(uvl.start_time, '%Y-%m') = SUBSTR(#{date},1,7),DATEDIFF(#{date},uvl.start_time)+1,DAY(#{date})),DATEDIFF(uvl.end_time,concat(SUBSTR(#{date},1,7),'-01'))+1))) currentDays,
IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > SUBSTR(#{date},1,7),DATEDIFF(uvl.end_time,uvl.start_time)+1,(IF(DATE_FORMAT(uvl.end_time, '%Y-%m') &lt;= SUBSTR(#{date},1,7),0,DATEDIFF(uvl.end_time,#{date})))) notyetDays
from buy_order a left join user_vip_log uvl on a.order_sn = uvl.order_sn
left join user_vip vp on uvl.user_vip_id = vp.id
left join buy_order_refund c on c.order_id=a.order_id left join user u on a.user_id=u.id
left join pay_zfb_order pzo on pzo.relevanceOid = a.order_sn and pzo.trade_no is not null
where a.order_status='6' and
DATE_FORMAT(a.create_time, '%Y-%m') = SUBSTR(#{last_l_date},1,7) and DATE_FORMAT(c.create_time, '%Y-%m') = SUBSTR(#{last_date},1,7) and a.order_type='vip' and a.del_flag=0 and uvl.del_flag=0 and c.del_flag=0
) t order by currentDays desc
) s
</select>
</mapper>