cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -117,8 +117,7 @@ if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } istuService.addStuOfAppUser(stu,userIdFormRedis); return ResultUtil.success(); return istuService.addStuOfAppUser(stu,userIdFormRedis); }catch (Exception e){ return ResultUtil.runErr(ResultUtil.ERROR); } cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -277,11 +277,31 @@ /** * 商品详情 */ @ResponseBody @PostMapping("/api/useBenefit/goodsDetails") @ApiOperation(value = "积分商城-商品详情", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "商品id", name = "goodId", required = true, dataType = "int"), @ApiImplicitParam(value = "商品类型 1实物 2课包 3门票 4优惠券", name = "goodsType", required = true, dataType = "int"), }) public ResultUtil<ProductDetailsVo> productDetails(Integer goodId, Integer goodsType){ try { return ResultUtil.success(tauService.productDetails(goodId,goodsType)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 积分明细 */ @ResponseBody @PostMapping("/api/useBenefit/integralDetails") @ApiOperation(value = "积分明细", tags = {"APP-使用福利"}) @ApiOperation(value = "积分商城-积分明细", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "年月", name = "yearMonth", required = true, dataType = "string"), cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java
@@ -4,6 +4,8 @@ import com.dsh.account.feignclient.activity.model.CommodityRequest; import com.dsh.account.feignclient.activity.model.IntegralCommodity; import com.dsh.account.feignclient.activity.model.PointsMerchandise; import com.dsh.account.feignclient.activity.model.ProductDetailRequest; import com.dsh.account.model.vo.userBenefitDetail.ProductDetailsVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -23,4 +25,7 @@ @PostMapping("/base/pointMerchars/getRedeemedNums") public int getRedeemedQuantity(@RequestBody Integer goodId); @PostMapping("/base/pointMerchars/getGoodDetails") ProductDetailsVo getGoodDetailsWithId(@RequestBody ProductDetailRequest detailRequest); } cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java
@@ -39,7 +39,7 @@ /** * 所属积分 */ private BigDecimal integral; private Integer integral; /** * 商品封面 */ cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/ProductDetailRequest.java
New file @@ -0,0 +1,13 @@ package com.dsh.account.feignclient.activity.model; import lombok.Data; @Data public class ProductDetailRequest { Integer goodId; Integer goodsType; } cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java
New file @@ -0,0 +1,58 @@ package com.dsh.account.model.vo.userBenefitDetail; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class ProductDetailsVo { @ApiModelProperty(value = "商品id") private Integer goodId; @ApiModelProperty(value = "图片列表") private List<String> pics; @ApiModelProperty(value = "商品名称") private String goodName; @ApiModelProperty(value = "适用人群") private Integer belongsScope; @ApiModelProperty(value = "已兑换数量") private Integer redeemedNum; @ApiModelProperty(value = "剩余数量") private Integer residueNum; @ApiModelProperty(value = "每人限额") private Integer perLimit; @ApiModelProperty(value = "积分") private Integer integral; @ApiModelProperty(value = "价值") private BigDecimal cost; @ApiModelProperty(value = "课时数") private Integer courseHours; @ApiModelProperty(value = "适用范围") private String belongs; @ApiModelProperty(value = "有效期开始时间") private String startTime; @ApiModelProperty(value = "有效期结束时间") private String endTime; @ApiModelProperty(value = "兑换说明") private String contents; @ApiModelProperty(value = "商品类型 1实物 2课包 3门票 4优惠券") private Integer goodType; } cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
@@ -124,4 +124,6 @@ ResultUtil uploadAppUserHeadImg(Integer appUserId, MultipartFile file, HttpServletRequest request); ProductDetailsVo productDetails(Integer goodId, Integer goodsType ); } cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
@@ -30,7 +30,7 @@ */ public interface TStudentService extends IService<TStudent> { void addStuOfAppUser(StuDetailsReq stu,Integer appUserId); ResultUtil addStuOfAppUser(StuDetailsReq stu,Integer appUserId) throws Exception; ClassDetailsInsVo querySessionDetailsDt(Integer userIdFormRedis, Integer lessonId, Integer stuId); cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -12,6 +12,7 @@ import com.dsh.account.feignclient.activity.UserConponClient; import com.dsh.account.feignclient.activity.model.CommodityRequest; import com.dsh.account.feignclient.activity.model.PointsMerchandise; import com.dsh.account.feignclient.activity.model.ProductDetailRequest; import com.dsh.account.feignclient.competition.DeductionCompetitionsClient; import com.dsh.account.feignclient.competition.model.PaymentCompetition; import com.dsh.account.feignclient.course.CoursePackageClient; @@ -738,4 +739,12 @@ return ResultUtil.success(); } @Override public ProductDetailsVo productDetails(Integer goodId, Integer goodsType ) { ProductDetailRequest detailsVo = new ProductDetailRequest(); detailsVo.setGoodsType(goodsType); detailsVo.setGoodId(goodId); return mcClient.getGoodDetailsWithId(detailsVo); } } cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -107,8 +107,14 @@ @Override public void addStuOfAppUser(StuDetailsReq stu,Integer appUserId) { public ResultUtil addStuOfAppUser(StuDetailsReq stu,Integer appUserId) throws Exception { TStudent student = new TStudent(); if(ToolUtil.isNotEmpty(stu.getName()) && ToolUtil.isNotEmpty(stu.getIdCard())){ Boolean aBoolean = JuHeUtil.idcardAuthentication(stu.getIdCard(), stu.getName()); if(!aBoolean){ return ResultUtil.error("身份证和姓名不匹配"); } } student.setAppUserId(appUserId); student.setName(stu.getName()); student.setHeadImg(stu.getHeadImg()); @@ -137,6 +143,7 @@ saveParticipant.setPhone(student.getPhone()); saveParticipant.setIdcard(student.getIdCard()); participantClient.saveParticipant(saveParticipant); return ResultUtil.success(); } @Override cloud-server-account/src/main/java/com/dsh/account/util/JuHeUtil.java
New file @@ -0,0 +1,44 @@ package com.dsh.account.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.dsh.account.util.httpClinet.HttpClientUtil; import com.dsh.account.util.httpClinet.HttpResult; import java.util.HashMap; import java.util.Map; /** * @author zhibing.pu * @date 2023/7/11 12:05 */ public class JuHeUtil { /** * 校验实名认证 * @param idcard * @param name * @return * @throws Exception */ public static Boolean idcardAuthentication(String idcard, String name) throws Exception{ Map<String, Object> params = new HashMap<>(); params.put("idcard", idcard); params.put("realname", name); params.put("key", "29fec4bbe3108e4fbf52704e5a906fe0"); HttpResult httpResult = HttpClientUtil.pushHttpRequset("POST", "http://op.juhe.cn/idcard/query", params, null, "form"); if(httpResult.getCode() != 200){ return false; } JSONObject jsonObject = JSON.parseObject(httpResult.getData()); Integer error_code = jsonObject.getInteger("error_code"); if(0 == error_code){ JSONObject result = jsonObject.getJSONObject("result"); Integer res = result.getInteger("res"); return res == 1 ? true : false; } return false; } } cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -2,19 +2,25 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.activity.entity.PointsMerchandise; import com.dsh.activity.entity.UserPointsMerchandise; import com.dsh.activity.entity.*; import com.dsh.activity.feignclient.course.CoursePackageClient; import com.dsh.activity.feignclient.course.model.CoursePackage; import com.dsh.activity.feignclient.model.IntegralCommodity; import com.dsh.activity.feignclient.model.ProductDetailRequest; import com.dsh.activity.feignclient.model.ProductDetailsVo; import com.dsh.activity.feignclient.other.StoreClient; import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse; import com.dsh.activity.model.request.CommodityRequest; import com.dsh.activity.service.PointsMerchandiseService; import com.dsh.activity.service.UserPointsMerchandiseService; import com.dsh.activity.service.*; import com.dsh.activity.util.GDMapGeocodingUtil; import com.dsh.activity.util.StrUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.text.SimpleDateFormat; import java.util.*; @RestController @@ -31,6 +37,23 @@ @Autowired private UserPointsMerchandiseService upmseService; @Autowired private ICouponService iCouponService; @Autowired private CoursePackageClient cpClient; @Autowired private StoreClient stoClient; @Autowired private PointsMerchandiseStoreService pmdstoService; @Autowired private UserCouponService uconService; @Autowired private CouponStoreService cstoreService; @PostMapping("/base/pointMerchars/convertGoods") @@ -85,4 +108,115 @@ .eq("pointsMerchandiseId",goodId)); } @PostMapping("/base/pointMerchars/getGoodDetails") public ProductDetailsVo getGoodDetailsWithId(@RequestBody ProductDetailRequest detailRequest){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); ProductDetailsVo detailsVo = new ProductDetailsVo(); PointsMerchandise merchandise = pmdsService.getById(detailRequest.getGoodId()); switch (detailRequest.getGoodsType()){ case 2: // 课包 CoursePackage coursePackage = cpClient.queryCoursePackageById(detailRequest.getGoodId()); detailsVo.setGoodId(coursePackage.getId()); detailsVo.setPics(Arrays.asList(StrUtils.splitStr2StrArr(coursePackage.getDetailDrawing(), ","))); detailsVo.setGoodName(coursePackage.getName()); detailsVo.setBelongsScope(merchandise.getUserPopulation()); int coursePackageNums = upmseService.count(new QueryWrapper<UserPointsMerchandise>() .eq("pointsMerchandiseId",merchandise.getId() )); detailsVo.setRedeemedNum(coursePackageNums); detailsVo.setResidueNum(merchandise.getQuantityIssued() - coursePackageNums); detailsVo.setPerLimit(merchandise.getPickUpQuantity()); detailsVo.setIntegral(merchandise.getIntegral()); detailsVo.setCost(merchandise.getPrice()); if (merchandise.getUseScope() == 1){ detailsVo.setBelongs("全国通用"); }else if (merchandise.getUseScope() == 2){ detailsVo.setBelongs(merchandise.getProvince()+"|"+merchandise.getCity() + "用户可用"); }else { List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>() .eq("pointsMerchandiseId",merchandise.getId() )); PointsMerchandiseStore pointsMerchandiseStore = list.get(0); StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(pointsMerchandiseStore.getStoreId()); detailsVo.setBelongs(courseOfStore.getStoreName()+"可用"); } // TODO: 2023/7/12 课包的课时 // detailsVo.setCourseHours(); detailsVo.setStartTime(format.format(merchandise.getStartTime())); detailsVo.setEndTime(format.format(merchandise.getEndTime())); detailsVo.setContents(merchandise.getRedemptionInstructions()); detailsVo.setGoodType(merchandise.getType()); break; case 1: case 3: detailsVo.setGoodId(merchandise.getId()); String[] strings = StrUtils.splitStr2StrArr(merchandise.getProductImages(), ","); detailsVo.setPics(Arrays.asList(strings)); detailsVo.setGoodName(merchandise.getName()); detailsVo.setBelongsScope(merchandise.getUserPopulation()); int count = upmseService.count(new QueryWrapper<UserPointsMerchandise>() .eq("pointsMerchandiseId",merchandise.getId() )); detailsVo.setRedeemedNum(count); detailsVo.setResidueNum(merchandise.getQuantityIssued()-count); detailsVo.setPerLimit(merchandise.getPickUpQuantity()); detailsVo.setIntegral(merchandise.getIntegral()); detailsVo.setCost(merchandise.getPrice()); if (merchandise.getUseScope() == 1){ detailsVo.setBelongs("全国通用"); }else if (merchandise.getUseScope() == 2){ detailsVo.setBelongs(merchandise.getProvince()+"|"+merchandise.getCity() + "用户可用"); }else { List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>() .eq("pointsMerchandiseId",merchandise.getId() )); PointsMerchandiseStore pointsMerchandiseStore = list.get(0); StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(pointsMerchandiseStore.getStoreId()); detailsVo.setBelongs(courseOfStore.getStoreName()+"可用"); } detailsVo.setStartTime(format.format(merchandise.getStartTime())); detailsVo.setEndTime(format.format(merchandise.getEndTime())); detailsVo.setContents(merchandise.getRedemptionInstructions()); detailsVo.setGoodType(merchandise.getType()); break; case 4: // 优惠券 Coupon coupon = iCouponService.getById(detailRequest.getGoodId()); detailsVo.setGoodId(coupon.getId()); detailsVo.setPics(Arrays.asList(StrUtils.splitStr2StrArr(coupon.getProductImages(), ","))); detailsVo.setGoodName(coupon.getName()); detailsVo.setBelongsScope(coupon.getUserPopulation()); int couponNums = uconService.count(new QueryWrapper<UserCoupon>() .eq("couponId",coupon.getId() )); detailsVo.setRedeemedNum(couponNums); detailsVo.setResidueNum(coupon.getQuantityIssued()-couponNums); detailsVo.setPerLimit(coupon.getPickUpQuantity()); detailsVo.setIntegral(merchandise.getIntegral()); if (coupon.getUseScope() == 1){ detailsVo.setBelongs("全国通用"); }else if (coupon.getUseScope() == 2){ detailsVo.setBelongs(coupon.getProvince()+"|"+coupon.getCity() + "用户可用"); }else { List<CouponStore> list = cstoreService.list(new QueryWrapper<CouponStore>() .eq("couponId",coupon.getId() )); StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(list.get(0).getStoreId()); detailsVo.setBelongs(courseOfStore.getStoreName()+"可用"); } detailsVo.setStartTime(format.format(merchandise.getStartTime())); detailsVo.setEndTime(format.format(merchandise.getEndTime())); detailsVo.setContents(coupon.getIllustrate()); detailsVo.setGoodType(4); break; default: break; } return detailsVo; } } cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java
@@ -68,7 +68,7 @@ * 所属积分 */ @TableField("integral") private BigDecimal integral; private Integer integral; /** * 商品封面 */ cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandiseStore.java
New file @@ -0,0 +1,49 @@ package com.dsh.activity.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; /** * <p> * 积分商品使用门店关系数据 * </p> * * @author jqs * @since 2023-07-12 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_points_merchandise_store") public class PointsMerchandiseStore extends Model<PointsMerchandiseStore> { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 积分商品id */ private Integer pointsMerchandiseId; /** * 门店id */ private Integer storeId; @Override protected Serializable pkVal() { return this.id; } } cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java
@@ -3,6 +3,8 @@ import com.dsh.activity.entity.PointsMerchandise; import com.dsh.activity.feignclient.model.IntegralCommodity; import com.dsh.activity.feignclient.model.ProductDetailRequest; import com.dsh.activity.feignclient.model.ProductDetailsVo; import com.dsh.activity.model.request.CommodityRequest; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -22,4 +24,8 @@ @PostMapping("/base/pointMerchars/getRedeemedNums") public int getRedeemedQuantity(@RequestBody Integer goodId); @PostMapping("/base/pointMerchars/getGoodDetails") ProductDetailsVo getGoodDetailsWithId(@RequestBody ProductDetailRequest detailRequest); } cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailRequest.java
New file @@ -0,0 +1,13 @@ package com.dsh.activity.feignclient.model; import lombok.Data; @Data public class ProductDetailRequest { Integer goodId; Integer goodsType; } cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java
New file @@ -0,0 +1,58 @@ package com.dsh.activity.feignclient.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class ProductDetailsVo { @ApiModelProperty(value = "商品id") private Integer goodId; @ApiModelProperty(value = "图片列表") private List<String> pics; @ApiModelProperty(value = "商品名称") private String goodName; @ApiModelProperty(value = "适用人群") private Integer belongsScope; @ApiModelProperty(value = "已兑换数量") private Integer redeemedNum; @ApiModelProperty(value = "剩余数量") private Integer residueNum; @ApiModelProperty(value = "每人限额") private Integer perLimit; @ApiModelProperty(value = "积分") private Integer integral; @ApiModelProperty(value = "价值") private BigDecimal cost; @ApiModelProperty(value = "课时数") private Integer courseHours; @ApiModelProperty(value = "适用范围") private String belongs; @ApiModelProperty(value = "有效期开始时间") private String startTime; @ApiModelProperty(value = "有效期结束时间") private String endTime; @ApiModelProperty(value = "兑换说明") private String contents; @ApiModelProperty(value = "商品类型 1实物 2课包 3门票 4优惠券") private Integer goodType; } cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseStoreMapper.java
New file @@ -0,0 +1,16 @@ package com.dsh.activity.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.activity.entity.PointsMerchandiseStore; /** * <p> * 积分商品使用门店关系数据 Mapper 接口 * </p> * * @author jqs * @since 2023-07-12 */ public interface PointsMerchandiseStoreMapper extends BaseMapper<PointsMerchandiseStore> { } cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseStoreService.java
New file @@ -0,0 +1,16 @@ package com.dsh.activity.service; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.activity.entity.PointsMerchandiseStore; /** * <p> * 积分商品使用门店关系数据 服务类 * </p> * * @author jqs * @since 2023-07-12 */ public interface PointsMerchandiseStoreService extends IService<PointsMerchandiseStore> { } cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseStoreServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.dsh.activity.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.activity.entity.PointsMerchandiseStore; import com.dsh.activity.mapper.PointsMerchandiseStoreMapper; import com.dsh.activity.service.PointsMerchandiseStoreService; import org.springframework.stereotype.Service; /** * <p> * 积分商品使用门店关系数据 服务实现类 * </p> * * @author jqs * @since 2023-07-12 */ @Service public class PointsMerchandiseStoreServiceImpl extends ServiceImpl<PointsMerchandiseStoreMapper, PointsMerchandiseStore> implements PointsMerchandiseStoreService { } cloud-server-activity/src/main/resources/mapper/PointsMerchandiseStoreMapper.xml
New file @@ -0,0 +1,6 @@ <?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.dsh.activity.mapper.PointsMerchandiseStoreMapper"> </mapper>