Browse Source

Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl

feature/0725lihuilin
willy 1 month ago
parent
commit
724079281f
  1. 2
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingRecordDto.java
  2. 42
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingExport.java
  3. 28
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Market.java
  4. 21
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingTimeVo.java
  5. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingVO.java
  6. 14
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/ExportController.java
  7. 69
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java
  8. 11
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java
  9. 11
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/IFundingService.java
  10. 121
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java
  11. 50
      lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java
  12. 37
      lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/ApiIFundingMapper.java
  13. 24
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/ApiIFundingService.java
  14. 224
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java
  15. 9
      lottery-system/lottery-service/src/main/resources/application.yml
  16. 36
      lottery-system/lottery-service/src/main/resources/logback-spring.xml
  17. 8
      lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml
  18. 108
      lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml
  19. 80
      lottery-system/lottery-service/src/main/resources/mapper/api/ApiIFundingService.xml

2
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingRecordDto.java

@ -13,8 +13,6 @@ import lombok.Data;
@Data @Data
public class FundingRecordDto { public class FundingRecordDto {
private String token;
private Integer activityId; private Integer activityId;
private String marketSign; private String marketSign;

42
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingExport.java

@ -0,0 +1,42 @@
package com.lottery.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName FundingExport
* @description:
* @author:jihaipeng
* @create: 202507-17 10:49
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FundingExport {
@ExcelProperty("用户名")
private String username; // 用户名
@ExcelProperty("精网号") // 定义 Excel 表头为用户唯一码
private String jwcode; // 用户唯一码
@ExcelProperty("市场") // 定义 Excel 表头为市场标识
private String marketSign; // 市场标识(usa/hk)
@ExcelProperty("参与时间") // 定义 Excel 表头为参与时间
private LocalDateTime joinTime; // 参与时间
// 方法1通过 @JsonFormat 直接格式化适用于JSON序列化
@JsonFormat(pattern = "yyyy年M月d日 HH:mm")
public LocalDateTime getJoinTime() {
return joinTime;
}
}

28
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Market.java

@ -0,0 +1,28 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: lottery-system
* @ClassName market
* @description:
* @author:jihaipeng
* @create: 202507-16 12:01
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("market")
public class Market {
private Integer id;
private String market;
private String text;
private String icon;
private Integer des;
private Integer flag;
}

21
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingTimeVo.java

@ -0,0 +1,21 @@
package com.lottery.vo;
import lombok.Data;
import java.time.LocalDate;
/**
* @program: lottery-system
* @ClassName ApiFundingTimeVo
* @description:
* @author:jihaipeng
* @create: 202507-16 13:49
* @Version 1.0
**/
@Data
public class ApiFundingTimeVo {
private String marketOne;
private String marketTwo;
private LocalDate startTime;
private LocalDate endTime;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingVO.java

@ -0,0 +1,26 @@
package com.lottery.vo;
import lombok.Data;
import java.time.LocalDate;
/**
* @program: lottery-system
* @ClassName ApiFundingVO
* @description:
* @author:jihaipeng
* @create: 202507-16 11:30
* @Version 1.0
**/
@Data
public class ApiFundingVO {
private String marketOne;
private String marketTwo;
private LocalDate startTime;
private LocalDate endTime;
private Integer Totalcount;
private Integer marketOneCount;
private Integer marketTwoCount;
private String marketAddOne;
private String marketAddTwo;
}

14
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/ExportController.java

@ -0,0 +1,14 @@
package com.lottery.admin.controller;
/**
* @program: lottery-system
* @ClassName ExportController
* @description:
* @author:jihaipeng
* @create: 202507-17 14:36
* @Version 1.0
**/
public class ExportController {
}

69
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java

@ -7,12 +7,17 @@ import com.lottery.dto.FundingRecordDto;
import com.lottery.dto.FundingUserDto; import com.lottery.dto.FundingUserDto;
import com.lottery.result.Result; import com.lottery.result.Result;
import com.lottery.vo.FundingActivityVo; import com.lottery.vo.FundingActivityVo;
import com.lottery.vo.FundingUserVo;
import org.apache.ibatis.annotations.Param;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -25,26 +30,33 @@ import java.util.Map;
* @Version 1.0 * @Version 1.0
**/ **/
@RestController @RestController
@RequestMapping("/funding")
@RequestMapping("/admin/funding")
public class FundingController { public class FundingController {
@Autowired @Autowired
private IFundingService fundingService; private IFundingService fundingService;
private final static Logger LOGGER = LoggerFactory.getLogger(FundingController.class);
@Autowired
private ProjectInfoAutoConfiguration projectInfoAutoConfiguration;
/** /**
* 获取所有众筹活动 * 获取所有众筹活动
*
* @return * @return
*/ */
@GetMapping("/getActivity") @GetMapping("/getActivity")
public Result<List<FundingActivityVo>> getFundingActivity(){
List<FundingActivityVo> list = fundingService.getFundingActivity();
return Result.success(list);
public Result<List<FundingActivityVo>> getFundingActivity() {
LOGGER.info("获取所有众筹活动");
List<FundingActivityVo> list = fundingService.getFundingActivity();
return Result.success(list);
} }
//修改众筹的活动状态 //修改众筹的活动状态
@PostMapping("/updateActivityStatus") @PostMapping("/updateActivityStatus")
public Result<String> updateActivityStatus(@RequestParam @Validated Integer id, @RequestParam @Validated Integer status) {
public Result updateActivityStatus(@RequestParam @Validated Integer id, @RequestParam @Validated Integer status) {
LOGGER.info("修改的众筹活动id为{},修改的众筹活动状态为{}", id, status);
// 参数校验 // 参数校验
if (id == null || status == null) { if (id == null || status == null) {
return Result.failure("参数不能为空"); return Result.failure("参数不能为空");
@ -56,8 +68,7 @@ public class FundingController {
return Result.failure("活动状态值非法"); return Result.failure("活动状态值非法");
} }
try { try {
fundingService.updateActivityStatus(id, status);
return Result.success("修改活动状态成功");
return fundingService.updateActivityStatus(id, status);
} catch (Exception e) { } catch (Exception e) {
return Result.failure("修改活动状态失败"); return Result.failure("修改活动状态失败");
} }
@ -67,8 +78,10 @@ public class FundingController {
//添加活动 //添加活动
@PostMapping("/addActivity") @PostMapping("/addActivity")
public Result<String> addActivity(@Validated @RequestBody FundingActivityDto fundingActivityDto) { public Result<String> addActivity(@Validated @RequestBody FundingActivityDto fundingActivityDto) {
LOGGER.info("添加活动,参数为{}", fundingActivityDto);
try { try {
return fundingService.addActivity(fundingActivityDto); return fundingService.addActivity(fundingActivityDto);
} catch (Exception e) { } catch (Exception e) {
return Result.failure("添加活动失败"); return Result.failure("添加活动失败");
} }
@ -76,45 +89,63 @@ public class FundingController {
//根据活动id查询助力详情 //根据活动id查询助力详情
@PostMapping("/getActivityDetail") @PostMapping("/getActivityDetail")
public Map<String, Object> getActivityDetail(@RequestBody FundingUserDto fundingUserDto) {
public Result<Map<String, Object>> getActivityDetail(@RequestBody FundingUserDto fundingUserDto) {
LOGGER.info("接口getActivityDetail查询助力详情,查询条件{}", fundingUserDto);
// 必填参数校验可选但推荐 // 必填参数校验可选但推荐
if (fundingUserDto.getActivityId() == null) { if (fundingUserDto.getActivityId() == null) {
throw new IllegalArgumentException("activityId 不能为空"); throw new IllegalArgumentException("activityId 不能为空");
} }
return fundingService.getActivityDetail(fundingUserDto);
return Result.success(fundingService.getActivityDetail(fundingUserDto));
} }
// //根据活动id查询数据统计 // //根据活动id查询数据统计
@PostMapping("/getActivityDate") @PostMapping("/getActivityDate")
public Map<String, Object> getActivityDate(@RequestParam Integer activityId ) {
return fundingService.getActivityDate(activityId);
public Result<Map<String, Object>> getActivityDate(@RequestParam Integer activityId) {
LOGGER.info("接口getActivityDate查询后台数据统计,活动id为{}", activityId);
return Result.success(fundingService.getActivityDate(activityId));
} }
//添加用户参与记录
@PostMapping("/addRecord")
public Result<String> addRecord(@RequestBody FundingRecordDto fundingRecordDto) throws Exception {
return fundingService.addRecord(fundingRecordDto);
}
// //添加用户参与记录
// @PostMapping("/addRecord")
// public Result<String> addRecord(@RequestBody FundingRecordDto fundingRecordDto) throws Exception {
// return fundingService.addRecord(fundingRecordDto);
// }
//设置活动初始活动 //设置活动初始活动
@PostMapping("/setActivityTime") @PostMapping("/setActivityTime")
public Result<String> setActivityTime(@RequestParam Integer activityId, @RequestParam Integer time) { public Result<String> setActivityTime(@RequestParam Integer activityId, @RequestParam Integer time) {
LOGGER.info("设置id={}的活动初始时间为{}", activityId, time);
return fundingService.setActivityTime(activityId, time); return fundingService.setActivityTime(activityId, time);
} }
//添加虚拟次数 //添加虚拟次数
@PostMapping("/addDateVirtual") @PostMapping("/addDateVirtual")
public Result<String> addVirtual(@RequestParam Integer activityId, @RequestParam String stock, @RequestParam Integer addTotal) { public Result<String> addVirtual(@RequestParam Integer activityId, @RequestParam String stock, @RequestParam Integer addTotal) {
LOGGER.info("添加虚拟次数,id={},stock={},addTotal={}", activityId, stock, addTotal);
return fundingService.addVirtual(activityId, stock, addTotal); return fundingService.addVirtual(activityId, stock, addTotal);
} }
//返回数据详情 //返回数据详情
@PostMapping("/getDate") @PostMapping("/getDate")
public Result<Map<String, Object> > getDate(@RequestParam Integer activityId) {
public Result<Map<String, Object>> getDate(@RequestParam Integer activityId) {
LOGGER.info("返回id={}的活动的设置数据详情", activityId);
return Result.success(fundingService.getDate(activityId)); return Result.success(fundingService.getDate(activityId));
} }
//获取市场股票列表
@GetMapping("/getMarketList")
public Result<List> getMarket() {
LOGGER.info("获取市场股票列表");
return Result.success(fundingService.getMarketList());
}
//导出活动数据
@PostMapping("/exportActivityData")
public void exportActivityData(@RequestBody FundingUserDto fundingUserDto, HttpServletResponse response) throws IOException {
LOGGER.info("导出活动数据,参数为{}", fundingUserDto);
fundingService.exportActivityData(fundingUserDto,response);
}
} }

11
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java

@ -1,6 +1,7 @@
package com.lottery.admin.mapper; package com.lottery.admin.mapper;
import com.lottery.entity.Activity; import com.lottery.entity.Activity;
import com.lottery.entity.FundingExport;
import com.lottery.vo.FundingActivityVo; import com.lottery.vo.FundingActivityVo;
import com.lottery.vo.FundingUserVo; import com.lottery.vo.FundingUserVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -42,7 +43,7 @@ public interface IFundingMapper {
Integer searchMarketTotal(Integer activityId, String marketSign); Integer searchMarketTotal(Integer activityId, String marketSign);
void addRecord(Integer activityId, String username, String jwcode, String marketSign, LocalDateTime joinTime);
// void addRecord(Integer activityId, String username, String jwcode, String marketSign, LocalDateTime joinTime);
void setActivityDate(Integer activityId, Integer time); void setActivityDate(Integer activityId, Integer time);
@ -53,4 +54,12 @@ public interface IFundingMapper {
Integer searchVirtual(Integer activityId, String stock); Integer searchVirtual(Integer activityId, String stock);
Integer getTime(Integer activityId, String stock); Integer getTime(Integer activityId, String stock);
List<String> getMarketList();
Integer selectStatus();
String selectActivityName(Integer activityId);
List<FundingExport> selectByConditionExport(Integer activityId, String username, String jwcode, String marketSign);
} }

11
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/IFundingService.java

@ -7,6 +7,8 @@ import com.lottery.result.Result;
import com.lottery.vo.FundingActivityVo; import com.lottery.vo.FundingActivityVo;
import com.lottery.vo.FundingUserVo; import com.lottery.vo.FundingUserVo;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -24,7 +26,7 @@ public interface IFundingService {
List<FundingActivityVo> getFundingActivity(); List<FundingActivityVo> getFundingActivity();
void updateActivityStatus(Integer id, Integer status);
Result<String> updateActivityStatus(Integer id, Integer status);
Result<String> addActivity(FundingActivityDto fundingActivityDto); Result<String> addActivity(FundingActivityDto fundingActivityDto);
@ -32,11 +34,16 @@ public interface IFundingService {
Map<String, Object> getActivityDate(Integer activityId); Map<String, Object> getActivityDate(Integer activityId);
Result<String> addRecord(FundingRecordDto fundingRecordDto) throws Exception;
// Result<String> addRecord(FundingRecordDto fundingRecordDto) throws Exception;
Result<String> setActivityTime(Integer activityId, Integer time); Result<String> setActivityTime(Integer activityId, Integer time);
Result<String> addVirtual(Integer activityId, String stock, Integer addTotal); Result<String> addVirtual(Integer activityId, String stock, Integer addTotal);
Map<String, Object> getDate(Integer activityId); Map<String, Object> getDate(Integer activityId);
List getMarketList();
void exportActivityData(FundingUserDto fundingUserDto, HttpServletResponse response) throws IOException;
} }

121
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java

@ -1,5 +1,7 @@
package com.lottery.admin.service.Impl; package com.lottery.admin.service.Impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.lottery.dto.FundingActivityDto; import com.lottery.dto.FundingActivityDto;
@ -8,6 +10,7 @@ import com.lottery.dto.FundingUserDto;
import com.lottery.entity.Activity; import com.lottery.entity.Activity;
import com.lottery.admin.mapper.IFundingMapper; import com.lottery.admin.mapper.IFundingMapper;
import com.lottery.admin.service.IFundingService; import com.lottery.admin.service.IFundingService;
import com.lottery.entity.FundingExport;
import com.lottery.result.Result; import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil; import com.lottery.utils.ConvertBeanUtil;
import com.lottery.utils.HttpUtils; import com.lottery.utils.HttpUtils;
@ -17,6 +20,9 @@ import com.lottery.vo.FundingUserVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -51,9 +57,16 @@ public class FundingServiceImpl implements IFundingService {
//修改众筹的活动状态 //修改众筹的活动状态
@Override @Override
public void updateActivityStatus(Integer id, Integer status) {
public Result<String> updateActivityStatus(Integer id, Integer status) {
if(status == 1){
//查询状态
Integer statuss = fundingMapper.selectStatus();
if(statuss >= 1){
return Result.failure("当前有活动正在启用,修改状态失败");
}
}
fundingMapper.updateActivityStatus(id, status); fundingMapper.updateActivityStatus(id, status);
return Result.success("修改状态成功");
} }
//添加众筹活动 //添加众筹活动
@ -82,6 +95,15 @@ public class FundingServiceImpl implements IFundingService {
if (fundingActivityDto.getEndTime().isBefore(ChronoLocalDate.from(now))) { if (fundingActivityDto.getEndTime().isBefore(ChronoLocalDate.from(now))) {
return Result.failure("结束时间不能早于当前时间"); return Result.failure("结束时间不能早于当前时间");
} }
//查询状态
Integer status = fundingMapper.selectStatus();
Integer statuss = fundingActivityDto.getStatus();
if(statuss == 1){
if(status >= 1){
return Result.failure("当前有活动正在进行,新添加活动状态应为禁用");
}
}
Activity activity = ConvertBeanUtil.convert(fundingActivityDto, Activity.class); Activity activity = ConvertBeanUtil.convert(fundingActivityDto, Activity.class);
//获取当前时间 //获取当前时间
LocalDateTime creatTime = LocalDateTime.now(); LocalDateTime creatTime = LocalDateTime.now();
@ -99,7 +121,6 @@ public class FundingServiceImpl implements IFundingService {
fundingMapper.addDate(time,two, addTotal, activityId); fundingMapper.addDate(time,two, addTotal, activityId);
return Result.success("添加活动成功"); return Result.success("添加活动成功");
} }
@Override @Override
@ -138,14 +159,11 @@ public class FundingServiceImpl implements IFundingService {
//参与总人数 //参与总人数
Integer people_total = fundingMapper.searchPeopleTotal(activityId); Integer people_total = fundingMapper.searchPeopleTotal(activityId);
//根据活动id查询俩个市场,俩个市场是一条数据 //根据活动id查询俩个市场,俩个市场是一条数据
Map<String, Object> market = fundingMapper.getMarket(activityId); Map<String, Object> market = fundingMapper.getMarket(activityId);
//获取map //获取map
String marketOne = (String) market.get("market_one"); String marketOne = (String) market.get("market_one");
String marketTwo = (String) market.get("market_two"); String marketTwo = (String) market.get("market_two");
//参与市场一的人数 //参与市场一的人数
Integer markerOnePeople = fundingMapper.searchMarketPeople(activityId, marketOne); Integer markerOnePeople = fundingMapper.searchMarketPeople(activityId, marketOne);
//市场一的总的助力次数 //市场一的总的助力次数
@ -169,33 +187,32 @@ public class FundingServiceImpl implements IFundingService {
return market; return market;
} }
@Override
public Result<String> addRecord(FundingRecordDto fundingRecordDto) throws Exception {
String token = fundingRecordDto.getToken();
try {
// 1. 定义请求 URL
String url = "https://api.homilychart.com/hljw/api/v2/member/info";
// 准备请求参数
Map<String, String> params = new HashMap<>();
params.put("token", token); // 如果接口需要 token 作为参数
// 调用接口
String response = HttpUtils.postUrlencoded(url, params);
JsonNode rootNode = objectMapper.readTree(response);
// 提取 username
String username = rootNode.path("data").path("username").asText();
String jwcode = rootNode.path("data").path("jwcode").asText();
LocalDateTime joinTime = LocalDateTime.now();
String marketSign = fundingRecordDto.getMarketSign();
Integer activityId = fundingRecordDto.getActivityId();
//添加到数据库
fundingMapper.addRecord(activityId, username, jwcode, marketSign, joinTime);
} catch (Exception e) {
System.err.println("请求失败: " + e.getMessage());
}
return Result.success("助力成功");
}
// @Override
// public Result<String> addRecord(String token,FundingRecordDto fundingRecordDto) throws Exception {
// try {
// // 1. 定义请求 URL
// String url = "https://api.homilychart.com/hljw/api/v2/member/info";
//
// // 准备请求参数
// Map<String, String> params = new HashMap<>();
// params.put("token", token); // 如果接口需要 token 作为参数
// // 调用接口
// String response = HttpUtils.postUrlencoded(url, params);
// JsonNode rootNode = objectMapper.readTree(response);
// // 提取 username
// String username = rootNode.path("data").path("username").asText();
// String jwcode = rootNode.path("data").path("jwcode").asText();
// LocalDateTime joinTime = LocalDateTime.now();
// String marketSign = fundingRecordDto.getMarketSign();
// Integer activityId = fundingRecordDto.getActivityId();
// //添加到数据库
// fundingMapper.addRecord(activityId, username, jwcode, marketSign, joinTime);
// } catch (Exception e) {
// System.err.println("请求失败: " + e.getMessage());
// }
//
// return Result.success("助力成功");
// }
@Override @Override
public Result<String> setActivityTime(Integer activityId, Integer time) { public Result<String> setActivityTime(Integer activityId, Integer time) {
@ -241,6 +258,7 @@ public class FundingServiceImpl implements IFundingService {
Integer showOne = markerOneTotal + markerOneVirtual; Integer showOne = markerOneTotal + markerOneVirtual;
Integer showTwo = markerTwoTotal + markerTwoVirtual; Integer showTwo = markerTwoTotal + markerTwoVirtual;
Integer time = fundingMapper.getTime(activityId,marketOne); Integer time = fundingMapper.getTime(activityId,marketOne);
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
@ -253,5 +271,42 @@ public class FundingServiceImpl implements IFundingService {
result.put("marketTwoVirtual", markerTwoVirtual); result.put("marketTwoVirtual", markerTwoVirtual);
return result; return result;
} }
@Override
public List getMarketList() {
return fundingMapper.getMarketList();
}
//导出数据
@Override
public void exportActivityData(FundingUserDto fundingUserDto, HttpServletResponse response) throws IOException {
response.setContentType("application/json.openxmlfomats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setCharacterEncoding("utf-8");
//根据活动id查询活动名称
String activityName = fundingMapper.selectActivityName(fundingUserDto.getActivityId());
// 3. 处理中文文件名URL 编码
String fileName = activityName + ".xlsx";
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
// 4. 设置 Content-Disposition 响应头指定下载文件名
response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName);
// 查询数据列表
List<FundingExport> list = fundingMapper.selectByConditionExport(
fundingUserDto.getActivityId(),
fundingUserDto.getUsername(),
fundingUserDto.getJwcode(),
fundingUserDto.getMarketSign()
);
EasyExcel.write(response.getOutputStream(), FundingExport.class)
.excelType(ExcelTypeEnum.XLSX)
.sheet(activityName+"用户助力统计")
.doWrite(list);
}
} }

50
lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java

@ -0,0 +1,50 @@
package com.lottery.api.controller;
import com.lottery.admin.controller.FundingController;
import com.lottery.api.service.ApiIFundingService;
import com.lottery.dto.FundingRecordDto;
import com.lottery.result.Result;
import com.lottery.vo.ApiFundingVO;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @program: lottery-system
* @ClassName FundingController
* @description:
* @author:jihaipeng
* @create: 202507-16 11:00
* @Version 1.0
**/
@RestController
@RequestMapping("/api/funding")
public class ApiFundingController {
@Autowired
private ApiIFundingService fundingService;
private final static Logger LOGGER = LoggerFactory.getLogger(ApiFundingController.class);
//前台获取活动列表
@GetMapping("/getActivity")
public Result<ApiFundingVO> getFundingActivity(@RequestParam Integer activityId){
LOGGER.info("前台获取众筹活动所有数据");
return Result.success(fundingService.getActivityDetail(activityId));
}
//前台获取活动详情
@PostMapping("/getActivity1")
public Result<ApiFundingVO> getFundingActivity1(@RequestHeader String token){
LOGGER.info("前台获取众筹活动所有数据");
return fundingService.getActivityDetailOne(token);
}
//添加用户参与记录
@PostMapping("/addRecord")
public Result<String> addRecord(@RequestHeader String token,@RequestBody FundingRecordDto fundingRecordDto) throws Exception {
LOGGER.info("添加用户参与记录,参数为{}", fundingRecordDto);
return fundingService.addRecord(token,fundingRecordDto);
}
}

37
lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/ApiIFundingMapper.java

@ -0,0 +1,37 @@
package com.lottery.api.mapper;
import com.lottery.vo.ApiFundingTimeVo;
import org.apache.ibatis.annotations.Mapper;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Map;
/**
* @program: lottery-system
* @ClassName IFundingMapper
* @description:
* @author:jihaipeng
* @create: 202507-16 11:06
* @Version 1.0
**/
@Mapper
public interface ApiIFundingMapper {
Integer getTime(Integer activityId, String markerSign);
Integer searchVirtual(Integer activityId, String marketSign);
Integer searchMarketTotal(Integer activityId, String marketSign);
ApiFundingTimeVo getMarket(Integer activityId);
Integer selectStatus();
void addRecord(Integer activityId, String username, String jwcode, String marketSign, LocalDateTime joinTime);
LocalDate selectCount(String jwcode, String marketSign,Integer activityId);
Integer selectStatusCount();
}

24
lottery-system/lottery-service/src/main/java/com/lottery/api/service/ApiIFundingService.java

@ -0,0 +1,24 @@
package com.lottery.api.service;
import com.lottery.dto.FundingRecordDto;
import com.lottery.result.Result;
import com.lottery.vo.ApiFundingVO;
import javax.print.DocFlavor;
/**
* @program: lottery-system
* @ClassName IFundingService
* @description:
* @author:jihaipeng
* @create: 202507-16 11:06
* @Version 1.0
**/
public interface ApiIFundingService {
ApiFundingVO getActivityDetail(Integer activityId);
Result getActivityDetailOne(String token);
Result<String> addRecord(String token,FundingRecordDto fundingRecordDto);
}

224
lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java

@ -0,0 +1,224 @@
package com.lottery.api.service.Impl;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lottery.api.mapper.ApiIFundingMapper;
import com.lottery.api.service.ApiIFundingService;
import com.lottery.dto.FundingRecordDto;
import com.lottery.result.Result;
import com.lottery.utils.HttpUtils;
import com.lottery.vo.ApiFundingTimeVo;
import com.lottery.vo.ApiFundingVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
/**
* @program: lottery-system
* @ClassName FundingServiceIMpl
* @description:
* @author:jihaipeng
* @create: 202507-16 11:07
* @Version 1.0
**/
@Slf4j
@Service
public class ApiFundingServiceImpl implements ApiIFundingService {
@Autowired
private ApiIFundingMapper fundingMapper;
@Autowired
ObjectMapper objectMapper = new ObjectMapper();
//返回前台所有数据
@Override
public ApiFundingVO getActivityDetail(Integer activityId) {
//根据活动id查询活动时间市场一市场二设置的初始时间俩个市场总助力次数
//根据活动id查询俩个市场,俩个市场是一条数据
ApiFundingTimeVo data= fundingMapper.getMarket(activityId);
String marketOne = (String) data.getMarketOne();
String marketTwo = (String) data.getMarketTwo();
LocalDate startTime = (LocalDate) data.getStartTime();
LocalDate endTime = (LocalDate) data.getEndTime();
//市场一的总的助力次数
Integer markerOneTotal = fundingMapper.searchMarketTotal(activityId, marketOne);
if (markerOneTotal == null) {
markerOneTotal = 0; // 默认值
}
//市场一的虚拟次数
Integer markerOneVirtual = fundingMapper.searchVirtual(activityId, marketOne);
if (markerOneVirtual == null) {
markerOneVirtual = 0; // 默认值
}
//市场二的总的助力次数
Integer markerTwoTotal = fundingMapper.searchMarketTotal(activityId, marketTwo);
if (markerTwoTotal == null) {
markerTwoTotal = 0; // 默认值
}
//市场二的虚拟次数
Integer markerTwoVirtual = fundingMapper.searchVirtual(activityId, marketTwo);
if (markerTwoVirtual == null) {
markerTwoVirtual = 0; // 默认值
}
//获取的设置时间
Integer time = fundingMapper.getTime(activityId,marketOne);
Integer oneShow = markerOneTotal + markerOneVirtual;
Integer twoShow = markerTwoTotal + markerTwoVirtual;
ApiFundingVO apiFundingVO = new ApiFundingVO();
apiFundingVO.setMarketOne(marketOne);
apiFundingVO.setMarketTwo(marketTwo);
apiFundingVO.setMarketOneCount(oneShow);
apiFundingVO.setMarketTwoCount(twoShow);
apiFundingVO.setTotalcount(time);
apiFundingVO.setStartTime(startTime);
apiFundingVO.setEndTime(endTime);
return apiFundingVO;
}
@Override
public Result getActivityDetailOne(String token) {
//根据活动id查询活动时间市场一市场二设置的初始时间俩个市场总助力次数
//先查询一下有几个活动开启
Integer count = fundingMapper.selectStatusCount();
if (count == null || count < 0 || count > 1) {
// 根据业务逻辑这里可以分别处理count为null小于0和大于1的情况
// 但为了简化示例我们统一返回一个失败结果
return Result.failure("活动数量不符合要求,请检查并关闭多余的活动");
}
Integer activityId = fundingMapper.selectStatus();
//根据活动id查询俩个市场,俩个市场是一条数据
ApiFundingTimeVo data= fundingMapper.getMarket(activityId);
String marketOne = (String) data.getMarketOne();
String marketTwo = (String) data.getMarketTwo();
LocalDate startTime = (LocalDate) data.getStartTime();
LocalDate endTime = (LocalDate) data.getEndTime();
String username = "";
String jwcode = "";
try {
// 1. 定义请求 URL
String url = "https://api.homilychart.com/hljw/api/v2/member/info";
// 准备请求参数
Map<String, String> params = new HashMap<>();
params.put("token", token); // 如果接口需要 token 作为参数
// 调用接口
String response = HttpUtils.postUrlencoded(url, params);
JsonNode rootNode = objectMapper.readTree(response);
// 提取 username
username = rootNode.path("data").path("username").asText();
jwcode = rootNode.path("data").path("jwcode").asText();
LocalDateTime joinTime = LocalDateTime.now();
} catch (Exception e) {
System.err.println("请求失败: " + e.getMessage());
}
LocalDate now = LocalDate.now();
String markeroneadd = "点击助力";
String marketTwoadd = "点击助力";
//通过精网号+市场名查询该用户是否助力过
LocalDate count1 = fundingMapper.selectCount(jwcode,marketOne,activityId);
if(count1!=null && count1.equals(now))
markeroneadd = "已助力";
LocalDate count2 = fundingMapper.selectCount(jwcode,marketTwo,activityId);
if(count2!=null && count2.equals(now))
marketTwoadd = "已助力";
//市场一的总的助力次数
Integer markerOneTotal = fundingMapper.searchMarketTotal(activityId, marketOne);
if (markerOneTotal == null) {
markerOneTotal = 0; // 默认值
}
//市场一的虚拟次数
Integer markerOneVirtual = fundingMapper.searchVirtual(activityId, marketOne);
if (markerOneVirtual == null) {
markerOneVirtual = 0; // 默认值
}
//市场二的总的助力次数
Integer markerTwoTotal = fundingMapper.searchMarketTotal(activityId, marketTwo);
if (markerTwoTotal == null) {
markerTwoTotal = 0; // 默认值
}
//市场二的虚拟次数
Integer markerTwoVirtual = fundingMapper.searchVirtual(activityId, marketTwo);
if (markerTwoVirtual == null) {
markerTwoVirtual = 0; // 默认值
}
//获取的设置时间
Integer time = fundingMapper.getTime(activityId,marketOne);
Integer oneShow = markerOneTotal + markerOneVirtual;
Integer twoShow = markerTwoTotal + markerTwoVirtual;
ApiFundingVO apiFundingVO = new ApiFundingVO();
apiFundingVO.setMarketOne(marketOne);
apiFundingVO.setMarketTwo(marketTwo);
apiFundingVO.setMarketOneCount(oneShow);
apiFundingVO.setMarketTwoCount(twoShow);
apiFundingVO.setTotalcount(time);
apiFundingVO.setStartTime(startTime);
apiFundingVO.setEndTime(endTime);
apiFundingVO.setMarketAddOne(markeroneadd);
apiFundingVO.setMarketTwo(marketTwoadd);
return Result.success(apiFundingVO);
}
@Override
public Result<String> addRecord(String token,FundingRecordDto fundingRecordDto) {
try {
// 1. 定义请求 URL
String url = "https://api.homilychart.com/hljw/api/v2/member/info";
// 准备请求参数
Map<String, String> params = new HashMap<>();
params.put("token", token); // 如果接口需要 token 作为参数
// 调用接口
String response = HttpUtils.postUrlencoded(url, params);
JsonNode rootNode = objectMapper.readTree(response);
// 提取 username
String username = rootNode.path("data").path("username").asText();
String jwcode = rootNode.path("data").path("jwcode").asText();
LocalDateTime joinTime = LocalDateTime.now();
String marketSign = fundingRecordDto.getMarketSign();
Integer activityId = fundingRecordDto.getActivityId();
//添加到数据库
fundingMapper.addRecord(activityId, username, jwcode, marketSign, joinTime);
} catch (Exception e) {
System.err.println("请求失败: " + e.getMessage());
}
return Result.success("助力成功");
}
}

9
lottery-system/lottery-service/src/main/resources/application.yml

@ -1,6 +1,6 @@
server: server:
port: 12699 # 服务端口 port: 12699 # 服务端口
forward-headers-strategy: native # 全局生效
spring: spring:
# ========== 数据源配置 (MySQL) ========== # ========== 数据源配置 (MySQL) ==========
datasource: datasource:
@ -43,6 +43,13 @@ mybatis:
map-underscore-to-camel-case: true # 开启驼峰命名转换 map-underscore-to-camel-case: true # 开启驼峰命名转换
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志
logging:
config: classpath:logback-spring.xml
level:
root: INFO
org.springframework: WARN
com.link: INFO
# ========== 自定义配置(示例) ========== # ========== 自定义配置(示例) ==========
lottery: lottery:
jwt: jwt:

36
lottery-system/lottery-service/src/main/resources/logback-spring.xml

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义日志输出模式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 通用日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/spring-boot-application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 设置日志文件的命名模式 -->
<fileNamePattern>logs/spring-boot-application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>14</maxHistory> <!-- 保留14天的日志文件 -->
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 根日志配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>

8
lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lottery.admin.mapper.AdminGradeMapper">
<select id="selectByName" resultType="com.lottery.entity.Grade">
select * from grade where grade_name = #{gradeName}
</select>
</mapper>

108
lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml

@ -16,26 +16,26 @@
#{status}, #{status},
#{startTime}, #{startTime},
#{endTime}, #{endTime},
#{createdTime},
#{createdTime},
#{updatedTime}) #{updatedTime})
</insert> </insert>
<insert id="addRecord">
INSERT INTO z_user (activity_id,
username,
jwcode,
market_sign,
join_time)
VALUES (#{activityId},
#{username},
#{jwcode},
#{marketSign},
#{joinTime})
</insert>
<!-- <insert id="addRecord">-->
<!-- INSERT INTO z_user (activity_id,-->
<!-- username,-->
<!-- jwcode,-->
<!-- market_sign,-->
<!-- join_time)-->
<!-- VALUES (#{activityId},-->
<!-- #{username},-->
<!-- #{jwcode},-->
<!-- #{marketSign},-->
<!-- #{joinTime})-->
<!-- </insert>-->
<insert id="addDate"> <insert id="addDate">
INSERT INTO data (time, INSERT INTO data (time,
stock,
add_total,
activity_id)
stock,
add_total,
activity_id)
VALUES (#{time}, VALUES (#{time},
#{stock}, #{stock},
#{addTotal}, #{addTotal},
@ -72,7 +72,7 @@
ELSE '禁用' ELSE '禁用'
END END
FROM activity FROM activity
ORDER BY created_time DESC
ORDER BY created_time DESC
</select> </select>
<select id="searchcount" resultType="java.lang.Integer"> <select id="searchcount" resultType="java.lang.Integer">
SELECT SELECT
@ -110,19 +110,15 @@
LIMIT #{pagesize} OFFSET #{offset} LIMIT #{pagesize} OFFSET #{offset}
</select> </select>
<select id="searchPeopleTotal" resultType="java.lang.Integer" parameterType="java.lang.Integer"> <select id="searchPeopleTotal" resultType="java.lang.Integer" parameterType="java.lang.Integer">
SELECT
COUNT(DISTINCT jwcode)
SELECT COUNT(DISTINCT jwcode)
FROM z_user FROM z_user
WHERE
activity_id = #{activityId}
WHERE activity_id = #{activityId}
</select> </select>
<select id="getMarket" resultType="java.util.Map" parameterType="java.lang.Integer"> <select id="getMarket" resultType="java.util.Map" parameterType="java.lang.Integer">
SELECT
market_one,market_two
FROM
activity
WHERE
id = #{activityId}
SELECT market_one,
market_two
FROM activity
WHERE id = #{activityId}
</select> </select>
<select id="searchMarketPeople" resultType="java.lang.Integer"> <select id="searchMarketPeople" resultType="java.lang.Integer">
SELECT COUNT(DISTINCT jwcode) SELECT COUNT(DISTINCT jwcode)
@ -130,22 +126,13 @@
WHERE market_sign = #{marketSign} WHERE market_sign = #{marketSign}
AND activity_id = #{activityId} AND activity_id = #{activityId}
</select> </select>
<select id="searchMarketTotal" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM z_user
WHERE market_sign = #{marketSign}
AND activity_id = #{activityId}
</select>
<select id="searchVirtual" resultType="java.lang.Integer"> <select id="searchVirtual" resultType="java.lang.Integer">
SELECT
add_total
FROM
data
WHERE
activity_id = #{activityId}
SELECT add_total
FROM data
WHERE activity_id = #{activityId}
and stock = #{stock} and stock = #{stock}
</select> </select>
<select id="getTime" resultType="java.lang.Integer"> <select id="getTime" resultType="java.lang.Integer">
SELECT SELECT
time time
@ -155,5 +142,46 @@
activity_id = #{activityId} activity_id = #{activityId}
and stock = #{stock} and stock = #{stock}
</select> </select>
<select id="getMarketList" resultType="string">
SELECT text
FROM market
</select>
<select id="selectStatus" resultType="java.lang.Integer">
SELECT count(*)
FROM activity
WHERE status = 1
</select>
<select id="searchMarketTotal" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM z_user
WHERE market_sign = #{marketSign}
AND activity_id = #{activityId}
</select>
<select id="selectActivityName" resultType="java.lang.String">
SELECT activity_name
FROM activity
WHERE id = #{activityId}
</select>
<select id="selectByConditionExport" resultType="com.lottery.entity.FundingExport">
SELECT
username, jwcode, market_sign, join_time
FROM
z_user
WHERE
activity_id = #{activityId}
<if test="username != null and username != ''">
AND username LIKE CONCAT('%', #{username}, '%')
</if>
<if test="jwcode != null and jwcode != ''">
AND jwcode = #{jwcode}
</if>
<if test="marketSign != null and marketSign != ''">
AND market_sign = #{marketSign}
</if>
ORDER BY join_time DESC
</select>
</mapper> </mapper>

80
lottery-system/lottery-service/src/main/resources/mapper/api/ApiIFundingService.xml

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lottery.api.mapper.ApiIFundingMapper">
<insert id="addRecord">
INSERT INTO z_user (activity_id,
username,
jwcode,
market_sign,
join_time)
VALUES (#{activityId},
#{username},
#{jwcode},
#{marketSign},
#{joinTime})
</insert>
<select id="getTime" resultType="java.lang.Integer">
SELECT
time
FROM
data
WHERE
activity_id = #{activityId}
and stock = #{markerSign}
</select>
<select id="searchMarketTotal" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM z_user
WHERE market_sign = #{marketSign}
AND activity_id = #{activityId}
</select>
<select id="searchVirtual" resultType="java.lang.Integer">
SELECT
add_total
FROM
data
WHERE
activity_id = #{activityId}
and stock = #{marketSign}
</select>
<select id="getMarket" resultType="com.lottery.vo.ApiFundingTimeVo" parameterType="java.lang.Integer">
SELECT
market_one,
market_two,
start_time,
end_time
FROM
activity
WHERE
id = #{activityId}
</select>
<select id="selectStatus" resultType="java.lang.Integer">
SELECT
id
FROM
activity
WHERE
status = 1
</select>
<select id="selectCount" resultType="java.time.LocalDate">
SELECT join_time
FROM z_user
WHERE activity_id = #{activityId}
and market_sign = #{marketSign}
and jwcode = #{jwcode}
order by join_time desc
LIMIT 1
</select>
<select id="selectStatusCount" resultType="java.lang.Integer">
SELECT
count(*)
FROM
activity
WHERE
status = 1
</select>
</mapper>
Loading…
Cancel
Save