diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingRecordDto.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingRecordDto.java index 0a36b76..909c0c6 100644 --- a/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingRecordDto.java +++ b/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingRecordDto.java @@ -13,8 +13,6 @@ import lombok.Data; @Data public class FundingRecordDto { - private String token; - private Integer activityId; private String marketSign; diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingExport.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingExport.java new file mode 100644 index 0000000..b2fa3b7 --- /dev/null +++ b/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: 2025−07-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; + } +} diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Market.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Market.java new file mode 100644 index 0000000..108b21f --- /dev/null +++ b/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: 2025−07-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; +} diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingTimeVo.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingTimeVo.java new file mode 100644 index 0000000..6cb6483 --- /dev/null +++ b/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: 2025−07-16 13:49 + * @Version 1.0 + **/ +@Data +public class ApiFundingTimeVo { + private String marketOne; + private String marketTwo; + private LocalDate startTime; + private LocalDate endTime; +} diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingVO.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingVO.java new file mode 100644 index 0000000..3591c60 --- /dev/null +++ b/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: 2025−07-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; +} diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/ExportController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/ExportController.java new file mode 100644 index 0000000..692b8bc --- /dev/null +++ b/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: 2025−07-17 14:36 + * @Version 1.0 + **/ + +public class ExportController { + +} diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java index 14d59b9..fbf15f9 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java +++ b/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.result.Result; 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.boot.autoconfigure.info.ProjectInfoAutoConfiguration; import org.springframework.validation.annotation.Validated; 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.Map; @@ -25,26 +30,33 @@ import java.util.Map; * @Version 1.0 **/ @RestController -@RequestMapping("/funding") +@RequestMapping("/admin/funding") public class FundingController { @Autowired private IFundingService fundingService; + private final static Logger LOGGER = LoggerFactory.getLogger(FundingController.class); + @Autowired + private ProjectInfoAutoConfiguration projectInfoAutoConfiguration; + /** * 获取所有众筹活动 + * * @return */ @GetMapping("/getActivity") - public Result> getFundingActivity(){ - List list = fundingService.getFundingActivity(); - return Result.success(list); + public Result> getFundingActivity() { + LOGGER.info("获取所有众筹活动"); + List list = fundingService.getFundingActivity(); + return Result.success(list); } //修改众筹的活动状态 @PostMapping("/updateActivityStatus") - public Result 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) { return Result.failure("参数不能为空"); @@ -56,8 +68,7 @@ public class FundingController { return Result.failure("活动状态值非法"); } try { - fundingService.updateActivityStatus(id, status); - return Result.success("修改活动状态成功"); + return fundingService.updateActivityStatus(id, status); } catch (Exception e) { return Result.failure("修改活动状态失败"); } @@ -67,8 +78,10 @@ public class FundingController { //添加活动 @PostMapping("/addActivity") public Result addActivity(@Validated @RequestBody FundingActivityDto fundingActivityDto) { + LOGGER.info("添加活动,参数为{}", fundingActivityDto); try { return fundingService.addActivity(fundingActivityDto); + } catch (Exception e) { return Result.failure("添加活动失败"); } @@ -76,45 +89,63 @@ public class FundingController { //根据活动id查询助力详情 @PostMapping("/getActivityDetail") - public Map getActivityDetail(@RequestBody FundingUserDto fundingUserDto) { + public Result> getActivityDetail(@RequestBody FundingUserDto fundingUserDto) { + LOGGER.info("接口getActivityDetail查询助力详情,查询条件{}", fundingUserDto); // 必填参数校验(可选,但推荐) if (fundingUserDto.getActivityId() == null) { throw new IllegalArgumentException("activityId 不能为空"); } - return fundingService.getActivityDetail(fundingUserDto); + return Result.success(fundingService.getActivityDetail(fundingUserDto)); } // //根据活动id查询数据统计 @PostMapping("/getActivityDate") - public Map getActivityDate(@RequestParam Integer activityId ) { - return fundingService.getActivityDate(activityId); + public Result> getActivityDate(@RequestParam Integer activityId) { + LOGGER.info("接口getActivityDate查询后台数据统计,活动id为{}", activityId); + return Result.success(fundingService.getActivityDate(activityId)); } - //添加用户参与记录 - @PostMapping("/addRecord") - public Result addRecord(@RequestBody FundingRecordDto fundingRecordDto) throws Exception { - return fundingService.addRecord(fundingRecordDto); - } +// //添加用户参与记录 +// @PostMapping("/addRecord") +// public Result addRecord(@RequestBody FundingRecordDto fundingRecordDto) throws Exception { +// return fundingService.addRecord(fundingRecordDto); +// } //设置活动初始活动 @PostMapping("/setActivityTime") public Result setActivityTime(@RequestParam Integer activityId, @RequestParam Integer time) { + LOGGER.info("设置id={}的活动初始时间为{}", activityId, time); return fundingService.setActivityTime(activityId, time); } //添加虚拟次数 @PostMapping("/addDateVirtual") public Result addVirtual(@RequestParam Integer activityId, @RequestParam String stock, @RequestParam Integer addTotal) { + LOGGER.info("添加虚拟次数,id={},stock={},addTotal={}", activityId, stock, addTotal); return fundingService.addVirtual(activityId, stock, addTotal); } //返回数据详情 @PostMapping("/getDate") - public Result > getDate(@RequestParam Integer activityId) { + public Result> getDate(@RequestParam Integer activityId) { + LOGGER.info("返回id={}的活动的设置数据详情", activityId); return Result.success(fundingService.getDate(activityId)); } + //获取市场股票列表 + @GetMapping("/getMarketList") + public Result 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); + } } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java index 70b6a45..5c10cff 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java @@ -1,6 +1,7 @@ package com.lottery.admin.mapper; import com.lottery.entity.Activity; +import com.lottery.entity.FundingExport; import com.lottery.vo.FundingActivityVo; import com.lottery.vo.FundingUserVo; import org.apache.ibatis.annotations.Mapper; @@ -42,7 +43,7 @@ public interface IFundingMapper { 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); @@ -53,4 +54,12 @@ public interface IFundingMapper { Integer searchVirtual(Integer activityId, String stock); Integer getTime(Integer activityId, String stock); + + List getMarketList(); + + Integer selectStatus(); + + String selectActivityName(Integer activityId); + + List selectByConditionExport(Integer activityId, String username, String jwcode, String marketSign); } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/IFundingService.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/IFundingService.java index 6532dc3..be4a0c3 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/IFundingService.java +++ b/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.FundingUserVo; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -24,7 +26,7 @@ public interface IFundingService { List getFundingActivity(); - void updateActivityStatus(Integer id, Integer status); + Result updateActivityStatus(Integer id, Integer status); Result addActivity(FundingActivityDto fundingActivityDto); @@ -32,11 +34,16 @@ public interface IFundingService { Map getActivityDate(Integer activityId); - Result addRecord(FundingRecordDto fundingRecordDto) throws Exception; +// Result addRecord(FundingRecordDto fundingRecordDto) throws Exception; Result setActivityTime(Integer activityId, Integer time); Result addVirtual(Integer activityId, String stock, Integer addTotal); Map getDate(Integer activityId); + + List getMarketList(); + + void exportActivityData(FundingUserDto fundingUserDto, HttpServletResponse response) throws IOException; + } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java index de1d007..3590078 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java @@ -1,5 +1,7 @@ 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.ObjectMapper; import com.lottery.dto.FundingActivityDto; @@ -8,6 +10,7 @@ import com.lottery.dto.FundingUserDto; import com.lottery.entity.Activity; import com.lottery.admin.mapper.IFundingMapper; import com.lottery.admin.service.IFundingService; +import com.lottery.entity.FundingExport; import com.lottery.result.Result; import com.lottery.utils.ConvertBeanUtil; import com.lottery.utils.HttpUtils; @@ -17,6 +20,9 @@ import com.lottery.vo.FundingUserVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.time.LocalDate; import java.time.LocalDateTime; @@ -51,9 +57,16 @@ public class FundingServiceImpl implements IFundingService { //修改众筹的活动状态 @Override - public void updateActivityStatus(Integer id, Integer status) { + public Result updateActivityStatus(Integer id, Integer status) { + if(status == 1){ + //查询状态 + Integer statuss = fundingMapper.selectStatus(); + if(statuss >= 1){ + return Result.failure("当前有活动正在启用,修改状态失败"); + } + } fundingMapper.updateActivityStatus(id, status); - + return Result.success("修改状态成功"); } //添加众筹活动 @@ -82,6 +95,15 @@ public class FundingServiceImpl implements IFundingService { if (fundingActivityDto.getEndTime().isBefore(ChronoLocalDate.from(now))) { 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); //获取当前时间 LocalDateTime creatTime = LocalDateTime.now(); @@ -99,7 +121,6 @@ public class FundingServiceImpl implements IFundingService { fundingMapper.addDate(time,two, addTotal, activityId); return Result.success("添加活动成功"); - } @Override @@ -138,14 +159,11 @@ public class FundingServiceImpl implements IFundingService { //参与总人数 Integer people_total = fundingMapper.searchPeopleTotal(activityId); - //根据活动id查询俩个市场,俩个市场是一条数据 Map market = fundingMapper.getMarket(activityId); //获取map String marketOne = (String) market.get("market_one"); - String marketTwo = (String) market.get("market_two"); - //参与市场一的人数 Integer markerOnePeople = fundingMapper.searchMarketPeople(activityId, marketOne); //市场一的总的助力次数 @@ -169,33 +187,32 @@ public class FundingServiceImpl implements IFundingService { return market; } - @Override - public Result addRecord(FundingRecordDto fundingRecordDto) throws Exception { - String token = fundingRecordDto.getToken(); - try { - // 1. 定义请求 URL - String url = "https://api.homilychart.com/hljw/api/v2/member/info"; - - // 准备请求参数 - Map 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 addRecord(String token,FundingRecordDto fundingRecordDto) throws Exception { +// try { +// // 1. 定义请求 URL +// String url = "https://api.homilychart.com/hljw/api/v2/member/info"; +// +// // 准备请求参数 +// Map 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 setActivityTime(Integer activityId, Integer time) { @@ -241,6 +258,7 @@ public class FundingServiceImpl implements IFundingService { Integer showOne = markerOneTotal + markerOneVirtual; Integer showTwo = markerTwoTotal + markerTwoVirtual; + Integer time = fundingMapper.getTime(activityId,marketOne); Map result = new HashMap<>(); @@ -253,5 +271,42 @@ public class FundingServiceImpl implements IFundingService { result.put("marketTwoVirtual", markerTwoVirtual); 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 list = fundingMapper.selectByConditionExport( + fundingUserDto.getActivityId(), + fundingUserDto.getUsername(), + fundingUserDto.getJwcode(), + fundingUserDto.getMarketSign() + ); + + EasyExcel.write(response.getOutputStream(), FundingExport.class) + .excelType(ExcelTypeEnum.XLSX) + .sheet(activityName+"用户助力统计") + .doWrite(list); + } } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java new file mode 100644 index 0000000..f1a4aa7 --- /dev/null +++ b/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: 2025−07-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 getFundingActivity(@RequestParam Integer activityId){ + LOGGER.info("前台获取众筹活动所有数据"); + return Result.success(fundingService.getActivityDetail(activityId)); + } + + //前台获取活动详情 + @PostMapping("/getActivity1") + public Result getFundingActivity1(@RequestHeader String token){ + LOGGER.info("前台获取众筹活动所有数据"); + return fundingService.getActivityDetailOne(token); + } + + //添加用户参与记录 + @PostMapping("/addRecord") + public Result addRecord(@RequestHeader String token,@RequestBody FundingRecordDto fundingRecordDto) throws Exception { + LOGGER.info("添加用户参与记录,参数为{}", fundingRecordDto); + return fundingService.addRecord(token,fundingRecordDto); + } +} diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/ApiIFundingMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/ApiIFundingMapper.java new file mode 100644 index 0000000..a425e3b --- /dev/null +++ b/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: 2025−07-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(); +} diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/ApiIFundingService.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/ApiIFundingService.java new file mode 100644 index 0000000..f499126 --- /dev/null +++ b/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: 2025−07-16 11:06 + * @Version 1.0 + **/ + +public interface ApiIFundingService { + ApiFundingVO getActivityDetail(Integer activityId); + + Result getActivityDetailOne(String token); + + Result addRecord(String token,FundingRecordDto fundingRecordDto); +} diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java new file mode 100644 index 0000000..291caa8 --- /dev/null +++ b/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: 2025−07-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 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 addRecord(String token,FundingRecordDto fundingRecordDto) { + + try { + // 1. 定义请求 URL + String url = "https://api.homilychart.com/hljw/api/v2/member/info"; + + // 准备请求参数 + Map 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("助力成功"); + } + +} diff --git a/lottery-system/lottery-service/src/main/resources/application.yml b/lottery-system/lottery-service/src/main/resources/application.yml index 88afb74..0390cd6 100644 --- a/lottery-system/lottery-service/src/main/resources/application.yml +++ b/lottery-system/lottery-service/src/main/resources/application.yml @@ -1,6 +1,6 @@ server: port: 12699 # 服务端口 - + forward-headers-strategy: native # 全局生效 spring: # ========== 数据源配置 (MySQL) ========== datasource: @@ -43,6 +43,13 @@ mybatis: map-underscore-to-camel-case: true # 开启驼峰命名转换 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: jwt: diff --git a/lottery-system/lottery-service/src/main/resources/logback-spring.xml b/lottery-system/lottery-service/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..0d99b3c --- /dev/null +++ b/lottery-system/lottery-service/src/main/resources/logback-spring.xml @@ -0,0 +1,36 @@ + + + + + + + + + + ${LOG_PATTERN} + + + + + + logs/spring-boot-application.log + + + logs/spring-boot-application.%d{yyyy-MM-dd}.log + 14 + + + 10MB + + + ${LOG_PATTERN} + + + + + + + + + + diff --git a/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml b/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml deleted file mode 100644 index 3046f29..0000000 --- a/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml b/lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml index 46e74a0..3728664 100644 --- a/lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml +++ b/lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml @@ -16,26 +16,26 @@ #{status}, #{startTime}, #{endTime}, - #{createdTime}, + #{createdTime}, #{updatedTime}) - - INSERT INTO z_user (activity_id, - username, - jwcode, - market_sign, - join_time) - VALUES (#{activityId}, - #{username}, - #{jwcode}, - #{marketSign}, - #{joinTime}) - + + + + + + + + + + + + INSERT INTO data (time, - stock, - add_total, - activity_id) + stock, + add_total, + activity_id) VALUES (#{time}, #{stock}, #{addTotal}, @@ -72,7 +72,7 @@ ELSE '禁用' END FROM activity - ORDER BY created_time DESC + ORDER BY created_time DESC - + - + + + + + + + + \ No newline at end of file diff --git a/lottery-system/lottery-service/src/main/resources/mapper/api/ApiIFundingService.xml b/lottery-system/lottery-service/src/main/resources/mapper/api/ApiIFundingService.xml new file mode 100644 index 0000000..f20b54a --- /dev/null +++ b/lottery-system/lottery-service/src/main/resources/mapper/api/ApiIFundingService.xml @@ -0,0 +1,80 @@ + + + + + INSERT INTO z_user (activity_id, + username, + jwcode, + market_sign, + join_time) + VALUES (#{activityId}, + #{username}, + #{jwcode}, + #{marketSign}, + #{joinTime}) + + + + + + + + + + + + + \ No newline at end of file