ruoyi-api/ruoyi-api-chargingPile/src/main/resources/template/充电桩申请记录.xlsxBinary files differ
ruoyi-api/ruoyi-api-order/pom.xml
@@ -28,6 +28,10 @@ </exclusion> </exclusions> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-other</artifactId> </dependency> </dependencies> ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
@@ -1,13 +1,10 @@ package com.ruoyi.order.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TExchangeOrder; import com.ruoyi.order.api.query.TActivityStatisticsQuery; import com.ruoyi.order.api.vo.TActivityVO; import com.ruoyi.order.api.vo.ExchangeDto; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -43,7 +40,7 @@ } @Override public R<Long> getExchangeById(Integer goodsIds, Long userId) { public R<Long> getExchangeById(Integer goodsIds, Long userId,Integer goodType) { return R.fail("根据订单数" + cause.getMessage()); } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
@@ -2,14 +2,11 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.order.api.factory.OrderFallbackFactory; import com.ruoyi.order.api.model.TExchangeOrder; import com.ruoyi.order.api.vo.ExchangeDto; import com.ruoyi.order.api.query.TActivityStatisticsQuery; import com.ruoyi.order.api.vo.TActivityVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -35,7 +32,8 @@ public R<List<String>> getCodeByOrderId(String goodsIds); //查询已兑换的订单数 @PostMapping("/t-exchange-order/getById") public R<Long> getExchangeById(@RequestParam("goodId") Integer goodId,@RequestParam("userId") Long userId); public R<Long> getExchangeById(@RequestParam("goodId") Integer goodId,@RequestParam("userId") Long userId,@RequestParam("goodType") Integer goodType); @PostMapping("/t-exchange-order/create") public R<Long> exchangeCreate(@RequestBody ExchangeDto exchangeDto); ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ExchangeDto.java
File was deleted ruoyi-api/ruoyi-api-other/pom.xml
@@ -28,6 +28,10 @@ </exclusion> </exclusions> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-account</artifactId> </dependency> </dependencies> </project> ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TGoods.java
@@ -103,5 +103,8 @@ @ApiModelProperty(value = "销量") @TableField(exist = false) private Integer salesCount; @ApiModelProperty(value = "1商品2优惠卷") @TableField(exist = false) private Integer goodType; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/ExchangeDto.java
@@ -1,4 +1,4 @@ package com.ruoyi.other.api.dto; package com.ruoyi.common.core.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -14,5 +14,10 @@ @ApiModelProperty(hidden = true) Long userId; @ApiModelProperty("1商品2优惠卷") Integer goodType; @ApiModelProperty(hidden = true) Integer point; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/UserSiteFallbackFactory.java
@@ -36,7 +36,7 @@ @Override public R delUserSite(Long userId) { return R.fail("删除用户站点失败:" + throwable.getMessage()); throw new RuntimeException("删除用户站点失败:" + throwable.getMessage()); } }; } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/OrderCodeUtil.java
New file @@ -0,0 +1,26 @@ package com.ruoyi.common.core.utils; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Random; public class OrderCodeUtil { public static String getOrderCode(String code){ LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); String formattedDate = now.format(formatter); // 四位随机数 Random random = new Random(); int randomNumber = random.nextInt(9999); // 生成0-9998之间的随机数 String formattedRandomNumber = String.format("%04d", randomNumber); // 补齐到4位 // 拼接日期和随机数 return code+formattedDate + formattedRandomNumber; } public static void main(String[] args) { // 测试方法 System.out.println(getOrderCode("DH")); } } ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
@@ -114,4 +114,11 @@ BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); return passwordEncoder.matches(rawPassword, encodedPassword); } public static void main(String[] args) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String encode = passwordEncoder.encode("49a15811ea47e8e9c6d8f3ef4d7bbc54"); System.err.println(encode); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/ShopUserStart.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.system.query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author zhibing.pu * @date 2024/8/21 20:24 */ @Data @ApiModel public class ShopUserStart { @ApiModelProperty("用户id") private Long userId; @ApiModelProperty("注释") private String remark; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -1,6 +1,7 @@ package com.ruoyi.account.controller; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.account.api.dto.CouponListDto; import com.ruoyi.account.api.dto.GrantCouponDto; @@ -35,6 +36,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -54,6 +56,8 @@ public class TAppCouponController { @Autowired private TAppCouponService tAppCouponService; @Resource private OtherClient otherClient; @Autowired private TAppUserCarService appUserCarService; @@ -63,11 +67,11 @@ private ChargingPileClient chargingPileClient; @Autowired private ChargingOrderClient chargingOrderClient; @Resource private ChargingGunClient chargingGunClient; /** * 小程序扫一扫 添加车辆 * @param dto ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java
@@ -57,9 +57,9 @@ String openid = body.getOpenid(); String sessionKey = body.getSessionKey(); // 用户信息解密 数据验签 if (StringUtils.isNotBlank(data.getSignature())) { WxUtils.verifySignature(data.getRawData(), sessionKey, data.getSignature()); } // if (StringUtils.isNotBlank(data.getSignature())) { // WxUtils.verifySignature(data.getRawData(), sessionKey, data.getSignature()); // } AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey, data.getIv()); appletUserDecodeData.setOpenId(openid); return AjaxResult.ok(appUserService.wxLogin(appletUserDecodeData)); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/PointDetailUtil.java
@@ -3,6 +3,7 @@ import com.ruoyi.account.api.model.TAppUserIntegralChange; import com.ruoyi.account.service.TAppUserIntegralChangeService; import com.ruoyi.common.core.utils.OrderCodeUtil; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -14,7 +15,7 @@ public void addDetail(Integer old,Integer now,Integer type,Long userId,String extension,String code){ TAppUserIntegralChange tAppUserIntegralChange= new TAppUserIntegralChange(); tAppUserIntegralChange.setCode(code); tAppUserIntegralChange.setCode(OrderCodeUtil.getOrderCode("DH")); tAppUserIntegralChange.setAppUserId(userId); tAppUserIntegralChange.setChangeType(type); tAppUserIntegralChange.setHistoricalIntegral(old); ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TAppCouponMapper.xml
@@ -43,13 +43,13 @@ AND t2.phone LIKE concat('%',#{req.phone}, '%') </if> <if test="req.status != null and req.status = 1"> AND t1.status =1 and t1.endTime >= now() AND t1.status =1 and t1.end_time >= now() </if> <if test="req.status != null and req.status = 2"> AND t1.status =2 </if> <if test="req.status != null and req.status = 3"> AND t1.status =1 and t1.endTime <= now() and t1.del_flag = 0 AND t1.status =1 and t1.end_time <= now() and t1.del_flag = 0 </if> <if test="req.status != null and req.status = 4"> AND t1.del_flag = 0 ruoyi-service/ruoyi-chargingPile/pom.xml
@@ -15,6 +15,7 @@ </description> <dependencies> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-account</artifactId> ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -1,11 +1,16 @@ package com.ruoyi.chargingPile.controller; import com.alibaba.excel.EasyExcelFactory; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.metadata.WriteSheet; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.chargingPile.api.dto.ApplyChargingQuery; import com.ruoyi.chargingPile.api.dto.ApplyChargingRemarkDto; import com.ruoyi.chargingPile.api.model.TApplyChargingPile; import com.ruoyi.chargingPile.service.TApplyChargingPileService; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.log.annotation.Log; @@ -13,8 +18,16 @@ import com.ruoyi.common.log.enums.OperatorType; import com.ruoyi.common.security.service.TokenService; import io.swagger.annotations.ApiOperation; import org.apache.commons.codec.CharEncoding; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.List; /** * <p> @@ -69,9 +82,35 @@ @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "导出") @PostMapping(value = "/export") public R export() { return R.ok(); @PutMapping(value = "/export") public R export(HttpServletResponse response) { try { response.setCharacterEncoding(Constants.UTF8); response.setContentType("application/vnd.ms-excel"); response.setHeader("Access-Control-Expose-Headers", "Content-disposition"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("申请建桩数据", CharEncoding.UTF_8) + ".xlsx"); } catch (UnsupportedEncodingException e) { return R.fail("excel导出失败!"); } try { List<TApplyChargingPile> list = applyChargingPileService.lambdaQuery().list(); // excel模板封装 ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream()); InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"充电桩申请记录" + ".xlsx"); // 自动释放资源 try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) { WriteSheet writeSheet = EasyExcelFactory.writerSheet().build(); excelWriter.fill(list, writeSheet); excelWriter.finish(); } catch (Exception e) { return R.fail("excel导出失败!"); } } catch (IOException e) { return R.fail("excel导出失败!"); } return R.ok(); } @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "详情") ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
@@ -16,11 +16,10 @@ import com.ruoyi.order.dto.ExchangeOrderGoodsInfo; import com.ruoyi.order.dto.GetMyExchangeOrder; import com.ruoyi.order.dto.MyExchangeOrderList; import com.ruoyi.order.service.TChargingOrderService; import com.ruoyi.order.service.TExchangeOrderService; import com.ruoyi.order.service.TShoppingOrderService; import com.ruoyi.order.service.TVipOrderService; import com.ruoyi.other.api.dto.ExchangeDto; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.common.core.utils.OrderCodeUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.util.StringUtils; @@ -153,34 +152,37 @@ @PostMapping("/getById") public R<Long> getById(@RequestParam("goodId") Integer goodId,@RequestParam("userId") Long userId){ return R.ok(exchangeOrderService.lambdaQuery().eq(TExchangeOrder::getGoodsId,goodId).eq(TExchangeOrder::getAppUserId,userId).ne(TExchangeOrder::getStatus,4).count()); public R<Long> getById(@RequestParam("goodId") Integer goodId,@RequestParam("userId") Long userId,@RequestParam("goodType") Integer goodType){ if (goodType==1){ return R.ok(exchangeOrderService.lambdaQuery().eq(TExchangeOrder::getGoodsId,goodId).eq(TExchangeOrder::getAppUserId,userId).ne(TExchangeOrder::getStatus,4).count()); }else { return R.ok(exchangeOrderService.lambdaQuery().eq(TExchangeOrder::getCouponId,goodId).eq(TExchangeOrder::getAppUserId,userId).ne(TExchangeOrder::getStatus,4).count()); } } @PostMapping("/create") public R<Long> exchangeCreate(@RequestBody ExchangeDto exchangeDto){ TExchangeOrder tExchangeOrder = new TExchangeOrder(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = "DH" + Math.random() * 1000 + sdf.format(new Date()); tExchangeOrder.setCode(code); tExchangeOrder.setCode(OrderCodeUtil.getOrderCode("DH")); tExchangeOrder.setAppUserId(exchangeDto.getUserId()); tExchangeOrder.setOrderType(0); tExchangeOrder.setGoodsId(0); tExchangeOrder.setCouponId(0); tExchangeOrder.setPurchaseQuantity(0); tExchangeOrder.setAppUserAddressId(0L); tExchangeOrder.setPoints(0); tExchangeOrder.setOrderType(exchangeDto.getGoodType()); if (exchangeDto.getGoodType()==1) { tExchangeOrder.setGoodsId(exchangeDto.getGoodId()); }else { tExchangeOrder.setCouponId(exchangeDto.getGoodId()); } tExchangeOrder.setPurchaseQuantity(1); tExchangeOrder.setAppUserAddressId(Long.valueOf(exchangeDto.getAddressId())); tExchangeOrder.setPoints(exchangeDto.getPoint()); tExchangeOrder.setRemark(""); tExchangeOrder.setStatus(0); tExchangeOrder.setExpressCompany(""); tExchangeOrder.setExpressNumber(""); tExchangeOrder.setConsignerId(0); tExchangeOrder.setConsignerTime(LocalDateTime.now()); tExchangeOrder.setReceivingTime(LocalDateTime.now()); tExchangeOrder.setCancellationTime(LocalDateTime.now()); tExchangeOrder.setCancellationId(0); if (exchangeDto.getGoodType()==1){ tExchangeOrder.setStatus(0); }else { tExchangeOrder.setStatus(3); } tExchangeOrder.setCreateTime(LocalDateTime.now()); tExchangeOrder.setDelFlag(false); exchangeOrderService.save(tExchangeOrder); return R.ok(); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -1,6 +1,9 @@ package com.ruoyi.other.controller; import java.time.LocalDateTime; import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.common.core.domain.R; @@ -9,13 +12,14 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.other.api.domain.TActivity; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.other.api.dto.AdvertisingDTO; import com.ruoyi.order.api.vo.ExchangeDto; import com.ruoyi.other.api.dto.GoodsDTO; import com.ruoyi.other.service.TActivityService; import com.ruoyi.other.service.TAdvertisingService; import com.ruoyi.other.service.TCouponService; import com.ruoyi.other.service.TGoodsService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -45,6 +49,10 @@ private AppUserClient appUserClient; @Resource private OrderClient orderClient; @Resource private AppCouponClient appCouponClient; @Resource private TCouponService couponService; @@ -100,29 +108,48 @@ @ApiOperation(tags = {"小程序-兑换商城"},value = "兑换商品") @PostMapping(value = "/app/shop") public AjaxResult<PageInfo<TGoods>> shop(@RequestBody ExchangeDto exchangeDto) { //查询当前商品信息 TGoods good = goodsService.getById(exchangeDto.getGoodId()); //检查当前用户积分是否够 Long userId = tokenService.getLoginUserApplet().getUserId(); Integer point = 0; if (exchangeDto.getGoodType()==1) { //查询当前商品信息 TGoods good = goodsService.getById(exchangeDto.getGoodId()); point = good.getRedeemPoints(); //检查当前用户是否到达兑换上限 Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) { return AjaxResult.error("当前用户已到达兑换上限"); } TAppUser user = appUserClient.getUserById(userId).getData(); if (user.getPoints()<good.getRedeemPoints()){ return AjaxResult.error("当前用户积分不足"); } }else { TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); point = coupon.getRedeemPoints(); Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) { return AjaxResult.error("当前用户已到达兑换上限"); } } //检查当前用户是否到达兑换上限 Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId).getData(); if (good.getLimitExchangeTimes()!=-1&&count>=good.getLimitExchangeTimes()){ return AjaxResult.error("当前用户已到达兑换上限"); } exchangeDto.setPoint(point); //生成积分兑换成功的订单 // orderClient.exchangeCreate(exchangeDto); //如果是优惠卷,赠送优惠卷给用户 orderClient.exchangeCreate(exchangeDto); if (exchangeDto.getGoodType()==2) { //如果是优惠卷,赠送优惠卷给用户 GrantCouponDto grantCouponDto = new GrantCouponDto(); grantCouponDto.setUserIds(userId.toString()); grantCouponDto.setCouponId(exchangeDto.getGoodId()); grantCouponDto.setWaysToObtain(1); grantCouponDto.setEndTime(LocalDateTime.now()); appCouponClient.grantCoupon(grantCouponDto); } //生成消耗积分的记录 return AjaxResult.success(); @@ -132,7 +159,7 @@ /** * 根据id获取商品信息 * @param id * @return1 * @return */ @PostMapping("/getGoodsById/{id}") public R<TGoods> getGoodsById(@PathVariable Integer id){