From 1cb12391db6154f2d1a8fdf8e0506fe3f3eb2f15 Mon Sep 17 00:00:00 2001 From: luo <2855143437@qq.com> Date: 星期日, 08 十月 2023 16:19:34 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java | 2 cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tGoods_info.js | 804 +++++++++ cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java | 6 cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml | 3 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html | 123 + cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java | 9 cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java | 3 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java | 1 cloud-server-other/src/main/java/com/dsh/other/mapper/TGameRecordMapper.java | 17 cloud-server-other/src/main/java/com/dsh/other/service/TGameRecordService.java | 17 cloud-server-other/src/main/java/com/dsh/other/util/HttpRequestUtil.java | 254 ++ cloud-server-account/src/main/java/com/dsh/account/model/QueryDataFee.java | 16 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TStoreList.html | 58 cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java | 8 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html | 2 cloud-server-other/src/main/java/com/dsh/other/entity/TGameRecord.java | 65 cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java | 120 + cloud-server-competition/src/main/java/com/dsh/competition/model/QueryDataFee.java | 16 cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/TStoreInfo.js | 157 + cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java | 4 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java | 153 + cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html | 122 + cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionAuditController.java | 6 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TCity_edit.html | 98 + cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 30 cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java | 71 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java | 5 cloud-server-course/src/main/java/com/dsh/course/model/QueryDataFee.java | 16 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java | 43 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetitionAudit/TCompetition_edit.html | 13 cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java | 7 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 45 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_detail_one.html | 11 cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java | 2 cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java | 124 + cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java | 30 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java | 9 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java | 2 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_add.html | 569 ++++++ cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tGoods.js | 259 +++ cloud-server-other/src/main/java/com/dsh/other/entity/TGameConfig.java | 3 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java | 2 cloud-server-activity/src/main/java/com/dsh/activity/model/QueryDataFee.java | 16 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java | 13 cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/QueryDataFee.java | 16 cloud-server-course/src/main/resources/sharding-jdbc.properties | 4 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_pay.html | 48 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SiteBooking.java | 3 cloud-server-management/src/main/resources/mapper/SiteBookingMapper.xml | 6 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_detail_two.html | 396 ++++ cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_edit.html | 157 + cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java | 18 cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCompetition_info.js | 42 cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java | 3 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java | 4 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_detail_one.html | 208 ++ cloud-server-other/src/main/java/com/dsh/other/service/impl/TGameRecordServiceImpl.java | 21 cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java | 265 +++ cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml | 34 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoodsAudit.html | 66 cloud-server-other/src/main/resources/mapper/TGameRecordMapper.xml | 6 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java | 5 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java | 6 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java | 35 cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java | 1 cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java | 2 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html | 298 ++ cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java | 32 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java | 7 cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tPay_info.js | 102 + 70 files changed, 5,001 insertions(+), 118 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java index 707bea3..b7c7d88 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java @@ -1,16 +1,21 @@ package com.dsh.account.controller; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.account.dto.*; -import com.dsh.account.entity.Coach; -import com.dsh.account.entity.GiftSearchDto; -import com.dsh.account.entity.TStudent; +import com.dsh.account.entity.*; import com.dsh.account.feignclient.course.CoursePaymentClient; import com.dsh.account.feignclient.course.model.TCoursePackagePayment; +import com.dsh.account.model.QueryDataFee; import com.dsh.account.model.StudentVo; +import com.dsh.account.service.IVipPaymentService; +import com.dsh.account.service.RechargeRecordsService; +import com.dsh.account.service.TAppUserService; import com.dsh.account.service.TStudentService; import com.dsh.account.util.ResultUtil; import com.dsh.account.util.TokenUtil; +import com.dsh.account.util.ToolUtil; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; @@ -19,10 +24,13 @@ import springfox.documentation.swagger2.mappers.ModelMapper; import javax.annotation.Resource; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; /** * @author zhibing.pu @@ -37,6 +45,15 @@ @Autowired private TokenUtil tokenUtil; + + @Autowired + private TAppUserService appUserService; + + @Autowired + private IVipPaymentService vipPaymentService; + + @Autowired + private RechargeRecordsService rechargeRecordsService; /** * 添加学员 @@ -231,4 +248,105 @@ System.out.println("=======giftSelect======selectDtos====>"+list); return list; } + + + @PostMapping("/student/getUserPt") + @ResponseBody + public List<Integer> getUserPt(@RequestBody List<Integer> ids){ + if(ids.size()==0){ + ids.add(-1); + } + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().in(TAppUser::getInsertType, 1)); + return list.stream().map(TAppUser::getId).collect(Collectors.toList()); + } + + + @PostMapping("/student/queryFee") + public HashMap<String, Object> queryFee(@RequestBody QueryDataFee queryDataFee){ + HashMap<String, Object> map = new HashMap<>(); + String data = queryDataFee.getData(); + List<Integer> ids = queryDataFee.getIds(); + if(ids.size()==0){ + ids.add(-1); + } + LambdaQueryWrapper<VipPayment> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(data)){ + String stime = data.split(" - ")[0]+" 00:00:00"; + String etime = data.split(" - ")[1]+" 23:59:59"; + vipPaymentLambdaQueryWrapper.between(VipPayment::getInsertTime,stime,etime); + } + vipPaymentLambdaQueryWrapper.in(VipPayment::getAppUserId,ids); + vipPaymentLambdaQueryWrapper.eq(VipPayment::getPayStatus,2); + List<VipPayment> list = vipPaymentService.list(vipPaymentLambdaQueryWrapper); + double sum = list.stream().mapToDouble(VipPayment::getAmount).sum(); + + map.put("fee1",sum); + + LambdaQueryWrapper<RechargeRecords> rechargeRecordsLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(data)){ + String stime = data.split(" - ")[0]+" 00:00:00"; + String etime = data.split(" - ")[1]+" 23:59:59"; + rechargeRecordsLambdaQueryWrapper.between(RechargeRecords::getInsertTime,stime,etime); + } + rechargeRecordsLambdaQueryWrapper.in(RechargeRecords::getAppUserId,ids); + rechargeRecordsLambdaQueryWrapper.eq(RechargeRecords::getPayStatus,2); + List<RechargeRecords> list1 = rechargeRecordsService.list(rechargeRecordsLambdaQueryWrapper); + double sum1 = list1.stream().map(RechargeRecords::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add).doubleValue(); + + map.put("fee2",sum1); + + + + + return map; + + + } + + + + @PostMapping("/student/queryUserAge") + public HashMap<String, Object> queryUserAge(){ + HashMap<String, Object> map = new HashMap<>(); + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().in(TAppUser::getInsertType, 1)); + List<Integer> collect = list.stream().map(TAppUser::getId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + List<TStudent> list1 = studentService.list(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect)); + int age1=0; + int age2=0; + int age3=0; + int age4=0; + int boy=0; + int girl=0; + for (TStudent tStudent : list1) { + Date birthday = tStudent.getBirthday(); + long l = DateUtil.betweenYear(birthday, new Date(), true); + if(l<7){ + age1++; + }else if(l>=8 && l<11){ + age2++; + }else if(l>=11 && l<=12){ + age3++; + }else { + age4++; + } + if(tStudent.getSex()==1){ + boy++; + }else { + girl++; + } + } + map.put("age1",age1); + map.put("age2",age2); + map.put("age3",age3); + map.put("age4",age4); + map.put("boy",boy); + map.put("girl",girl); + return map; + + + + } } diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java b/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java index 62b571b..4e1b938 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java +++ b/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java @@ -169,6 +169,6 @@ /** * 添加人id平台管理员id 运营商id */ - @TableField("type") + @TableField("addUserId") private Integer addUserId; } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java index 40394d3..1cdf5c9 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java @@ -3,6 +3,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + @Data public class RecordAppoint { @@ -27,4 +29,11 @@ @ApiModelProperty(value = "课状态(1待上课 2已开始 3已完成 4已取消 5已请假 6旷课)") private Integer status; + + private Integer userId; + + private Integer siteId; + + private List<Integer> ids; + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/QueryDataFee.java b/cloud-server-account/src/main/java/com/dsh/account/model/QueryDataFee.java new file mode 100644 index 0000000..ae5a8d4 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/QueryDataFee.java @@ -0,0 +1,16 @@ +package com.dsh.account.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QueryDataFee { + private String data; + + private List<Integer> ids; +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java index 2935877..f85e7b7 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java @@ -15,6 +15,7 @@ import com.dsh.activity.model.CoachChangeStateVO; import com.dsh.activity.model.PointMerchandiseIncomeVo; import com.dsh.activity.model.PointMerchandiseVo; +import com.dsh.activity.model.QueryDataFee; import com.dsh.activity.model.request.*; import com.dsh.activity.model.response.GoodsInfoOneVo; import com.dsh.activity.model.response.StoreVos; @@ -75,6 +76,11 @@ @Resource private CouponCityService ccityService; + + + @Resource + private PointsMerchandiseCityService pmdsCityService; + @Autowired private UserPointsMerchandiseService userPointsMerchandiseService; @@ -147,9 +153,6 @@ public List<PointMerchandiseIncomeVo> getAmount(){ return userPointsMerchandiseService.getAmount(); } - - @Resource - private PointsMerchandiseCityService pmdsCityService; @ResponseBody @@ -623,7 +626,6 @@ - public int dealTimeStatus(String startTime, String endTime){ LocalDate now = LocalDate.now(); LocalDate start = LocalDate.parse(startTime); @@ -971,4 +973,114 @@ } + + @ResponseBody + @PostMapping("/base/pointMerchars/getIntegralGoodsListOfSearchAudit") + public List<Map<String,Object>> getIntegralGoodsListOfSearchAudit(@RequestBody IntegralGoodsOfSearch ofSearch){ + System.out.println(ofSearch); + List<Map<String, Object>> mapList = pmdsService.queryGoodsListOfSearchAudit(ofSearch); + if (mapList.size() > 0){ + for (Map<String, Object> stringObjectMap : mapList) { + Integer o = (Integer) stringObjectMap.get("id"); + String startTime = (String) stringObjectMap.get("startTime"); + String endTime = (String) stringObjectMap.get("endTime"); + stringObjectMap.put("timeValue",startTime + "至"+endTime); + int count1 = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>() + .eq(UserPointsMerchandise::getPointsMerchandiseId, o)); + int count2 = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>() + .eq(UserPointsMerchandise::getPointsMerchandiseId, o) + .eq(UserPointsMerchandise::getStatus,2)); + stringObjectMap.put("hasExchangeQty",count1); + stringObjectMap.put("hasPickQty",count2); + + stringObjectMap.put("activeStatus",dealTimeStatus(startTime,endTime)); + } + if (ToolUtil.isNotEmpty(ofSearch.getActiveStatus())){ + mapList = dealTimeData(mapList,ofSearch.getActiveStatus()); + } + } + System.out.println("mapList->"+mapList); + return mapList; + } + + + @PostMapping("/base/pointMerchars/updateType") + @ResponseBody + public Object updateType(@RequestBody String s){ + String[] split = s.split("_"); + PointsMerchandise byId = pmdsService.getById(split[0]); + byId.setStatus(Integer.valueOf(split[1])); + if(Integer.valueOf(split[1])==3){ + + byId.setRemark(split[2]); + } + return pmdsService.updateById(byId); + + } + + + @PostMapping("/base/pointMerchars/queryFee") + @ResponseBody + public HashMap<String, Object> queryFee(@RequestBody QueryDataFee queryDataFee){ + HashMap<String, Object> map = new HashMap<>(); + String data = queryDataFee.getData(); + List<Integer> ids = queryDataFee.getIds(); + if(ids.size()==0){ + ids.add(-1); + } + List<PointsMerchandise> list1 = pmdsService.list(new LambdaQueryWrapper<PointsMerchandise>().eq(PointsMerchandise::getRedemptionMethod, 3)); + LambdaQueryWrapper<UserPointsMerchandise> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(data)){ + String stime = data.split(" - ")[0]+" 00:00:00"; + String etime = data.split(" - ")[1]+" 23:59:59"; + vipPaymentLambdaQueryWrapper.between(UserPointsMerchandise::getInsertTime,stime,etime); + } + vipPaymentLambdaQueryWrapper.in(UserPointsMerchandise::getUserId,ids); + List<Integer> collect = list1.stream().map(PointsMerchandise::getId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + vipPaymentLambdaQueryWrapper.in(UserPointsMerchandise::getPointsMerchandiseId,collect); + vipPaymentLambdaQueryWrapper.eq(UserPointsMerchandise::getPayStatus,2); + ArrayList<Integer> objects = new ArrayList<>(); + List<UserPointsMerchandise> list = upmseService.list(vipPaymentLambdaQueryWrapper); + + double a =0; + double d =0; + double m =0; + double j =0; + double y =0; + for (UserPointsMerchandise userPointsMerchandise : list) { + for (PointsMerchandise pointsMerchandise : list1) { + if(pointsMerchandise.getId()==userPointsMerchandise.getPointsMerchandiseId()){ + a += pointsMerchandise.getCash().doubleValue(); + } + if(pointsMerchandise.getType()==3){ + if(pointsMerchandise.getCardType()==1){ + d += pointsMerchandise.getCash().doubleValue(); + } + if(pointsMerchandise.getCardType()==2){ + m += pointsMerchandise.getCash().doubleValue(); + } + if(pointsMerchandise.getCardType()==3){ + j += pointsMerchandise.getCash().doubleValue(); + } + if(pointsMerchandise.getCardType()==4){ + y += pointsMerchandise.getCash().doubleValue(); + } + } + } + + } + + map.put("all",a); + map.put("day",d); + map.put("month",m); + map.put("quarter",j); + map.put("year",y); + return map; + + + } + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java index bb20553..4fa8b3b 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java @@ -165,6 +165,10 @@ private Integer shelves; @TableField("cardType") private Integer cardType; + @TableField("status") + private Integer status; + @TableField("remark") + private String remark; @Override protected Serializable pkVal() { diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java index 4183f97..49248dd 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java @@ -27,6 +27,13 @@ @Param("activeStatus") Integer activeStatus, @Param("state") Integer state, @Param("page") Page<Map<String, Object>> page); + List<Map<String, Object>> queryGoodsListOfSearchAudit(@Param("name")String name, + @Param("type")Integer type, + @Param("redemptionMethod")Integer redemptionMethod, + @Param("userPopulation") Integer userPopulation, + @Param("activeStatus") Integer activeStatus, + @Param("state") Integer state, + @Param("page") Page<Map<String, Object>> page); List<Map<String, Object>> ticketList(@Param("query") IntegralGoodsOfSearch ofSearch); diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/QueryDataFee.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/QueryDataFee.java new file mode 100644 index 0000000..d83e5d7 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/QueryDataFee.java @@ -0,0 +1,16 @@ +package com.dsh.activity.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QueryDataFee { + private String data; + + private List<Integer> ids; +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java index 764cd43..4c7adc5 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java @@ -22,6 +22,8 @@ void saveCity(Integer id, String province, String provinceCode, String city, String cityCode); + List<Map<String, Object>> queryGoodsListOfSearchAudit(IntegralGoodsOfSearch ofSearch); + List<Map<String, Object>> ticketList(IntegralGoodsOfSearch ofSearch); Object changeState(CoachChangeStateVO dto); diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java index 8be3a23..e0c9309 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java @@ -27,6 +27,11 @@ return this.baseMapper.queryGoodsListOfSearch(ofSearch.getName(),ofSearch.getType(),ofSearch.getRedemptionMethod(), ofSearch.getUserPopulation(),ofSearch.getActiveStatus(),ofSearch.getState(),ofSearch.getPage()); } + @Override + public List<Map<String, Object>> queryGoodsListOfSearchAudit(IntegralGoodsOfSearch ofSearch) { + return this.baseMapper.queryGoodsListOfSearchAudit(ofSearch.getName(),ofSearch.getType(),ofSearch.getRedemptionMethod(), + ofSearch.getUserPopulation(),ofSearch.getActiveStatus(),ofSearch.getState(),ofSearch.getPage()); + } @Override diff --git a/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml b/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml index 52bffed..d1bb6d3 100644 --- a/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml +++ b/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml @@ -16,6 +16,7 @@ pickUpQuantity, `sort`, shelves + from t_points_merchandise where 1 = 1 <if test="name != null"> @@ -35,6 +36,39 @@ </if> order by insertTime desc </select> + <select id="queryGoodsListOfSearchAudit" resultType="java.util.Map"> + SELECT id, + `name`, + `cover`, + `type`, + date_format(startTime ,'%Y-%m-%d') as startTime, + date_format(endTime ,'%Y-%m-%d') as endTime, + useScope, + userPopulation, + quantityIssued, + pickUpQuantity, + `sort`, + shelves, + status + from t_points_merchandise + where type =3 and `status` !=1 + <if test="name != null"> + and `name` like concat('%', #{name}, '%') + </if> + <if test="type != null"> + and cardType = #{type} + </if> + <if test="redemptionMethod != null"> + and redemptionMethod = #{redemptionMethod} + </if> + <if test="userPopulation != null"> + and userPopulation = #{userPopulation} + </if> + <if test="activeStatus != null"> + and `status` = #{activeStatus} + </if> + order by insertTime desc + </select> <select id="ticketList" resultType="java.util.Map"> SELECT id, `name`, diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java index 57f39c4..6990211 100644 --- a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java +++ b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java @@ -30,10 +30,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -548,5 +545,32 @@ } } + + + @PostMapping("/base/competition/queryFee") + public Double queryFee(@RequestBody QueryDataFee queryDataFee){ + HashMap<String, Object> map = new HashMap<>(); + String data = queryDataFee.getData(); + List<Integer> ids = queryDataFee.getIds(); + if(ids.size()==0){ + ids.add(-1); + } + LambdaQueryWrapper<PaymentCompetition> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(data)){ + String stime = data.split(" - ")[0]+" 00:00:00"; + String etime = data.split(" - ")[1]+" 23:59:59"; + vipPaymentLambdaQueryWrapper.between(PaymentCompetition::getInsertTime,stime,etime); + } + vipPaymentLambdaQueryWrapper.in(PaymentCompetition::getAppUserId,ids); + vipPaymentLambdaQueryWrapper.eq(PaymentCompetition::getPayStatus,2); + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + objects.add(2); + vipPaymentLambdaQueryWrapper.in(PaymentCompetition::getPayType,objects); + List<PaymentCompetition> list = paymentCompetitionService.list(vipPaymentLambdaQueryWrapper); + double sum = list.stream().mapToDouble(PaymentCompetition::getAmount).sum(); + return sum; + } + } diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/model/QueryDataFee.java b/cloud-server-competition/src/main/java/com/dsh/competition/model/QueryDataFee.java new file mode 100644 index 0000000..fcfc378 --- /dev/null +++ b/cloud-server-competition/src/main/java/com/dsh/competition/model/QueryDataFee.java @@ -0,0 +1,16 @@ +package com.dsh.competition.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QueryDataFee { + private String data; + + private List<Integer> ids; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java index 337f37d..fa41b2b 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java @@ -18,10 +18,7 @@ import com.dsh.course.service.TCoursePackageService; import com.dsh.course.service.TCoursePackageTypeService; import com.dsh.course.service.TCourseService; -import com.dsh.course.util.PageFactory; -import com.dsh.course.util.PayMoneyUtil; -import com.dsh.course.util.ResultUtil; -import com.dsh.course.util.TokenUtil; +import com.dsh.course.util.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -35,10 +32,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Api @CrossOrigin @@ -451,4 +450,68 @@ public String getHours(@RequestBody Integer coursePackageId1){ return coursePackageService.getHours(coursePackageId1); } + + @PostMapping("/course/queryFee") + public HashMap<String, Object> queryFee(@RequestBody QueryDataFee queryDataFee){ + HashMap<String, Object> map = new HashMap<>(); + String data = queryDataFee.getData(); + List<Integer> ids = queryDataFee.getIds(); + if(ids.size()==0){ + ids.add(-1); + } + + LambdaQueryWrapper<TCoursePackagePayment> wrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(data)){ + String stime = data.split(" - ")[0]+" 00:00:00"; + String etime = data.split(" - ")[1]+" 23:59:59"; + wrapper.between(TCoursePackagePayment::getInsertTime,stime,etime); + } + wrapper.in(TCoursePackagePayment::getAppUserId,ids); + wrapper.eq(TCoursePackagePayment::getPayStatus,2); + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + objects.add(2); + objects.add(5); + objects.add(6); + wrapper.in(TCoursePackagePayment::getPayType,objects); + List<TCoursePackagePayment> list = coursePackagePaymentService.list(wrapper); + double v = list.stream().map(TCoursePackagePayment::getCashPayment).reduce(BigDecimal.ZERO, BigDecimal::add).doubleValue(); + List<Integer> collect = list.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + // + List<TCoursePackage> list2 = coursePackageService.list(new LambdaQueryWrapper<TCoursePackage>().in(TCoursePackage::getId, collect)); + // 课类型 + List<TCoursePackageType> list1 = coursePackageTypeService.list(); + + for (TCoursePackagePayment tCoursePackagePayment : list) { + for (TCoursePackage tCoursePackage : list2) { + if(tCoursePackagePayment.getCoursePackageId().equals(tCoursePackage.getId())){ + tCoursePackagePayment.setType(tCoursePackage.getCoursePackageTypeId()); + } + } + } + + ArrayList<HashMap<String, Object>> hashMaps = new ArrayList<>(); + + for (TCoursePackageType tCoursePackageType : list1) { + HashMap<String, Object> objectObjectHashMap = new HashMap<>(); + objectObjectHashMap.put("name",tCoursePackageType.getName()); + double a= 0; + for (TCoursePackagePayment tCoursePackagePayment : list) { + if(tCoursePackagePayment.getType().equals(tCoursePackageType.getId())){ + a += tCoursePackagePayment.getCashPayment().doubleValue(); + } + } + objectObjectHashMap.put("value",a); + hashMaps.add(objectObjectHashMap); + } + + HashMap<String, Object> map1 = new HashMap<>(); + map1.put("fee",v); + map1.put("data",hashMaps); + + return map1; + } } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java index 737901c..2f691bb 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java @@ -1243,7 +1243,7 @@ return packagePaymentService.save(packagePayment); } - + @ResponseBody @PostMapping("/base/coursePack/obtainStudentClassDetails") public List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody WeeksOfCourseRest stuId){ try { @@ -1558,4 +1558,47 @@ return a; } + + @ResponseBody + @PostMapping("/coursePackagePayment/queryCourseData") + public List<Map<String,Object>> queryCourseData(@RequestBody List<Integer> ids){ + // 找出课程类型 找出剩余的课时数 + List<TCoursePackageType> list = coursePackageTypeService.list(); + if(ids.size()==0){ + ids.add(-1); + } + List<TCoursePackagePayment> list1 = packagePaymentService.listOne(ids); + List<Integer> collect = list1.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + List<TCoursePackage> list2 = tcpService.list(new LambdaQueryWrapper<TCoursePackage>().in(TCoursePackage::getId, collect)); + for (TCoursePackagePayment tCoursePackagePayment : list1) { + for (TCoursePackage tCoursePackage : list2) { + if(tCoursePackagePayment.getCoursePackageId().equals(tCoursePackage.getId())){ + tCoursePackagePayment.setType(tCoursePackage.getType()); + } + } + } + + + List<Map<String,Object>> mapList = new ArrayList<>(); + for (TCoursePackageType tCoursePackageType : list) { + HashMap<String, Object> map = new HashMap<>(); + map.put("name",tCoursePackageType.getName()); + int a =0; + for (TCoursePackagePayment tCoursePackagePayment : list1) { + if(tCoursePackagePayment.getType().equals(tCoursePackageType.getId())){ + a += tCoursePackagePayment.getLaveClassHours(); + } + } + map.put("value",a); + mapList.add(map); + } + + + return mapList; + } + + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java index f9a0012..f4ccf79 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java @@ -185,4 +185,8 @@ @TableField(exist = false) private BigDecimal cashPayment1; + + + @TableField(exist = false) + private Integer type; } diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java index 49d1ffc..c7d3f49 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java @@ -3,6 +3,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + @Data public class RecordAppoint { @@ -27,4 +29,10 @@ @ApiModelProperty(value = "课状态(1待上课 2已开始 3已完成 4已取消 5已请假 6旷课)") private Integer status; + private Integer userId; + + private Integer siteId; + + private List<Integer> ids; + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java index 5b49e8f..edd843d 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java @@ -73,4 +73,7 @@ List<Map<String, Object>> getStudentTotal(StudentQeryDto studentQeryDto); List<Map<String, Object>> pacQueryDto(PacQueryDto pacQueryDto); + + List<TCoursePackagePayment> listOne(@Param("ids") List<Integer> ids); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/QueryDataFee.java b/cloud-server-course/src/main/java/com/dsh/course/model/QueryDataFee.java new file mode 100644 index 0000000..6609927 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/QueryDataFee.java @@ -0,0 +1,16 @@ +package com.dsh.course.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QueryDataFee { + private String data; + + private List<Integer> ids; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java index 9aa1fd5..441ec3d 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java @@ -138,4 +138,6 @@ List<Map<String, Object>> getStudentTotal(StudentQeryDto studentQeryDto); List<Map<String, Object>> bypac(PacQueryDto pacQueryDto); + List<TCoursePackagePayment> listOne(List<Integer> ids); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java index 64c839f..2bfc8a7 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java @@ -1,6 +1,9 @@ package com.dsh.course.service.impl; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alipay.api.domain.Person; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -247,6 +250,11 @@ return maps; + } + + @Override + public List<TCoursePackagePayment> listOne(List<Integer> ids) { + return this.baseMapper.listOne(ids); } /** @@ -741,6 +749,12 @@ TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); + + recordVo.setUserId(appUserId); + recordVo.setSiteId(coursePackage.getSiteId()); + List<Integer> ids = getIds(coursePackage.getSiteId()); + recordVo.setIds(ids); + recordVo.setCoursePackageName(coursePackage.getName()); recordVo.setCourseHours(tCoursePackagePayment.getClassHours()); Date date = DateUtil.getDate(); @@ -796,7 +810,23 @@ } return recordVoList; } + public List<Integer> getIds(Integer siteId) { + HttpRequest httpRequest = HttpRequest.get("https://try.daowepark.com/v7/user_api/general/get_space_area?space_id=" + siteId); + HttpResponse execute = httpRequest.execute(); + String body = execute.body(); + JSONObject jsonObject = JSONObject.parseObject(body); + Object data = jsonObject.get("data"); + JSONArray array = JSONArray.parseArray(data.toString()); + List<Integer> ids =new ArrayList<>(); + for (Object o : array) { + JSONObject jsonObject1 = JSONObject.parseObject(o.toString()); + Object id = jsonObject1.get("id"); + Integer integer = Integer.valueOf(id.toString()); + ids.add(integer); + } + return ids; + } @Override public ResultUtil insertVipPaymentCallback(String code, String orderNumber) { TCoursePackagePayment coursePackagePayment = this.baseMapper.getCoursePackagePaymentByCode(code); diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml index 69dabbb..149f878 100644 --- a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml @@ -202,6 +202,9 @@ </select> + <select id="listOne" resultType="com.dsh.course.entity.TCoursePackagePayment"> + select * from t_course_package_payment where appUserId in <foreach collection="ids" separator="," open="(" item="id" close=")">#{id}</foreach> + </select> <update id="updateBytime"> update t_course_package_payment diff --git a/cloud-server-course/src/main/resources/sharding-jdbc.properties b/cloud-server-course/src/main/resources/sharding-jdbc.properties index ca0dde7..09e20a5 100644 --- a/cloud-server-course/src/main/resources/sharding-jdbc.properties +++ b/cloud-server-course/src/main/resources/sharding-jdbc.properties @@ -3,9 +3,9 @@ #�������� datasource.master0.type=com.alibaba.druid.pool.DruidDataSource datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver -datasource.master0.url=jdbc:mysql://8.137.22.229:3306/playpai_course?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai +datasource.master0.url=jdbc:mysql://192.168.110.80:3306/playpai_course?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai datasource.master0.username=root -datasource.master0.password=playpai2023! +datasource.master0.password=123456 datasource.master0.maxActive=20 datasource.master0.maxWait=60000 datasource.master0.minIdle=5 diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java index 4605680..bf46cef 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java @@ -2,13 +2,10 @@ import com.dsh.course.dto.CreateHistoryDto; import com.dsh.course.dto.GetHistoryDto; -import com.dsh.course.feignClient.account.model.QueryAppUser; -import com.dsh.course.feignClient.account.model.QueryAppUserVO; +import com.dsh.course.feignClient.account.model.*; import com.dsh.course.dto.StudentSearch; import com.dsh.course.dto.TStudentDto; -import com.dsh.course.feignClient.account.model.QueryByNamePhone; -import com.dsh.course.feignClient.account.model.TAppUser; import com.dsh.course.feignClient.other.model.SiteChangeStateVO; import com.dsh.guns.modular.system.model.AdvertisementChangeStateDTO; import com.dsh.guns.modular.system.model.AppUserByNameAndPhoneDTO; @@ -19,6 +16,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestBody; +import java.util.HashMap; import java.util.List; @FeignClient("mb-cloud-account") @@ -95,4 +93,16 @@ List<GetHistoryDto> getHisory(); @PostMapping("/student/giftSelect") List<SelectDto> giftSelect(@RequestBody GiftSearchDto giftSearchDto); + + @PostMapping("/student/getUserPt") + List<Integer> getUserPt(List<Integer> ids); + + @PostMapping("/student/queryFee") + HashMap<String, Object> queryFee(QueryDataFee queryDataFee); + + @PostMapping("/student/queryUserAge") + HashMap<String, Object> queryUserAge(); + + + } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/QueryDataFee.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/QueryDataFee.java new file mode 100644 index 0000000..77e78b7 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/QueryDataFee.java @@ -0,0 +1,16 @@ +package com.dsh.course.feignClient.account.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QueryDataFee { + private String data; + + private List<Integer> ids; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java index a682775..7a57e67 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.account.model.QueryDataFee; import com.dsh.course.feignClient.activity.model.IntegralGoodsOfSearch; import com.dsh.course.feignClient.activity.model.PointMercharsPayedVo; import com.dsh.course.feignClient.activity.model.PointMercharsVo; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -84,4 +86,15 @@ @PostMapping("/base/pointMerchars/writeOffGoodsStatus") boolean writeOffGoodsStatus(@RequestBody Map<String, Object> map); + @PostMapping("/base/pointMerchars/getIntegralGoodsListOfSearchAudit") + List<Map<String,Object>> getIntegralGoodsListOfSearchAudit(IntegralGoodsOfSearch ofSearch); + + @PostMapping("/base/pointMerchars/updateType") + Object updateType(String s); + + + @PostMapping("/base/pointMerchars/queryFee") + HashMap<String, Object> queryFee(QueryDataFee queryDataFee); + + } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java index 70eee48..faf925c 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java @@ -1,6 +1,7 @@ package com.dsh.course.feignClient.competition; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.account.model.QueryDataFee; import com.dsh.course.feignClient.competition.model.*; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -40,6 +41,11 @@ @PostMapping("/base/competition/listAudit") Page<Competition> listAudit(ListQuery listQuery); + + @PostMapping("/base/competition/queryFee") + Double queryFee(QueryDataFee queryDataFee); + + } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java index 171b993..4df17a7 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java @@ -1,6 +1,7 @@ package com.dsh.course.feignClient.course; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.account.model.QueryDataFee; import com.dsh.course.feignClient.course.model.CourseChangeStateDTO; import com.dsh.course.feignClient.course.model.QueryCourseList; import com.dsh.guns.modular.system.model.EditCourseState; @@ -11,8 +12,8 @@ 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.ResponseBody; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -107,4 +108,10 @@ @PostMapping("/course/getHours") String getHours(Integer coursePackageId1); + + + @PostMapping("/course/queryFee") + HashMap<String, Object> queryFee(QueryDataFee queryDataFee); + + } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java index 8d09904..ac52705 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java @@ -88,4 +88,10 @@ @PostMapping("/coursePackagePayment/CountqueryByClassId") Integer queryByClassId(Integer id); + + @PostMapping("/coursePackagePayment/queryCourseData") + List<Map<String,Object>> queryCourseData(List<Integer> ids); + + + } diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java index 5ded97a..ac3fd99 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java +++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java @@ -1,5 +1,6 @@ package com.dsh.course.mapper; + import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.guns.modular.system.model.SiteBooking; diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java index deeb3ec..0fe7d8e 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.dsh.course.feignClient.account.*; import com.dsh.course.feignClient.account.model.CityManager; +import com.dsh.course.feignClient.account.model.QueryDataFee; import com.dsh.course.feignClient.account.model.TAppUser; import com.dsh.course.feignClient.account.model.VipPayment; import com.dsh.course.feignClient.activity.PointMercharsClient; @@ -18,8 +19,9 @@ import com.dsh.course.model.MoneyBack; import com.dsh.guns.config.UserExt; import com.dsh.guns.core.base.controller.BaseController; +import com.dsh.guns.core.util.ToolUtil; import com.dsh.guns.modular.system.model.*; -import com.dsh.guns.modular.system.service.ICityService; +import com.dsh.guns.modular.system.service.*; import groovyjarjarpicocli.CommandLine; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -50,8 +52,14 @@ private ICityService cityService; @Autowired private CityManagerClient cityManagerClient; + + @Autowired + private IUserService sysUserService; @Autowired private AppUserClient appUserClient; + + @Autowired + private CourseClient courseClient; @Autowired private VipPaymentClient vipPaymentClient; @Autowired @@ -60,6 +68,9 @@ private CoursePackagePaymentClient coursePackagePaymentClient; @Autowired private CompetitionClient competitionClient; + + @Autowired + private ISiteBookingService siteBookingService; @Autowired private StoreClient storeClient; @Autowired @@ -77,6 +88,17 @@ */ @RequestMapping("/platform") public String index(Model model) { + Object o = type1(null); + model.addAttribute("data",o); + + + + // 教学统计 + HashMap<String, Object> map = appUserClient.queryUserAge(); + model.addAttribute("stuData",map); + + + return PREFIX + "platformIncome.html"; } @@ -506,6 +528,135 @@ model.addAttribute("objectType",objectType); return PREFIX + "storeIncome.html"; } + + + @Autowired + private ITSiteTypeService siteTypeService; + + + @Autowired + private ITSiteService siteService; + + @RequestMapping("/type1") + @ResponseBody + public Object type1(String time) { + HashMap<String, Object> map = new HashMap<>(); + // 找出平台的用户 + List<User> list = sysUserService.list(new LambdaQueryWrapper<User>().eq(User::getObjectType, 1)); + List<Integer> ids = list.stream().map(User::getId).collect(Collectors.toList()); + List<Integer> userIds = appUserClient.getUserPt(ids); + QueryDataFee queryDataFee = new QueryDataFee(time, userIds); + // 会员费 + HashMap<String, Object> map1 = appUserClient.queryFee(queryDataFee); + Object fee1 = map1.get("fee1"); + + map.put("fee1",fee1); + //玩湃比 + Object fee2 = map1.get("fee2"); + map.put("fee2",fee2); + // 课程收入 + HashMap<String, Object> map3 = courseClient.queryFee(queryDataFee); + map.put("fee3",map3.get("fee")); + Object data = map3.get("data"); + map.put("courseData",data); + + + // 赛事收入 + Double aDouble1 = competitionClient.queryFee(queryDataFee); + map.put("fee4",aDouble1); + + // 订场 + if(ids.size()==0){ + ids.add(-1); + } + LambdaQueryWrapper<SiteBooking> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(time)){ + String stime = time.split(" - ")[0]+" 00:00:00"; + String etime = time.split(" - ")[1]+" 23:59:59"; + vipPaymentLambdaQueryWrapper.between(SiteBooking::getInsertTime,stime,etime); + } + if(userIds.size()==0){ + userIds.add(-1); + } + vipPaymentLambdaQueryWrapper.in(SiteBooking::getAppUserId,userIds); + vipPaymentLambdaQueryWrapper.ne(SiteBooking::getStatus,0); + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + objects.add(2); + vipPaymentLambdaQueryWrapper.in(SiteBooking::getPayType,objects); + List<SiteBooking> list1 = siteBookingService.list(vipPaymentLambdaQueryWrapper); + double sum = list1.stream().mapToDouble(SiteBooking::getPayMoney).sum(); + map.put("fee5",sum); + + + List<Integer> collect = list1.stream().map(SiteBooking::getSiteId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + List<TSite> list3 = siteService.list(new LambdaQueryWrapper<TSite>().in(TSite::getId, collect)); + for (SiteBooking siteBooking : list1) { + for (TSite tSite : list3) { + if(siteBooking.getSiteId().equals(tSite.getId())){ + siteBooking.setType(tSite.getSiteTypeId()); + } + } + } + + + List<TSiteType> list2 = siteTypeService.list(); + + List<Map<String,Object>> mapList = new ArrayList<>(); + + for (TSiteType tSiteType : list2) { + HashMap<String, Object> map2 = new HashMap<>(); + map2.put("name",tSiteType.getName()); + double a =0; + for (SiteBooking siteBooking : list1) { + if(tSiteType.getId().equals(siteBooking.getType())){ + a += siteBooking.getPayMoney(); + } + } + map2.put("value",a); + mapList.add(map2); + } + map.put("siteData",mapList); + + + // 商品 门票 + HashMap<String, Object> map2 = pointMercharsClient.queryFee(queryDataFee); + Object all = map2.get("all"); + Object day = map2.get("day"); + Object month = map2.get("month"); + Object quarter = map2.get("quarter"); + Object year = map2.get("year"); + map.put("fee7",all); + map.put("dayone",day); + map.put("monthone",month); + map.put("quarterone",quarter); + map.put("yearone",year); + + return map; + } + @RequestMapping("/stuCourseData") + @ResponseBody + public Object stuCourseData() { + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + List<Integer> userIds = appUserClient.getUserPt(objects); + List<Map<String,Object>> list = coursePackagePaymentClient.queryCourseData(userIds); + ArrayList<Object> objects2 = new ArrayList<>(); + ArrayList<Object> objects3 = new ArrayList<>(); + for (Map<String, Object> map : list) { + Object name = map.get("name"); + Object value = map.get("value"); + objects2.add(name); + objects3.add(value); + } + HashMap<String, Object> map = new HashMap<>(); + map.put("data1",objects2); + map.put("data2",objects3); + return map; + } } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionAuditController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionAuditController.java index 08cb7a6..d4e0df7 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionAuditController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionAuditController.java @@ -84,9 +84,15 @@ List<TCity> list1 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId())); List<TStore> list2 = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getCityCode,competition.getCityCode())); + String[] split = competition.getImgs().split(","); + ArrayList<String> strings = new ArrayList<>(); + for (String s : split) { + strings.add(s); + } model.addAttribute("list",list); model.addAttribute("list1",list1); model.addAttribute("list2",list2); + model.addAttribute("imgs",strings); model.addAttribute("type",2); return PREFIX + "TCompetition_edit.html"; } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java index 82e23c4..5e49720 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java @@ -174,8 +174,9 @@ } competition.setAuditStatus(1); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - competition.setStartTime(format.parse(competition.getSTime())); - competition.setEndTime(format.parse(competition.getETime())); + SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); + competition.setStartTime(format1.parse(competition.getSTime())); + competition.setEndTime(format1.parse(competition.getETime())); competition.setRegisterEndTime(format.parse(competition.getREndTime())); competitionClient.add(competition); return new SuccessTip<>(); diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java index 644d529..ae4efa1 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java @@ -535,7 +535,7 @@ } TAppUser tAppUser = appUserClient.queryById(competition.getAppUserId()); Competition competition1 = competitionClient.queryById(competition.getCompetitionId()); - Store store = storeClient.getStoreById(Integer.valueOf(competition1.getStoreId())); + Store store = storeClient.getStoreById(Integer.valueOf(competition1.getStoreId().split(",")[0])); IncomeVO temp = new IncomeVO(); temp.setId(competition.getId().intValue()); temp.setProvince(tAppUser.getProvince()); diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java index 7c36464..a4caa3f 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java @@ -51,6 +51,7 @@ private String PREFIX = "/system/tGoods/"; + private String PREFIX1 = "/system/tGoodsAudit/"; @Resource @@ -85,6 +86,10 @@ public String index(Model model) { return PREFIX + "TGoods.html"; + } + @RequestMapping("/audit") + public String audit(Model model) { + return PREFIX1 + "TGoodsAudit.html"; } /** @@ -242,6 +247,8 @@ public String storePage(Model model) { return PREFIX + "TStoreList.html"; } + + @RequestMapping("/updateType") @ResponseBody public Object updateType(Long id) { @@ -516,6 +523,34 @@ System.out.println(ofSearch); return pointMercharsClient.getIntegralGoodsListOfSearch(ofSearch); } + @RequestMapping(value = "/listAudit") + @ResponseBody + public Object listOfIntegralGoodsAudit(String name, Integer type, Integer redemptionMethod , Integer userPopulation, Integer activeStatus) { + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(); + + IntegralGoodsOfSearch ofSearch = new IntegralGoodsOfSearch(); + ofSearch.setPage(page); + ofSearch.setName(name); + ofSearch.setType(type); + ofSearch.setRedemptionMethod(redemptionMethod); + ofSearch.setUserPopulation(userPopulation); + ofSearch.setActiveStatus(activeStatus); + return pointMercharsClient.getIntegralGoodsListOfSearchAudit(ofSearch); + } + + + + + + + + + @RequestMapping(value = "/updateTypeOne") + @ResponseBody + public Object updateTypeOne(Integer id, Integer type, String remark) { + Object o = pointMercharsClient.updateType(id + "_" + type + "_" + remark); + return SUCCESS_TIP; + } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java index 844dc34..cfad2a4 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java @@ -27,12 +27,14 @@ import com.dsh.guns.core.util.ToolUtil; import com.dsh.guns.modular.system.model.*; import com.dsh.guns.modular.system.service.*; +import com.dsh.guns.modular.system.util.HttpRequestUtil; import com.dsh.guns.modular.system.util.ResultUtil; import com.sun.org.apache.regexp.internal.RE; import groovyjarjarpicocli.CommandLine; import net.bytebuddy.asm.Advice; import org.aspectj.weaver.ast.Var; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @@ -42,10 +44,7 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.List; +import java.util.*; /** * 车辆管理控制器 @@ -408,8 +407,44 @@ site.setInsertTime(new Date()); site.setState(1); siteClient.addSite(site); + + HashMap<String, String> map = new HashMap<>(); + map.put("sign","0DB011836143EEE2C2E072967C9F4E4B"); + map.put("name",site.getName()); + map.put("short_name",site.getName()); + map.put("location",city); + map.put("address",store.getAddress()); + map.put("telephone",store.getPhone()); + map.put("linkman",""); + map.put("business_time","[{\"start_time\":\"00:00\",\"close_time\":\"23:59\"}]"); + map.put("logo",store.getCoverDrawing()); + map.put("remark",site.getIntroduce()); + map.put("lat",store.getLat()); + map.put("lng",store.getLon()); + HttpRequestUtil.postRequest("https://try.daowepark.com/v7/user_api/general/addSpace", map); + return ResultUtil.success("添加成功"); } + + public static void main(String[] args) { + + HashMap<String, String> map = new HashMap<>(); + map.put("sign","0DB011836143EEE2C2E072967C9F4E4B"); + map.put("name","测试场地"); + map.put("short_name","测试场地"); + map.put("location","成都"); + map.put("address","成都地址"); + map.put("telephone","17888888888"); + map.put("linkman","成都"); + map.put("business_time","[{\"start_time\":\"00:00\",\"close_time\":\"23:59\"}]"); + map.put("logo","https://we-park-life.oss-cn-beijing.aliyuncs.com/img/f325d449f2634855ad1fb0cc796465e8.png"); + map.put("remark","场地介绍"); + map.put("lat","30.670124"); + map.put("lng","103.929497"); + String s = HttpRequestUtil.postRequest("https://try.daowepark.com/v7/user_api/general/addSpace", map); + System.out.println(s); + } + /** * 编辑场地管理 */ diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SiteBooking.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SiteBooking.java index 1bcb6c4..d1071fa 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SiteBooking.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SiteBooking.java @@ -178,4 +178,7 @@ private Integer goType; private String money; + + @TableField(exist = false) + private Integer type; } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java index 566de82..86d56d8 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java @@ -1,7 +1,12 @@ package com.dsh.guns.modular.system.service; + import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.guns.modular.system.model.SiteBooking; -public interface ISiteBookingService extends IService<SiteBooking> { +/** + * @author zhibing.pu + * @date 2023/7/13 16:49 + */ +public interface ISiteBookingService extends IService<SiteBooking> { } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java index 1296a08..0967749 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java @@ -1,5 +1,6 @@ package com.dsh.guns.modular.system.service.impl; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.mapper.SiteBookingMapper; import com.dsh.guns.modular.system.model.SiteBooking; diff --git a/cloud-server-management/src/main/resources/mapper/SiteBookingMapper.xml b/cloud-server-management/src/main/resources/mapper/SiteBookingMapper.xml new file mode 100644 index 0000000..17e2248 --- /dev/null +++ b/cloud-server-management/src/main/resources/mapper/SiteBookingMapper.xml @@ -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.course.mapper.SiteBookingMapper"> + + +</mapper> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html index 9961f04..cb7fc3a 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html @@ -1,4 +1,4 @@ -@layout("/common/_container.html"){ + @layout("/common/_container.html"){ <div class="ibox float-e-margins"> <div class="ibox-content"> <div class="form-horizontal"> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html index 69f573c..8ccd20e 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html @@ -41,6 +41,19 @@ <div class="ibox float-e-margins"> <div class="ibox-content"> <div class="form-horizontal"> + + <input hidden id="day" value="${data.dayone}"> + <input hidden id="month" value="${data.monthone}"> + <input hidden id="quarter" value="${data.quarterone}"> + <input hidden id="year" value="${data.yearone}"> + <input hidden id="age1" value="${stuData.age1}"> + <input hidden id="age2" value="${stuData.age2}"> + <input hidden id="age3" value="${stuData.age3}"> + <input hidden id="age4" value="${stuData.age4}"> + <input hidden id="boy" value="${stuData.boy}"> + <input hidden id="girl" value="${stuData.girl}"> + + <div class="row"> <div class="col-sm-10"> <div style="height: 50px;box-sizing: border-box;background:#f3f3f4;line-height: 50px;border:1px solid;margin-bottom: 20px;width: auto"> @@ -48,6 +61,8 @@ <div id="div2" class='table1' onclick="getContent(2)" style="border-right: 1px solid #333;">运营统计</div> <div id="div3" class='table1' onclick="getContent(3)" style="border-right: 1px solid #333;">教学统计</div> </div> + + <div class="row" id="content1" style="margin-left: 100px;"> <div class="col-sm-11"> <div class="form-group"> @@ -71,21 +86,19 @@ </br> <div class="col-sm-3" style="width: 400px;display: flex"> <#TimeCon id="beginTime" name="时间段:" isTime="false"/> - <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/> + <#button name="搜索" icon="fa-search" clickFun="search1()"/> </div> </div> <div class="col-sm-10" style="width: 1500px" > </br> </br> - <span>会员费收入:</span> - <span>玩湃币充值收入:</span> - <span>课程收入:</span> - <span>活动收入:</span> - <span>订场收入:</span> - <span>赛事收入:</span> - <span>商品收入:</span> - <span>其他收入:</span> + <span>会员费收入:<label id="fee1">${data.fee1}</label></span> + <span>玩湃币充值收入:<label id="fee2">${data.fee2}</label></span> + <span>课程收入:<label id="fee3">${data.fee3}</label></span> + <span>活动/赛事收入:<label id="fee4">${data.fee4}</label></span> + <span>订场收入:<label id="fee5">${data.fee5}</label></span> + <span>商品收入:<label id="fee7">${data.fee7}</label></span> </br> </br> </br> @@ -239,10 +252,138 @@ </div> </div> </div> + + </div> <script src="${ctxPath}/modular/system/dataStatistics/echarts.min.js"></script> <script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script> <script> + function search1(){ + var time = $("#beginTime").val() + var ajax = new $ax(Feng.ctxPath + "/data/type1", function (data) { + + $("#fee1").text(data.fee1) + $("#fee2").text(data.fee2) + $("#fee3").text(data.fee3) + $("#fee4").text(data.fee4) + $("#fee5").text(data.fee5) + $("#fee7").text(data.fee7) + $("#day").val(data.dayone) + $("#month").val(data.monthone) + $("#quarter").val(data.quarterone) + $("#year").val(data.yearone) + + + + + + var chartDom = document.getElementById('cookieTicket'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '门票收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.dayone, name: '日卡' }, + { value: data.monthone, name: '月卡' }, + { value: data.quarterone, name: '季卡' }, + { value: data.yearone, name: '年卡' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + var chartDom = document.getElementById('cookieCourse'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '课程收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: data.courseData, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + var chartDom = document.getElementById('cookieBooking'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '订场收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: data.siteData, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + }, function (data) { + + }); + ajax.set("time",time); + ajax.start(); + } var ans = []; var weekX = []; var monthX = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]; @@ -661,6 +802,8 @@ } ] }; + + option6 = { tooltip: { trigger: 'axis' @@ -714,6 +857,9 @@ } ] }; + + + option7 = { tooltip: { trigger: 'axis' @@ -839,6 +985,41 @@ $("#ensure").show(); $("#nextB").hide(); } + + + if(type==3){ + var ajax = new $ax(Feng.ctxPath + "/data/stuCourseData", function (data) { + + console.log(data.data1) + var chartDom = document.getElementById('cookieTeachCourse'); + var myChart = echarts.init(chartDom); + var option; + + option = { + xAxis: { + type: 'category', + data: data.data1, + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: data.data2, + type: 'bar' + } + ] + }; + myChart.setOption(option); + }, function (data) { + + }); + ajax.start(); + } + + + + } function getContent1(type){ //设置点击字体颜色效果 @@ -873,12 +1054,12 @@ } } -</script> -<script> $(function(){ + var chartDom = document.getElementById('cookieTicket'); var myChart = echarts.init(chartDom); var option; + option = { title: { text: '门票收入', @@ -895,8 +1076,10 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '年票' }, - { value: 735, name: '亲子票' }, + { value: $("#day").val(), name: '日卡' }, + { value: $("#month").val(), name: '月卡' }, + { value: $("#quarter").val(), name: '季卡' }, + { value: $("#year").val(), name: '年卡' }, ], emphasis: { @@ -912,8 +1095,24 @@ myChart.setOption(option); }); $(function(){ + var courseData = "${data.courseData}" + courseData =courseData.replace("[","").replace("]","") + courseData = courseData.split('},') + + var a=[]; + for (let j = 0; j <courseData.length; j++) { + if(j<courseData.length-1){ + var d = courseData[j].replace("{","").replace("}","").split(",") + let obj ={ + name:d[0].split("=")[1], + value:d[1].split("=")[1] + } + a.push(obj) + } + } var chartDom = document.getElementById('cookieCourse'); - var myChart = echarts.init(chartDom); + var myChart = echarts.init(chartDom) + var option; option = { title: { @@ -930,12 +1129,7 @@ name: 'Access From', type: 'pie', radius: '50%', - data: [ - { value: 1048, name: '篮球课' }, - { value: 735, name: '羽毛课' }, - { value: 735, name: '足球课' }, - - ], + data: a, emphasis: { itemStyle: { shadowBlur: 10, @@ -949,6 +1143,22 @@ myChart.setOption(option); }); $(function(){ + var courseData = "${data.siteData}" + + courseData =courseData.replace("[","").replace("]","") + courseData = courseData.split('},') + + var a=[]; + for (let j = 0; j <courseData.length; j++) { + if(j<courseData.length-1){ + var d = courseData[j].replace("{","").replace("}","").split(",") + let obj ={ + name:d[0].split("=")[1], + value:d[1].split("=")[1] + } + a.push(obj) + } + } var chartDom = document.getElementById('cookieBooking'); var myChart = echarts.init(chartDom); var option; @@ -967,12 +1177,7 @@ name: 'Access From', type: 'pie', radius: '50%', - data: [ - { value: 1048, name: '激战' }, - { value: 735, name: '篮球场' }, - { value: 735, name: '足球场' }, - - ], + data: a, emphasis: { itemStyle: { shadowBlur: 10, @@ -1005,8 +1210,10 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '30-35' }, - { value: 735, name: '12-18' }, + { value: 1048, name: '0-7岁' }, + { value: 735, name: '8-10岁' }, + { value: 735, name: '11-12岁' }, + { value: 735, name: '13岁以上' }, ], emphasis: { @@ -1041,8 +1248,10 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '30-35' }, - { value: 735, name: '12-18' }, + { value: $("#age1").val(), name: '0-7岁' }, + { value: $("#age2").val(), name: '8-10岁' }, + { value:$("#age3").val(), name: '11-12岁' }, + { value: $("#age4").val(), name: '13岁以上' }, ], emphasis: { @@ -1113,8 +1322,8 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '男' }, - { value: 735, name: '女' }, + { value: $("#boy").val(), name: '男' }, + { value: $("#girl").val(), name: '女' }, ], emphasis: { @@ -1151,27 +1360,12 @@ }; myChart.setOption(option); }); - $(function(){ - var chartDom = document.getElementById('cookieTeachCourse'); - var myChart = echarts.init(chartDom); - var option; - option = { - xAxis: { - type: 'category', - data: ['足球课', '篮球课', '羽毛球课', '网球课', '排球课'] - }, - yAxis: { - type: 'value' - }, - series: [ - { - data: [120, 200, 150, 80, 70, 110, 130], - type: 'bar' - } - ] - }; - myChart.setOption(option); + function stuCourseData(){ + + } + $(function(){ + }); </script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html index dec58f2..b49d32e 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html @@ -1,5 +1,47 @@ @layout("/common/_container.html"){ <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script> +<style> + .avatar-uploader .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + height: 100px; + width: 100px; + overflow: hidden; + } + + .avatar-uploader .el-upload:hover { + border-color: #409EFF; + } + .avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 100px; + height: 100px; + line-height: 100px; + margin-top: 32px; + text-align: center; + } + .avatar { + width: 100px; + height: 100px; + display: block; + } + + .col-sm-12 { + margin-top: 20px; + } + + .col-sm-12 select { + height: 33px; + } + #app1{ + margin-left: 255px; + } + + +</style> <div class="ibox float-e-margins"> <div class="ibox-content"> @@ -28,7 +70,7 @@ <div class="form-group" id="shop"> <label class="col-sm-3 control-label">举办门店:</label> <div class="col-sm-9"> - <select class="form-control" id="shopId" name="shopId" multiple> + <select class="form-control" id="shopId" name="shopId"> <option value="">选择门店</option> </select> </div> @@ -114,7 +156,26 @@ </div> <#avatar id="coverDrawing" name="赛事封面(推荐像素:210*280px):" /> - <#avatar id="imgs" name="赛事图片(推荐像素:780*440px):" /> + <div class="row" id="app1"> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*赛事活动图片(请上传不超过五张图片): </label> + <div class="col-sm-2" style="width: 100%;margin-left: 11%;margin-top: 1%"> + <el-upload + :limit="5" + class="avatar-uploader" + action="/tCouponManage/uploadPic" + list-type="picture-card" + accept="." + :on-success="handleAvatarSuccess" + :on-remove="handleRemove"> + <i class="el-icon-plus"></i> + </el-upload> + <el-dialog :visible.sync="dialogVisible"> + <img width="100%" :src="imageUrl1" alt=""> + </el-dialog> + </div> + </div> + </div> <#avatar id="registrationNotes" name="报名须知(推荐像素:宽780px):" /> </div> @@ -132,26 +193,55 @@ </div> </div> <script src="${ctxPath}/modular/system/tCompetition/tCompetition_info.js"></script> -<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css"> -<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>--> -<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script> +<script src="${ctxPath}/js/vue/vue.js"></script> +<script src="${ctxPath}/js/elementui/index.js"></script> +<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css"> <script> - $(document).ready(function() { - $('#shopId').select2({ - multiple: true, - closeOnSelect: false - }); - }); - - laydate.render({ - elem: '#startTime' - ,type:"datetime" + var vue2 = new Vue({ + el: '#app1', + props: { + // 数量限制 + limit: { + type: Number, + default: 2 + }, + }, + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + console.log(TCarInfoDlg.goodsPicArray1) + TCarInfoDlg.goodsPicArray1.push(file); + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + TCarInfoDlg.goodsPicArray1 = TCarInfoDlg.goodsPicArray1.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + }, }); laydate.render({ elem: '#endTime' - ,type:"datetime" + ,type:"date" }); laydate.render({ + elem: '#startTime' + ,type:"date" + }); + + laydate.render({ elem: '#registerEndTime' ,type:"datetime" }); diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html index 83fdac1..61b2a8c 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html @@ -1,5 +1,47 @@ @layout("/common/_container.html"){ <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script> +<style> + .avatar-uploader .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + height: 100px; + width: 100px; + overflow: hidden; + } + + .avatar-uploader .el-upload:hover { + border-color: #409EFF; + } + .avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 100px; + height: 100px; + line-height: 100px; + margin-top: 32px; + text-align: center; + } + .avatar { + width: 100px; + height: 100px; + display: block; + } + + .col-sm-12 { + margin-top: 20px; + } + + .col-sm-12 select { + height: 33px; + } + #app1{ + margin-left: 255px; + } + + +</style> <div class="ibox float-e-margins"> <div class="ibox-content"> @@ -131,7 +173,27 @@ </div> <#avatar id="coverDrawing" name="赛事封面(推荐像素:210*280px):" avatarImg="${item.coverDrawing}" /> - <#avatar id="imgs" name="赛事图片(推荐像素:780*440px):" /> + <div class="row" id="app1"> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*实景图片(请上传不超过五张图片): </label> + <div class="col-sm-2" style="width: 100%;margin-left: 11%;margin-top: 1%"> + <el-upload + :limit="5" + class="avatar-uploader" + action="/tCouponManage/uploadPic" + list-type="picture-card" + accept="." + :file-list="imageUrl2" + :on-success="handleAvatarSuccess" + :on-remove="handleRemove"> + <i class="el-icon-plus"></i> + </el-upload> + <el-dialog :visible.sync="dialogVisible"> + <img width="100%" :src="imageUrl2" alt=""> + </el-dialog> + </div> + </div> + </div> <#avatar id="registrationNotes" name="报名须知(推荐像素:宽780px):" avatarImg="${item.registrationNotes}"/> </div> @@ -151,7 +213,66 @@ </div> </div> <script src="${ctxPath}/modular/system/tCompetition/tCompetition_info.js"></script> +<script src="${ctxPath}/js/vue/vue.js"></script> +<script src="${ctxPath}/js/elementui/index.js"></script> +<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css"> <script> + let id = "${item.imgs}" + let obj = [] + + var vue2 = new Vue({ + el: '#app1', + props: { + // 数量限制 + limit: { + type: Number, + default: 2 + }, + }, + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + imageUrl2: [], + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + file.url =file.response + TCarInfoDlg.goodsPicArray1.push(file); + }, + changeImg(){ + var i = id.split(",") + for (let j = 0; j <i.length; j++) { + let obj={ + fileName:i[j], + uuid:i[j], + url:i[j], + response:i[j], + } + this.imageUrl2.push(obj) + + } + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + TCarInfoDlg.goodsPicArray1 = TCarInfoDlg.goodsPicArray1.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + this.changeImg() + TCarInfoDlg.goodsPicArray1 = this.imageUrl2 + }, + }); + + window.onload = function() { if($("#type").val()==1){ $("#types").html("未开始").css("color","goldenrod") diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetitionAudit/TCompetition_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetitionAudit/TCompetition_edit.html index 9d8a0cf..9f0ca04 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetitionAudit/TCompetition_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetitionAudit/TCompetition_edit.html @@ -1,4 +1,4 @@ -@layout("/common/_container.html"){ + @layout("/common/_container.html"){ <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script> <div class="ibox float-e-margins"> <div class="ibox-content"> @@ -131,7 +131,16 @@ </div> <#avatar id="coverDrawing" name="赛事封面(推荐像素:210*280px):" avatarImg="${item.coverDrawing}" /> - <#avatar id="imgs" name="赛事图片(推荐像素:780*440px):" /> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">赛事图片(推荐像素:780*440px):</label> + <div class="col-sm-4"> + <div id="imgsPreId"> + @for(i in imgs){ + <img width="100px" height="100px" id="img" src="${i}"> + @} + </div> + </div> + </div> <#avatar id="registrationNotes" name="报名须知(推荐像素:宽780px):" avatarImg="${item.registrationNotes}"/> <div class="form-group"> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_detail_one.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_detail_one.html index e0e7f55..41ec1ba 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_detail_one.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_detail_one.html @@ -117,7 +117,7 @@ <#input id="quantityIssued" name="*兑换地点:" type="text" value="${item.exchangeArea}" readonly="true" /> - @if(item.useScope == 2){ + @if(item.useScope == 3){ <table class="table table-bordered" style="width: 70%;margin-left: 228px;" > <thead> <tr> @@ -134,18 +134,19 @@ </table> @} - @if(item.useScope == 3){ + @if(item.useScope == 2){ <table class="table table-bordered" style="width: 70%;margin-left: 228px;" > <thead> <tr> - <td>所在省市</td> - <td>所属账号</td> - <td>门店名称</td> + <td>所在省</td> + <td>所在市</td> </tr> </thead> @for(c in city){ + <tr> <td>${c.num1}</td> <td>${c.num2}</td> + </tr> @} </table> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TCity_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TCity_edit.html new file mode 100644 index 0000000..1d8f66c --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TCity_edit.html @@ -0,0 +1,98 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + + <div class="form-horizontal" id="carInfoForm"> + <input hidden id="id" value="${item.id}"> + <div class="form-group" id="provinceCode"> + <label class="col-sm-3 control-label">所在省:</label> + <div class="col-sm-9"> + <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange(this)"> + <option value="">选择省</option> + @for(obj in list){ + <option value="${obj.code}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option> + <option value="${obj.code}">${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group" id="cityCode"> + <label class="col-sm-3 control-label">所在市:</label> + <div class="col-sm-9"> + <select class="form-control" id="cCode" name="cCode"> + <option value="">选择市</option> + @for(obj in list1){ + <option value="${obj.code}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <#input id="name" name="管理员姓名" type="text" value="${item.name}"/> + <#input id="phone" name="管理员手机号" type="text" value="${item.phone}"/> + + + </div> + <div class="row btn-group-m-t"> + <div class="col-sm-10 col-sm-offset-5"> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.editSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> + </div> + </div> + + </div> +</div> +<script src="${ctxPath}/modular/system/tCity/tCity_info.js"></script> +<script> + laydate.render({ + elem: '#annualInspectionTime' + ,lang:"en" + }); + laydate.render({ + elem: '#commercialInsuranceTime' + ,lang:"en" + }); + laydate.render({ + elem: '#certifyDateA' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStart' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStop' + ,lang:"en" + }); + laydate.render({ + + elem: '#certifyDateB' + ,lang:"en" + }); + laydate.render({ + elem: '#nextFixDate' + ,lang:"en" + }); + laydate.render({ + elem: '#GPSInstallDate' + ,lang:"en" + }); + laydate.render({ + elem: '#registerDate' + ,lang:"en" + }); +</script> +<script type="application/javascript"> + $(function() { + var companyType = $("input[name='companyType']:checked").val(); + if (1 == companyType){ + $(".companyDiv").hide(); + } else if (2 == companyType){ + $(".companyDiv").show(); + } + + TCarInfoDlg.zcServerClick(); + TCarInfoDlg.kcServerClick(); + + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoodsAudit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoodsAudit.html new file mode 100644 index 0000000..8c5f2a7 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoodsAudit.html @@ -0,0 +1,66 @@ +@layout("/common/_container.html"){ +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + + <div class="ibox-title"> + <h5>门票审核管理</h5> + </div> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <div class="row"> + + <div class="col-sm-3"> + <#NameCon id="name" name="门票名称" /> + </div> + <div class="col-sm-3"> + <#SelectCon id="type" name="门票类型"> + <option value="">全部</option> + <option value="1">日卡</option> + <option value="2">月卡</option> + <option value="3">季卡</option> + <option value="4">年卡</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#SelectCon id="redemptionMethod" name="兑换方式"> + <option value="">全部</option> + <option value="1">积分</option> + <option value="2">现金+积分</option> + <option value="3">现金</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#SelectCon id="userPopulation" name="用户人群"> + <option value="">全部</option> + <option value="1">全部用户</option> + <option value="2">年度会员</option> + <option value="3">已有学员用户</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#SelectCon id="activeStatus" name="审核状态"> + <option value="">全部</option> + <option value="2">待审核</option> + <option value="3">已拒绝</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#button name="搜索" icon="fa-search" clickFun="TPointProducts.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TPointProducts.resetSearch()" space="true"/> + </div> + </div> + <div class="hidden-xs" id="TPointProductsTableToolbar" role="group"> + <#button name="审核" icon="fa-remove" clickFun="TPointProducts.payDetail()" space="true"/> + <#button name="查看详情" icon="fa-remove" clickFun="TPointProducts.detail()" space="true"/> + </div> + <#table id="TPointProductsTable"/> + </div> + </div> + </div> +</div> +</div> +</div> +<script src="${ctxPath}/modular/system/tGoodsAudit/tGoods.js"></script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_add.html new file mode 100644 index 0000000..e64b2c4 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_add.html @@ -0,0 +1,569 @@ +@layout("/common/_container.html"){ +<style> + .avatar-uploader .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + height: 100px; + width: 100px; + overflow: hidden; + } + + .avatar-uploader .el-upload:hover { + border-color: #409eff; + } + .avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 100px; + height: 100px; + line-height: 100px; + margin-top: 34px; + text-align: center; + } + .avatar { + width: 100px; + height: 100px; + display: block; + } + + .col-sm-12 { + margin-top: 20px; + } + + .col-sm-12 select { + height: 33px; + } +</style> +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal" id="carInfoForm"> + <div class="form-group"> + <label class="col-sm-3 control-label">商品类型:</label> + <div class="col-sm-9"> + <input type="radio" name="type" value="1" checked onclick="updateType(1)"> 实体商品 + <input type="radio" name="type" value="2"onclick="updateType(2)" > 课包商品 + <input type="radio" name="type" value="3" onclick="updateType(1)"> 门票商品 + </div> + </div> + <div id="b1"> + <#input id="name" name="商品名称" type="text"/> + <div class="form-group" id="ticket" hidden> + <label class="col-sm-3 control-label">门票类型:</label> + <div class="col-sm-9"> + <input type="radio" name="cardType" value="1" checked> 日卡 + <input type="radio" name="cardType" value="2"> 月卡 + <input type="radio" name="cardType" value="3" > 季卡 + <input type="radio" name="cardType" value="4" > 年卡 + </div> + </div> + <#input id="price" name="原价" type="text"/> + <div class="form-group"> + <label class="col-sm-3 control-label">兑换方式:</label> + <div class="col-sm-9"> + <input type="radio" name="redemptionMethod" value="1" onclick="updateMethod(3)" checked> 积分 + <input type="radio" name="redemptionMethod" value="2" onclick="updateMethod(4)"> 现金+积分 + <input type="radio" name="redemptionMethod" value="3" onclick="updateMethod(5)"> 现金 + </div> + </div> + + + <div class="form-group" id="y1" hidden> + <label class="col-sm-3 control-label">所需现金:</label> + <div class="col-sm-9"> + <input class="form-control" id="cash" name="cash" type="text"> + + </div> + </div> + <div class="form-group" id="y2"> + <label class="col-sm-3 control-label">所需积分:</label> + <div class="col-sm-9"> + <input class="form-control" id="integral" name="integral" type="text"> + + </div> + </div> + + <#avatar id="cover" name="商品封面" /> + + <div class="row" id="app" > + <div class="col-sm-6" style="width: 100%"> + <div class="form-group"> + <label class="col-sm-3 control-label" style="width: 15%;margin-left: 7%">*商品图片(请上传不超过五张图片): </label> + <div class="col-sm-2" style="width: 100%;margin-left: 12%;margin-top: 1%"> + <el-upload + :limit="5" + class="avatar-uploader" + action="/tCouponManage/uploadPic" + list-type="picture-card" + accept=".jpg,.jpeg,.png,.JPG,.JPEG" + :on-success="handleAvatarSuccess" + :on-remove="handleRemove"> + <i class="el-icon-plus"></i> + </el-upload> + <el-dialog :visible.sync="dialogVisible"> + <img width="100%" :src="imageUrl1" alt=""></el-dialog> + </div> + </div> + + </div> + </div> + + + <div class="form-group"> + <label class="col-sm-3 control-label">用户人群:</label> + <div class="col-sm-9"> + <input type="radio" name="userPopulation" value="1" checked> 全部用户 + <input type="radio" name="userPopulation" value="2" > 年度会员 + <input type="radio" name="userPopulation" value="3" > 已有学员用户 + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">发放数量:</label> + <div class="col-sm-9"> + <input class="form-control" id="quantityIssued" name="quantityIssued" type="text"> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">限领数量:</label> + <div class="col-sm-9"> + <input class="form-control" id="pickUpQuantity" name="pickUpQuantity" type="text"> + </div> + </div> + <#input id="startTime" name="有效期" type="text"/> + + <div class="row" id="belongsCon" > + <div class="form-group"> + <div class="form-group"> + <div class="initialLevel col-sm-12 control-label form-group"> + <label class="col-sm-3">*适用范围: </label> + <div class="col-sm-2" id="belongsNationwide" > + <input class="col-sm-1" onclick="scopeOfApplication1()" name="company" type="radio" + value="1" checked style="margin-top: 10px"/> + <label class="col-sm-1" style="width: 38%;margin-top: 7px">全国通用</label> + </div> + <div class="col-sm-2" id="belongsCity" > + <input class="col-sm-1" name="company" onclick="scopeOfApplication2()" type="radio" + value="2" style="margin-top: 10px"/> + <label class="col-sm-1" style="width: 38%;margin-top: 7px">指定城市</label> + </div> + <div class="col-sm-2" id="belongsStore" > + <input class="col-sm-1" name="company" onclick="scopeOfApplication3()" type="radio" + value="3" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px"/> + <label class="col-sm-1" style="width: 38%;margin-top: 6px;">指定门店</label> + </div> + </div> + </div> + + </div> + </div> + + <div class="row" id="citySelect" hidden="hidden"> + <div class="form-group"> + <div class="form-group"> + <label class="col-sm-3 control-label">*指定城市: </label> + <div class="col-sm-9 control-label"> + <select class="col-sm-1" id="provinceData" style="margin-top: 1%;width: 25%" onchange="changeCity(null)"> + <option value="">请选择</option> + </select> + <label class="col-sm-1" style="width: 9%;margin-top: 7px">省</label> + <select class="col-sm-1" style="margin-top: 1%;width: 25%" id="cityData"> + <option value="">请选择</option> + </select> + <label class="col-sm-1" style="width: 7%;margin-top: 7px">市</label> + <label name="addBranch" class="col-sm-1" onclick="TGoodsInfoDlg.addBranch()" style="border: 0px;cursor: pointer;margin-top: 1%"><i class="fa fa-plus-circle"></i></label> + </div> + <div id="cityDemo"></div> + </div> + + </div> + </div> + + <div class="row" id="storeSelect" hidden="hidden"> + <div class="form-group"> + <div class="form-group"> + <div class="col-sm-12"> + <label class="col-sm-3 control-label">*指定门店: </label> + <button onclick="storeList()" + style="height: 22px;width: 82px;background-color: #4a8ff1;color: white;z-index: 15;position:relative;border: none;margin-top: 1%"> + 选择门店 + </button> + </div> + <div class="col-sm-12" style="margin-left: -57px;margin-top: 20px"> + <table class="table table-bordered" style="width: 70%;margin-left: 228px;" id="storeTable"> + <thead> + <tr> + <td>所在省市</td> + <td>所属账号</td> + <td>门店名称</td> + <td>操作</td> + </tr> + </thead> + <tbody id="coun"></tbody> + </table> + </div> + </div> + + </div> + </div> + <div class="form-group" style="margin-left:262px"> + <label class="col-sm-1 control-label">兑换说明:</label> + <div class="col-sm-5"> + <textarea type="text/plain" id="editor" style="height: 300px;width: 800px;"></textarea> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">排序:</label> + <div class="col-sm-9"> + <input class="form-control" id="sort" name="sort" type="text"> + + </div> + </div> + </div> + + <div id="b2" hidden> + + <div class="form-group" id="provinceCode"> + <label class="col-sm-3 control-label">所在省:</label> + <div class="col-sm-9"> + <select class="form-control" id="pCode" name="pCode" onchange="TGoodsInfoDlg.oneChange(this)"> + <option value="">选择省</option> + @for(obj in list){ + <option value="${obj.code}">${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group" id="cityCode"> + <label class="col-sm-3 control-label">所在市:</label> + <div class="col-sm-9"> + <select class="form-control" id="cCode" name="cCode" onchange="TGoodsInfoDlg.storeChange(this)"> + <option value="">选择市</option> + </select> + </div> + </div> + + <div class="form-group" > + <label class="col-sm-3 control-label">所属门店:</label> + <div class="col-sm-9"> + <select class="form-control" id="storeId" name="storeId"> + <option value="">选择门店</option> + </select> + </div> + </div> + + <div class="form-group" > + <label class="col-sm-3 control-label">课包类型:</label> + <div class="col-sm-9"> + <select class="form-control" id="coursePackageTypeId" name="pCode" onchange="TGoodsInfoDlg.packageChange(this)"> + <option value="">选择课包类型</option> + @for(obj in courseType){ + <option value="${obj.id}">${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group" > + <label class="col-sm-3 control-label">课包名称:</label> + <div class="col-sm-9"> + <select class="form-control" id="coursePackageId" name="coursePackageId" onchange="TGoodsInfoDlg.timeChange(this)"> + <option value="">选择课包</option> + </select> + </div> + </div> + + <div class="form-group" > + <label class="col-sm-3 control-label">课时数:</label> + <div class="col-sm-9"> + <select class="form-control" id="coursePackageConfigId" name="coursePackageConfigId"> + <option value="">选择课时数</option> + </select> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">原价:</label> + <div class="col-sm-9"> + <input class="form-control" id="price1" name="price" type="text"> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">兑换方式:</label> + <div class="col-sm-9"> + <input type="radio" name="redemptionMethod" value="1" checked onclick="updateMethod(1)" > 积分 + <input type="radio" name="redemptionMethod" value="2" onclick="updateMethod(2)"> 现金+积分 + </div> + </div> + + <div class="form-group" id="y3" hidden> + <label class="col-sm-3 control-label">所需现金:</label> + <div class="col-sm-9"> + <input class="form-control" id="cash1" name="cash" type="text"> + + </div> + </div> + <div class="form-group" id="y4"> + <label class="col-sm-3 control-label">所需积分:</label> + <div class="col-sm-9"> + <input class="form-control" id="integral1" name="integral" type="text"> + + </div> + </div> + + + <#avatar id="cover1" name="*商品封面" /> + <div class="row" id="app1" > + <div class="col-sm-6" style="width: 100%"> + <div class="form-group"> + <label class="col-sm-3 control-label" style="width: 15%;margin-left: 7%">*商品图片(请上传不超过五张图片): </label> + <div class="col-sm-2" style="width: 100%;margin-left: 12%;margin-top: 1%"> + <el-upload + :limit="5" + class="avatar-uploader" + action="/tCouponManage/uploadPic" + list-type="picture-card" + accept=".jpg,.jpeg,.png,.JPG,.JPEG" + :on-success="handleAvatarSuccess" + :on-remove="handleRemove"> + <i class="el-icon-plus"></i> + </el-upload> + <el-dialog :visible.sync="dialogVisible"> + <img width="100%" :src="imageUrl1" alt=""></el-dialog> + </div> + </div> + + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">用户人群:</label> + <div class="col-sm-9"> + <input type="radio" name="userPopulation" value="1" checked> 全部用户 + <input type="radio" name="userPopulation" value="2" > 年度会员 + <input type="radio" name="userPopulation" value="3" > 已有学员用户 + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">发放数量:</label> + <div class="col-sm-9"> + <input class="form-control" id="quantityIssued1" name="quantityIssued" type="text"> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">限领数量:</label> + <div class="col-sm-9"> + <input class="form-control" id="pickUpQuantity1" name="pickUpQuantity" type="text"> + </div> + </div> + <#input id="startTime1" name="有效期" type="text"/> + + <div class="form-group" style="margin-left:262px"> + <label class="col-sm-1 control-label">兑换说明:</label> + <div class="col-sm-5"> + <textarea type="text/plain" id="editor1" style="height: 300px;width: 800px;"></textarea> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">排序:</label> + <div class="col-sm-9"> + <input class="form-control" id="sort1" name="sort" type="text"> + + </div> + </div> + + </div> + + + </div> +</div> + +<div class="row btn-group-m-t"> + <div class="col-sm-10 col-sm-offset-5"> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TGoodsInfoDlg.addSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TGoodsInfoDlg.close()"/> + </div> +</div> + + </div> + +<script src="${ctxPath}/js/vue/vue.js"></script> +<script src="${ctxPath}/js/elementui/index.js"></script> +<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css"> +<script src="${ctxPath}/modular/system/tGoods/tGoods_info.js"></script> +<script src="${ctxPath}/modular/system/tGoods/TStoreInfo.js"></script> +<script> + laydate.render({ + elem: '#startTime', + range: true + }); + laydate.render({ + elem: '#startTime1', + range: true + }); + function updateMethod(e) { + console.log(e) + if(e==1){ + $("#y3").hide() + $("#y4").show() + }else if(e==2){ + $("#y4").show() + $("#y3").show() + }else if(e==3){ + $("#y1").hide() + $("#y2").show() + }else if(e==4){ + $("#y1").show() + $("#y2").show() + }else if(e==5) { + $("#y2").hide() + $("#y1").show() + } + + } + let i =1; + function updateType(e) { + + if(e==2){ + $("#b1").hide() + $("#b2").show() + if(i==1){ + var drivingLicensePhoto = new $WebUpload("cover1"); + drivingLicensePhoto.setUploadBarId("progressBar"); + drivingLicensePhoto.init(); + i++; + } + $("#ticket").hide() + }else { + $("#b2").hide() + $("#b1").show() + $("#ticket").show() + } + } + + + + function changeCity(n){ + + var provinceSelect = null; + if (n === undefined || n === null || n === ''){ + provinceSelect = document.getElementById("provinceData"); + }else { + provinceSelect = document.getElementById("provinceData"+n); + } + + var citySelect = null; + if (n === undefined || n === null || n === ''){ + citySelect = document.getElementById("cityData"); + }else { + citySelect = document.getElementById("cityData"+n); + } + + var selectedProvince = provinceSelect.value; + // 清空城市下拉框 + citySelect.innerHTML = '<option value="">请选择</option>'; + if (selectedProvince === "") { + return; + } + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/getCity", function(data){ + data.forEach(province => { + var option = document.createElement("option"); + option.value = province.id; // 根据你的数据结构确定省份的id字段 + option.text = province.name; // 根据你的数据结构确定省份的name字段 + citySelect.appendChild(option); + }); + },function(data){ + console.log('data:',data) + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set('province',selectedProvince); + ajax.start(); + } + + /** + * 全国通用 + */ + function scopeOfApplication1() { + $("#storeSelect").hide(); + $("#citySelect").hide(); + } + /** + * 指定城市 + */ + function scopeOfApplication2() { + $("#storeSelect").hide(); + $("#citySelect").show(); + } + /** + * 指定门店 + */ + function scopeOfApplication3() { + $("#storeSelect").show(); + $("#citySelect").hide(); + } + + + + + var vue2 = new Vue({ + el: '#app', + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + TGoodsInfoDlg.goodsPicArray.push(file); + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + TGoodsInfoDlg.goodsPicArray = TGoodsInfoDlg.goodsPicArray.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + }, + }); + var vue2 = new Vue({ + el: '#app1', + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + TGoodsInfoDlg.goodsPicArray1.push(file); + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + TGoodsInfoDlg.goodsPicArray = TGoodsInfoDlg.goodsPicArray.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + }, + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_detail_one.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_detail_one.html new file mode 100644 index 0000000..41ec1ba --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_detail_one.html @@ -0,0 +1,208 @@ +@layout("/common/_container.html"){ +<style> + .avatar-uploader .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + height: 100px; + width: 100px; + overflow: hidden; + display: inline-block; + } + + .avatar-uploader .el-upload:hover { + border-color: #409eff; + } + + .avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 100px; + height: 100px; + line-height: 110px; + margin-top: 40px; + text-align: center; + } + + .avatar { + width: 100px; + height: 100px; + display: block; + } + + .col-sm-12 { + margin-top: 20px; + } + + .col-sm-12 select { + height: 33px; + } +</style> +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal" id="carInfoForm"> + <div id="b1"> + <#input id="name" name="*商品名称:" type="text" value="${item.name}" readonly="true" /> + + <#input id="cover" name="*原价:" avatarImg="${item.price}" readonly="true" /> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*兑换方式:</label> + <div class="col-sm-4"> + @if(exchangeMethod == 1){ + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="1" checked style="margin-top: 10px" disabled/> + <label class="col-sm-1" style="margin-left: -15px;width: 16%;margin-top: 7px">全部用户</label> + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="2" style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px" disabled/> + <label class="col-sm-1" style="width: 16%;margin-top: 7px">年度会员</label> + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="3" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px" disabled/> + <label class="col-sm-1" style="width: 18%;margin-top: 5px">已有学员用户</label> + @} + + @if(exchangeMethod == 2){ + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="1" style="margin-top: 10px" disabled/> + <label class="col-sm-1" style="margin-left: -15px;width: 16%;margin-top: 7px">全部用户</label> + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="2" checked style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px" disabled/> + <label class="col-sm-1" style="width: 16%;margin-top: 7px">年度会员</label> + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="3" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px" disabled/> + <label class="col-sm-1" style="width: 18%;margin-top: 5px">已有学员用户</label> + @} + + @if(exchangeMethod == 3){ + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="1" style="margin-top: 10px" disabled/> + <label class="col-sm-1" style="margin-left: -15px;width: 16%;margin-top: 7px">全部用户</label> + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="2" style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px" disabled/> + <label class="col-sm-1" style="width: 16%;margin-top: 7px">年度会员</label> + <input class="col-sm-1 control-label" name="userGroup" type="radio" + value="3" checked style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px" disabled/> + <label class="col-sm-1" style="width: 18%;margin-top: 5px">已有学员用户</label> + @} + + </div> + </div> + + <#input id="cover" name="*所需现金:" avatarImg="${item.cash}" readonly="true" /> + <#input id="cover" name="*所需积分:" avatarImg="${item.integral}" readonly="true" /> + + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*商品封面:</label> + <div class="col-sm-4"> + <img height="100px" width="100px" src="${item.cover}"> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*商品图片:</label> + <div class="col-sm-4"> + @if(pictures != null){ + @for(im in pictures){ + <img height="100px" width="100px" src="${im}"> + @} + @} + </div> + </div> + + <#input id="quantityIssued" name="*用户人群:" type="text" value="${item.userPopulation}" readonly="true" /> + <#input id="quantityIssued" name="*发放数量:" type="text" value="${item.quantityIssued}" readonly="true" /> + <#input id="quantityIssued" name="*限领数量:" type="text" value="${item.pickUpQuantity}" readonly="true" /> + <#input id="quantityIssued" name="*已兑换数量:" type="text" value="${item.hasPicked}" readonly="true" /> + <#input id="quantityIssued" name="*有效期:" type="text" value="${item.validTime}" readonly="true" /> + + <#input id="quantityIssued" name="*兑换地点:" type="text" value="${item.exchangeArea}" readonly="true" /> + + @if(item.useScope == 3){ + <table class="table table-bordered" style="width: 70%;margin-left: 228px;" > + <thead> + <tr> + <td>所在省市</td> + <td>所属账号</td> + <td>门店名称</td> + </tr> + </thead> + @for(s in store){ + <td>${s.num1}</td> + <td>${s.num2}</td> + <td>${s.num3}</td> + @} + </table> + @} + + @if(item.useScope == 2){ + <table class="table table-bordered" style="width: 70%;margin-left: 228px;" > + <thead> + <tr> + <td>所在省</td> + <td>所在市</td> + </tr> + </thead> + @for(c in city){ + <tr> + <td>${c.num1}</td> + <td>${c.num2}</td> + </tr> + @} + </table> + @} + <div class="form-group" style="margin-left:262px"> + <label class="col-sm-3 control-label">兑换说明:</label> + <div class="col-sm-4"> + <textarea type="text/plain" id="editor" style="height: 300px;width: 800px;" readonly>${item.redemptionInstructions}</textarea> + </div> + </div> + <#input id="quantityIssued" name="*排序:" type="text" value="${item.sort}" readonly="true" /> + + </div> + </div> + </div> + + <div class="row btn-group-m-t"> + <div class="col-sm-10 col-sm-offset-5"> + <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TGoodsInfoDlg.close()"/> + </div> + </div> + +</div> + +</div> +</div> +<script src="${ctxPath}/js/vue/vue.js"></script> +<script src="${ctxPath}/js/elementui/index.js"></script> +<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css"> +<script src="${ctxPath}/modular/system/tGoods/tGoods_info.js"></script> +<script> + var vue2 = new Vue({ + el: '#app', + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + TGoodsInfoDlg.goodsPicArray.push(file.response); + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + TGoodsInfoDlg.goodsPicArray = TGoodsInfoDlg.goodsPicArray.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + }, + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_detail_two.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_detail_two.html new file mode 100644 index 0000000..7c62805 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_detail_two.html @@ -0,0 +1,396 @@ +@layout("/common/_container.html"){ +<style> + .avatar-uploader .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + height: 100px; + width: 100px; + overflow: hidden; + } + + .avatar-uploader .el-upload:hover { + border-color: #409eff; + } + .avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 100px; + height: 100px; + line-height: 100px; + margin-top: 34px; + text-align: center; + } + .avatar { + width: 100px; + height: 100px; + display: block; + } + + .col-sm-12 { + margin-top: 20px; + } + + .col-sm-12 select { + height: 33px; + } +</style> +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <input id="s1" value="${item.redemptionMethod}" hidden> + <input id="s2" value="${item.userPopulation}" hidden> + <div class="form-horizontal" id="carInfoForm"> + <#label id="types" name="商品类型" type="text" value="课包商品" /> + + <div id="b2" > + <div class="form-group" id="provinceCode"> + <label class="col-sm-3 control-label">所在省:</label> + <div class="col-sm-9"> + <select class="form-control" id="pCode" name="pCode"> + <option value="">${item.province}</option> + </select> + </div> + </div> + <div class="form-group" id="cityCode"> + <label class="col-sm-3 control-label">所在市:</label> + <div class="col-sm-9"> + <select class="form-control" id="cCode" name="cCode" > + <option value="">${item.city}</option> + </select> + </div> + </div> + + <div class="form-group" > + <label class="col-sm-3 control-label">所属门店:</label> + <div class="col-sm-9"> + <select class="form-control" id="storeId" name="storeId"> + <option value="">${shopName}</option> + </select> + </div> + </div> + + <div class="form-group" > + <label class="col-sm-3 control-label">课包类型:</label> + <div class="col-sm-9"> + <select class="form-control" id="coursePackageTypeId" name="pCode" onchange="TGoodsInfoDlg.packageChange(this)"> + <option value="">${typeName}</option> + </select> + </div> + </div> + + <div class="form-group" > + <label class="col-sm-3 control-label">课包名称:</label> + <div class="col-sm-9"> + <select class="form-control" id="coursePackageId" name="coursePackageId" onchange="TGoodsInfoDlg.timeChange(this)"> + <option value="">${pageName}</option> + </select> + </div> + </div> + + <div class="form-group" > + <label class="col-sm-3 control-label">课时数:</label> + <div class="col-sm-9"> + <select class="form-control" id="coursePackageConfigId" name="coursePackageConfigId"> + <option value="">${classHours}</option> + </select> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">原价:</label> + <div class="col-sm-9"> + <input class="form-control" id="price1" name="price" type="text" value="${item.price}" readonly> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">兑换方式:</label> + <div class="col-sm-9"> + <input type="radio" name="redemptionMethod" value="1" checked onclick="updateMethod(1)"> 积分 + <input type="radio" name="redemptionMethod" value="2" onclick="updateMethod(2)"> 现金+积分 + </div> + </div> + + <div class="form-group" id="y3" hidden> + <label class="col-sm-3 control-label">所需现金:</label> + <div class="col-sm-9"> + <input class="form-control" id="cash1" name="cash" type="text" value="${item.cash}"> + + </div> + </div> + <div class="form-group" id="y4"> + <label class="col-sm-3 control-label">所需积分:</label> + <div class="col-sm-9"> + <input class="form-control" id="integral1" name="integral" type="text" value="${item.integral}"> + + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*商品图片:</label> + <div class="col-sm-4"> + <img height="100px" width="100px" src="${item.cover}"> + </div> + </div> + + + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*商品图片:</label> + <div class="col-sm-4"> + @for(im in pictures){ + <img height="100px" width="100px" src="${im}"> + @} + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">用户人群:</label> + <div class="col-sm-9"> + <input type="radio" name="userPopulation" value="1" checked> 全部用户 + <input type="radio" name="userPopulation" value="2" > 年度会员 + <input type="radio" name="userPopulation" value="3" > 已有学员用户 + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">发放数量:</label> + <div class="col-sm-9"> + <input class="form-control" id="quantityIssued1" name="quantityIssued" type="text" value="${item.quantityIssued}" readonly> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">限领数量:</label> + <div class="col-sm-9"> + <input class="form-control" id="pickUpQuantity1" name="pickUpQuantity" type="text" value="${item.pickUpQuantity}" readonly> + </div> + </div> + <#input id="startTime1" name="有效期" type="text" value="${sTime} - ${eTime}" readonly="true"/> + + <div class="form-group" style="margin-left:262px"> + <label class="col-sm-1 control-label">兑换说明:</label> + <div class="col-sm-5"> + <textarea type="text/plain" id="editor1" style="height: 300px;width: 800px;" readonly>${item.redemptionInstructions}</textarea> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">排序:</label> + <div class="col-sm-9"> + <input class="form-control" id="sort1" name="sort" type="text" value="${item.sort}" readonly> + + </div> + </div> + + </div> + + + </div> +</div> + +<div class="row btn-group-m-t"> + <div class="col-sm-10 col-sm-offset-5"> + <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TGoodsInfoDlg.close()"/> + </div> +</div> + + </div> + +<script src="${ctxPath}/js/vue/vue.js"></script> +<script src="${ctxPath}/js/elementui/index.js"></script> +<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css"> +<script src="${ctxPath}/modular/system/tGoods/tGoods_info.js"></script> +<script src="${ctxPath}/modular/system/tGoods/TStoreInfo.js"></script> +<script> + laydate.render({ + elem: '#startTime', + range: true + }); + laydate.render({ + elem: '#startTime1', + range: true + }); + function updateMethod(e) { + console.log(e) + if(e==1){ + $("#y3").hide() + $("#y4").show() + }else if(e==2){ + $("#y4").show() + $("#y3").show() + }else if(e==3){ + $("#y1").hide() + $("#y2").show() + }else if(e==4){ + $("#y1").show() + $("#y2").show() + }else if(e==5) { + $("#y2").hide() + $("#y1").show() + } + + } + let i =1; + function updateType(e) { + + if(e==2){ + $("#b1").hide() + $("#b2").show() + if(i==1){ + var drivingLicensePhoto = new $WebUpload("cover1"); + drivingLicensePhoto.setUploadBarId("progressBar"); + drivingLicensePhoto.init(); + i++; + } + + }else { + $("#b2").hide() + $("#b1").show() + } + } + + + + function changeCity(n){ + + var provinceSelect = null; + if (n === undefined || n === null || n === ''){ + provinceSelect = document.getElementById("provinceData"); + }else { + provinceSelect = document.getElementById("provinceData"+n); + } + + var citySelect = null; + if (n === undefined || n === null || n === ''){ + citySelect = document.getElementById("cityData"); + }else { + citySelect = document.getElementById("cityData"+n); + } + + var selectedProvince = provinceSelect.value; + // 清空城市下拉框 + citySelect.innerHTML = '<option value="">请选择</option>'; + if (selectedProvince === "") { + return; + } + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/getCity", function(data){ + data.forEach(province => { + var option = document.createElement("option"); + option.value = province.id; // 根据你的数据结构确定省份的id字段 + option.text = province.name; // 根据你的数据结构确定省份的name字段 + citySelect.appendChild(option); + }); + },function(data){ + console.log('data:',data) + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set('province',selectedProvince); + ajax.start(); + } + + /** + * 全国通用 + */ + function scopeOfApplication1() { + $("#storeSelect").hide(); + $("#citySelect").hide(); + } + /** + * 指定城市 + */ + function scopeOfApplication2() { + $("#storeSelect").hide(); + $("#citySelect").show(); + } + /** + * 指定门店 + */ + function scopeOfApplication3() { + $("#storeSelect").show(); + $("#citySelect").hide(); + } + + + + + var vue2 = new Vue({ + el: '#app', + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + TGoodsInfoDlg.goodsPicArray.push(file); + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + couponInfoDlg.goodsPicArray = couponInfoDlg.goodsPicArray.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + }, + }); + var vue2 = new Vue({ + el: '#app1', + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + TGoodsInfoDlg.goodsPicArray1.push(file); + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + couponInfoDlg.goodsPicArray = couponInfoDlg.goodsPicArray.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + }, + }); + + + window.onload = function(){ + var OBJradio=document.getElementsByName("redemptionMethod") + if(OBJradio==1){ + $("#y4").show() + $("#y3").hide() + } + if(OBJradio==2){ + $("#y4").show() + $("#y3").show() + } + for(i=0;i<OBJradio.length;i++){//循环查找这个radio + if($("#s1").val()==OBJradio[i].value){//判断是否与radio的值相同 + OBJradio[i].checked=true//修改选中状态 + } + } + var OBJradio=document.getElementsByName("userPopulation") + for(i=0;i<OBJradio.length;i++){//循环查找这个radio + if($("#s2").val()==OBJradio[i].value){//判断是否与radio的值相同 + OBJradio[i].checked=true//修改选中状态 + } + } + } +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_edit.html new file mode 100644 index 0000000..0d43e8b --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_edit.html @@ -0,0 +1,157 @@ +@layout("/common/_container.html"){ +<style> + .avatar-uploader .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + height: 100px; + width: 100px; + overflow: hidden; + display: inline-block; + } + + .avatar-uploader .el-upload:hover { + border-color: #409eff; + } + + .avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 100px; + height: 100px; + line-height: 110px; + margin-top: 40px; + text-align: center; + } + + .avatar { + width: 100px; + height: 100px; + display: block; + } + + .col-sm-12 { + margin-top: 20px; + } + + .col-sm-12 select { + height: 33px; + } +</style> +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal" id="carInfoForm"> + <div id="b1"> + <input id="goodsId" value="${id}" hidden="hidden"> + <#input id="name" name="商品名称" type="text" value="${item.name}" readonly="true" /> + + <#avatar id="cover" name="商品封面:" avatarImg="${item.cover}" /> + + + <div class="row" id="app" style="margin-left: 225px;"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">商品图片(请上传不超过五张图片): </label> + <div class="col-sm-2" style="width: 100%;margin-left: 24%;margin-top: 1%"> + <div class="avatar-uploader" style="display: flex;"> + @for(im in pictures){ + <div style="margin-right: 16px;position: relative"> + <img height="100px" width="100px" src="${im}"> + <i class="el-icon-delete" onclick="delImg(this)" style="color: red;font-size: 18px;position: absolute;left: 0;right: 0;top: 0;bottom: 0"></i> + </div> + @} + <el-upload + :limit="5" + class="avatar-uploader" + action="/tCouponManage/uploadPic" + list-type="picture-card" + accept=".jpg,.jpeg,.png,.JPG,.JPEG" + :on-success="handleAvatarSuccess" + :on-remove="handleRemove"> + <i class="el-icon-plus"></i> + </el-upload> + </div> + </div> + </div> + + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">发放数量:</label> + <div class="col-sm-9"> + <input class="form-control" id="quantityIssued" name="quantityIssued" type="text" value="${item.quantityIssued}"> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">限领数量:</label> + <div class="col-sm-9"> + <input class="form-control" id="pickUpQuantity" name="pickUpQuantity" type="text" value="${item.pickUpQuantity}"> + </div> + </div> + + <div class="form-group" style="margin-left:262px"> + <label class="col-sm-1 control-label">兑换说明:</label> + <div class="col-sm-5"> + <textarea type="text/plain" id="editor" style="height: 300px;width: 800px;">${item.content}</textarea> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-3 control-label">排序:</label> + <div class="col-sm-9"> + <input class="form-control" id="sort" name="sort" type="text" value="${item.sort}"> + </div> + </div> + </div> + + + </div> + </div> + + <div class="row btn-group-m-t"> + <div class="col-sm-10 col-sm-offset-5"> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TGoodsInfoDlg.editSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TGoodsInfoDlg.close()"/> + </div> + </div> + +</div> + +</div> +</div> +<script src="${ctxPath}/js/vue/vue.js"></script> +<script src="${ctxPath}/js/elementui/index.js"></script> +<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css"> +<script src="${ctxPath}/modular/system/tGoods/tGoods_info.js"></script> +<script> + var vue2 = new Vue({ + el: '#app', + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + TGoodsInfoDlg.goodsPicArray.push(file.response); + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + TGoodsInfoDlg.goodsPicArray = TGoodsInfoDlg.goodsPicArray.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + }, + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_pay.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_pay.html new file mode 100644 index 0000000..0f1e6ef --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TGoods_pay.html @@ -0,0 +1,48 @@ +@layout("/common/_container.html"){ +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <input id="id" value="${id}" hidden="hidden"> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <div class="row"> + + <div class="col-sm-3"> + <#NameCon id="name" name="姓名" /> + </div> + <div class="col-sm-3"> + <#NameCon id="phone" name="联系方式:" /> + </div> + <div class="col-sm-3"> + <#SelectCon id="status" name="状态:"> + <option value="">全部</option> + <option value="1">未使用</option> + <option value="2">已使用</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#button name="搜索" icon="fa-search" clickFun="TPayInfo.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TPayInfo.resetSearch()" space="true"/> + </div> + </div> + <div class="hidden-xs" id="TPayInfoTableToolbar" role="group"> + <#button name="核销" icon="fa-plus" clickFun="TPayInfo.WriteOff()"/> + </div> + <#table id="TPayInfoTable"/> + + <div style="margin-left: 40%"> + <button type="button" class="btn btn-info button-margin" onclick="TPayInfo.close()" + id="submit" style="width: 30%;height: 40px;background: #0d8ddb;color: white;border: none;"> + <i class="fa fa-check"></i> 关闭 + </button> + </div> + + </div> + </div> + </div> + </div> +</div> +</div> +<script src="${ctxPath}/modular/system/tGoods/tPay_info.js"></script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TStoreList.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TStoreList.html new file mode 100644 index 0000000..7c6e1a5 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoodsAudit/TStoreList.html @@ -0,0 +1,58 @@ +@layout("/common/_container.html"){ +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-title"> + <h5>所在门店</h5> + </div> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <div class="row"> + <div class="col-sm-3"> + <select class="form-control" id="province"> + <option value="">全部</option> + </select> + </div> + <div class="col-sm-3"> + <select class="form-control" id="city"> + <option value="">全部</option> + </select> + </div> + <div class="col-sm-3"> + <#SelectCon id="userPopulation" name="所属账号" > + <option value="">全部</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#NameCon id="storeName" name="门店名称" placeholder="请输入门店名称"/> + </div> + <div class="col-sm-3"> + <#button name="搜索" icon="fa-search" clickFun="TStoreProvince.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TStoreProvince.resetSearch()"/> + </div> + </div> + <div class="hidden-xs" id="TStoreProvinceTableToolbar" role="group"> + </div> + <#table id="TStoreProvinceTable"/> + <div style="margin-left: 30%"> + <button type="button" class="btn btn-info button-margin" onclick="TStoreProvince.storeOfClosePage()" + id="closePage" style="width: 30%;height: 40px;background: #0d8ddb;color: white;border: none;"> + <i class="fa fa-check"></i> 关闭 + </button> + + <button type="button" class="btn btn-info button-margin" onclick="TStoreProvince.saveSelectStores()" + id="submit" style="margin-left: 5%;width: 30%;height: 40px;background: #0d8ddb;color: white;border: none;"> + <i class="fa fa-check"></i> 保存 + </button> + </div> + </div> + </div> +</div> + +</div> +</div> +</div> +<script src="${ctxPath}/modular/system/tGoods/TStoreInfo.js"></script> +<script src="${ctxPath}/modular/system/tGoods/TCouponInfo.js"></script> +@} diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCompetition_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCompetition_info.js index 4f789de..c83a226 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCompetition_info.js +++ b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCompetition_info.js @@ -4,6 +4,7 @@ var language=1; var TCarInfoDlg = { tCarInfoData : {}, + goodsPicArray1:[], validateFields: { carBrandId: { validators: { @@ -215,6 +216,21 @@ return; } + var goodImgs = TCarInfoDlg.goodsPicArray1; + if(goodImgs.length==0){ + Feng.info("请上传赛事活动图片") + return; + } + var imgOne =""; + for (let i = 0; i <goodImgs.length; i++) { + if(i==goodImgs.length-1){ + imgOne += (goodImgs[i].response) + }else { + imgOne+=(goodImgs[i].response+",") + } + + } + var coverDrawing = $("#coverDrawing").val(); var coverDrawing = $("#coverDrawing").val(); var registrationNotes = $("#registrationNotes").val() @@ -260,7 +276,7 @@ ajax.set("realName",realName); ajax.set("coverDrawing",coverDrawing); ajax.set("introduction",introduction); - ajax.set("imgs",introduction); + ajax.set("imgs",imgOne); ajax.set("registrationNotes",registrationNotes); ajax.set("longitude", $("#longitude").val()); ajax.set("latitude", $("#latitude").val()); @@ -306,7 +322,6 @@ return; } var registerEndTime = $("#registerEndTime").val(); - let registerCondition = document.querySelector('input[name="registerCondition"]:checked').value; var startAge = $("#startAge").val(); var endAge = $("#endAge").val(); var cashPrice = $("#cashPrice").val(); @@ -329,6 +344,26 @@ Feng.info("请输入赛事简介"); return; } + + var goodImgs = TCarInfoDlg.goodsPicArray1; + + if(goodImgs.length==0){ + Feng.info("请上传赛事活动图片") + return; + } + var imgOne =""; + console.log(goodImgs) + console.log(goodImgs.length) + for (let i = 0; i <goodImgs.length; i++) { + console.log(goodImgs[i].response,11) + if(i==goodImgs.length-1){ + imgOne += (goodImgs[i].response) + }else { + imgOne+=(goodImgs[i].response+",") + } + + } + console.log(imgOne) var coverDrawing = $("#coverDrawing").val(); var coverDrawing = $("#coverDrawing").val(); @@ -359,7 +394,6 @@ ajax.set("sTime",startTime); ajax.set("eTime",endTime); ajax.set("rEndTime",registerEndTime); - ajax.set("registerCondition",registerCondition); ajax.set("startAge",startAge); ajax.set("endAge",endAge); ajax.set("cashPrice",cashPrice); @@ -371,7 +405,7 @@ ajax.set("realName",realName); ajax.set("coverDrawing",coverDrawing); ajax.set("introduction",introduction); - ajax.set("imgs",introduction); + ajax.set("imgs",imgOne); ajax.set("registrationNotes",registrationNotes); ajax.set("longitude", $("#longitude").val()); ajax.set("latitude", $("#latitude").val()); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/TStoreInfo.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/TStoreInfo.js new file mode 100644 index 0000000..329797c --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/TStoreInfo.js @@ -0,0 +1,157 @@ +/** + * 管理初始化 + */ +var TStoreProvince = { + id: "TStoreProvinceTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1, + storeList: [] +}; + +/** + * 初始化表格的列 + */ +TStoreProvince.initColumn = function () { + return [ + {field: 'selectItem', checkbox: true}, + {title: '选择', field: '', visible: true, align: 'center', valign: 'middle'}, + {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '所属账号', field: 'accountName', visible: true, align: 'center', valign: 'middle'}, + {title: '所在省市', field: 'provinceCity', visible: true, align: 'center', valign: 'middle'}, + {title: '门店名称', field: 'name', visible: true, align: 'center', valign: 'middle'}, + ]; +}; + +/** + * 检查是否选中 + */ +TStoreProvince.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TStoreProvince.seItem = selected[0]; + return true; + } +}; + + +TStoreProvince.storeOfClosePage = function (){ + parent.layer.close(parent.layer.getFrameIndex(window.frameElement.id)); +} + +TStoreProvince.saveSelectStores = function (){ + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if (selected.length == 0) { + Feng.info("请先选中表格中的某一记录!"); + return false; + } + var arr = []; + console.log('selected--->',selected) + for(var i in selected){ + if(typeof selected[i].id != "undefined"){ + arr.push({ + id: selected[i].id, + provinceCity: typeof selected[i].provinceCity != "undefined" ? selected[i].provinceCity : "", + accountName: typeof selected[i].accountName != "undefined" ? selected[i].accountName : "", + name: typeof selected[i].name != "undefined" ? selected[i].name : "" + }) + } + } + window.parent.TCarInfoDlg.selecUserOpt(arr); + TStoreProvince.storeOfClosePage(); + +} + + + +/** + * 查询列表 + */ +TStoreProvince.search = function () { + var queryData = {}; + + var provinceElement = document.getElementById("province"); + var provinceId = provinceElement.value; + + var cityElement = document.getElementById("city"); + var cityElementId = cityElement.value; + + queryData['provinceId'] = provinceId; + queryData['cityId'] = cityElementId; + queryData['cityManagerId'] = $("#userPopulation").val(); + queryData['storeName'] = $("#storeName").val(); + TStoreProvince.table.refresh({query: queryData}); +}; + + +/** + * 重置搜索 + */ +TStoreProvince.resetSearch = function () { + var provinceSelect = document.getElementById("province"); + provinceSelect.innerHTML = '<option value="">全部</option>'; + + var citySelect = document.getElementById("city"); + citySelect.innerHTML = '<option value="">全部</option>'; + + queryProvince(); + + $("#userPopulation").val(''); + $("#storeName").val(''); + TStoreProvince.search(); +}; + +function queryProvince(){ + // 发送AJAX请求到后台获取省份数据 + // 假设后台返回的数据格式为一个包含省份ID和名称的数组 + var provinceSelect = document.getElementById("province"); + + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/getProvince", function(data){ + data.forEach(province => { + var option = document.createElement("option"); + option.value = province.id; // 根据你的数据结构确定省份的id字段 + option.text = province.name; // 根据你的数据结构确定省份的name字段 + provinceSelect.appendChild(option); + }); + },function(data){ + Feng.error("下拉失败!" + data.responseJSON.message + "!"); + }); + ajax.start(); + provinceSelect.addEventListener("change", queryCity); +} + + +// 获取城市数据 +function queryCity() { + var selectedProvinceId = this.value; // 获取选择的省份ID + // 发送AJAX请求到后台获取对应省份的城市数据 + // 假设后台返回的数据格式为一个包含城市ID和名称的数组 + + var citySelect = document.getElementById("city"); + citySelect.innerHTML = ""; + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/getCity", function(data){ + data.forEach(province => { + var option = document.createElement("option"); + option.value = province.id; // 根据你的数据结构确定省份的id字段 + option.text = province.name; // 根据你的数据结构确定省份的name字段 + citySelect.appendChild(option); + }); + },function(data){ + console.log('data:',data) + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set('province',selectedProvinceId); + ajax.start(); +} + +$(function () { + var defaultColunms = TStoreProvince.initColumn(); + var table = new BSTable(TStoreProvince.id, "/tCouponManage/storeDetailsOfSearch", defaultColunms); + table.setPaginationType("client"); + TStoreProvince.table = table.init(); + + queryProvince(); +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tGoods.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tGoods.js new file mode 100644 index 0000000..ebaab35 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tGoods.js @@ -0,0 +1,259 @@ +/** + * 车辆管理管理初始化 + */ +var TPointProducts = { + id: "TPointProductsTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; +var language =1 +/** + * 初始化表格的列 + */ +TPointProducts.initColumn = function () { + return [ + {field: 'selectItem', radio: true}, + {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '商品名称', field: 'name', visible: true, align: 'center', valign: 'middle'}, + {title: '兑换地点', field: 'useScope', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + return {1: "全国", 2: "指定城市", 3: "指定门店"}[value] + } + }, + {title: '用户人群', field: 'userPopulation', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + return {1: "全部用户", 2: "年度会员", 3: "已有学员用户"}[value] + } + }, + {title: '发放数量', field: 'quantityIssued', visible: true, align: 'center', valign: 'middle' + }, + {title: '限领数量', field: 'pickUpQuantity', visible: true, align: 'center', valign: 'middle' + }, + {title: '已领数量', field: 'hasPickQty', visible: true, align: 'center', valign: 'middle' + }, + {title: '已兑换数量', field: 'hasExchangeQty', visible: true, align: 'center', valign: 'middle' + }, + {title: '排序', field: 'sort', visible: true, align: 'center', valign: 'middle' + }, + {title: '审核状态', field: 'status', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + return { 2: "待审核", 3: "已拒绝"}[value] + } + }, + + ]; +}; +function currentTime(timestamp){ + var time = timestamp + ''; + if(time.length != 13){ + timestamp = timestamp * 1000; + } + var date = new Date(timestamp);; + var Y = date.getFullYear() + '-'; + var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' '; + + var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':'; + var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':'; + var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); + var strDate = Y + M + D + h + m + s; + return strDate +} + +function currentTime1(timestamp){ + var time = timestamp + ''; + if(time.length != 13){ + timestamp = timestamp * 1000; + } + var date = new Date(timestamp);; + var Y = date.getFullYear() + '-'; + var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' '; + + var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':'; + var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':'; + var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); + var strDate = Y + M + D ; + return strDate +} +/** + * 检查是否选中 + */ +TPointProducts.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TPointProducts.seItem = selected[0]; + return true; + } +}; + +/** + * 添加 + */ +TPointProducts.openAddTPointProducts = function () { + var index = layer.open({ + type: 2, + title: '添加', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tGoods/tGoods_add' + }); + this.layerIndex = index; +}; + +/** + * 查看详情 + */ +TPointProducts.detail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title:'详情', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tGoods/goods_info/' + TPointProducts.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 购买详情 + */ +TPointProducts.payDetail = function () { + if (this.check()) { + layer.open({ + type: 1 + , title: '审核' + , area: ['50%', '50%'] + , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset + , id: 'layerDemo' //防止重复弹出cge + , content: '<div class="form-horizontal">' + + ' <div class="col-sm-11" style="margin-top: 30px">' + + ' <div class="col-sm-11">' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">审核状态:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input type="radio" name="type1" value="1" checked>通过 <input type="radio" name="type1" value="3">拒绝\n' + + ' </div>\n' + + ' </div>\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">拒绝理由:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <textarea id="remark" style="height: 193px; width: 368px;"></textarea>\n' + + ' </div>\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + '</div>' + , btn: ['保存', '取消'] + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + , yes: function () { + var OBJradio= $("input[name='type1']:checked").val(); + console.log(OBJradio) + let remark = $("#remark").val() + console.log(remark) + if(OBJradio==3){ + if(remark==''){ + Feng.info("请输入拒绝理由") + return; + } + } + + var ajax = new $ax(Feng.ctxPath + "/tGoods/updateTypeOne", function (data) { + if (data.code == 200) { + Feng.success("操作成功!"); + TPointProducts.table.refresh(); + window.parent.layer.closeAll(); + } else { + return Feng.error(data.msg); + } + }, function (data) { + return Feng.error("操作失败!"); + }); + ajax.set("id",TPointProducts.seItem.id) + ajax.set("type",OBJradio) + ajax.set("remark",remark) + ajax.start(); + layer.closeAll(); + }, + }); + + } +}; + +/** + * 编辑页面 + */ +TPointProducts.openEditPage = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title:'编辑', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tGoods/tGoods_update/' + TPointProducts.seItem.id + }); + this.layerIndex = index; + } +} + +/** + * 上下架处理 + * @param m + */ +TPointProducts.grounding = function (m) { + console.log('m:',m); + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tGoods/grounding", function (data) { + Feng.success("操作成功!"); + TPointProducts.table.refresh(); + }, function (data) { + Feng.error("操作失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",this.seItem.id); + ajax.set("type",m); + ajax.start(); + } +}; + + + +/** + * 查询车辆管理列表 + */ +TPointProducts.search = function () { + var queryData = {}; + queryData['name'] = $("#name").val(); + queryData['type'] = $("#type").val(); + queryData['redemptionMethod'] = $("#redemptionMethod").val(); + queryData['userPopulation'] = $("#userPopulation").val(); + queryData['activeStatus'] = $("#activeStatus").val(); + queryData['state'] = $("#state").val(); + TPointProducts.table.refresh({query: queryData}); +}; + +TPointProducts.resetSearch = function () { + $("#name").val(""); + $("#type").val(""); + $("#redemptionMethod").val(""); + $("#userPopulation").val(""); + $("#activeStatus").val(""); + $("#state").val(""); + TPointProducts.search(); +}; + +$(function () { + var defaultColunms = TPointProducts.initColumn(); + var table = new BSTable(TPointProducts.id, "/tGoods/listAudit", defaultColunms); + table.setPaginationType("client"); + TPointProducts.table = table.init(); +}); \ No newline at end of file diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tGoods_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tGoods_info.js new file mode 100644 index 0000000..6bb63f6 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tGoods_info.js @@ -0,0 +1,804 @@ +/** + * 初始化车辆管理详情对话框 + */ +var language=1; +var TGoodsInfoDlg = { + tGoodsInfoData : {}, + validateFields: { + }, + goodsPicArray:[], + goodsPicArray1:[], + storeIds: [], + +}; + +/** + * 验证数据是否为空 + */ +TGoodsInfoDlg.validate = function () { + $('#carInfoForm').data("bootstrapValidator").resetForm(); + $('#carInfoForm').bootstrapValidator('validate'); + return $("#carInfoForm").data('bootstrapValidator').isValid(); +}; + +/** + * 清除数据 + */ +TGoodsInfoDlg.clearData = function() { + this.tGoodsInfoData = {}; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TGoodsInfoDlg.set = function(key, val) { + this.tGoodsInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val; + return this; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TGoodsInfoDlg.get = function(key) { + return $("#" + key).val(); +} + +/** + * 关闭此对话框 + */ +TGoodsInfoDlg.close = function() { + parent.layer.close(window.parent.TPointProducts.layerIndex); +} + + +/** + * 收集数据 + */ +TGoodsInfoDlg.collectData = function() { + this + .set('id') + .set('isPlatCar') + .set('companyId') + .set('franchiseeId') + .set('carColor') + .set('carModelId') + .set('carBrandId') + .set('carLicensePlate') + .set('carPhoto') + .set('drivingLicenseNumber') + .set('drivingLicensePhoto') + .set('annualInspectionTime') + .set('commercialInsuranceTime') + .set('createTime') + .set('state') + .set('addType') + .set('addObjectId') + .set('plateColor') + .set('vehicleType') + .set('ownerName') + .set('engineId') + .set('VIN') + .set('certifyDateA') + .set('fuelType') + .set('engineDisplace') + .set('certificate') + .set('transAgency') + .set('transArea') + .set('transDateStart') + .set('transDateStop') + .set('certifyDateB') + .set('fixState') + .set('nextFixDate') + .set('checkState') + .set('feePrintId') + .set('GPSBrand') + .set('GPSModel') + .set('GPSIMEI') + .set('GPSInstallDate') + .set('registerDate') + .set('commercialType'); +} +function storeList(){ + var index = layer.open({ + type: 2, + title: '门店列表', + area: ['80%', '80%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tGoods/storeList' + }); + this.layerIndex = index; +} +TGoodsInfoDlg.selecUserOpt = function (arrays){ + console.log(arrays) + //获取所有的值 + var subArr= this.storeIds; + $(".timeClass").each(function () { + subArr.push($(this).find("input[name*='id']").val()); + }); + var str = ''; + for(var i in arrays){ + var b = true; + for(var j in subArr){ + if(arrays[i].id === Number(subArr[j])){ + b = false; + break + } + } + if(b){ + this.storeIds.push(arrays[i].id) + str += '<tr class="timeClass">' + + '<td><input type="hidden" id="id" name="id" value="'+arrays[i].id+'"><input type="hidden" id="provinceCity" name="provinceCity" value="'+arrays[i].provinceCity+'">' + arrays[i].provinceCity + '</td>' + + '<td><input type="hidden" id="accountName" name="accountName" value="'+arrays[i].accountName+'">' + arrays[i].accountName + '</td>' + + '<td><input type="hidden" id="name" name="name" value="'+arrays[i].name+'">' + arrays[i].name + '</td><td><button onclick="deleteSub(this)">移除</button></td></tr>'; + } + } + $("#coun").append(str); + console.log('storeIds',this.storeIds) +} +function deleteSub(e) { + console.log(e); + var row = $(e).closest('tr'); + var value = row.find('#id').val(); + TGoodsInfoDlg.storeIds.splice(TGoodsInfoDlg.storeIds.indexOf(parseInt(value)), 1) + $(e).parent().parent().remove(); + console.log('storeIds',TGoodsInfoDlg.storeIds) +} +TGoodsInfoDlg.delete = function (o) { + $(o).parent("div").remove() +} +var num = 0; +TGoodsInfoDlg.addBranch = function () { + num=num+1; + var a= ""; + a = "<div style=\'margin-left: 25%\' class=\"col-sm-9 control-label\">\n" + + " <select class=\"col-sm-1\" id=\'provinceData"+num+"\' style=\"margin-top: 1%;width: 25%\" onchange=\'changeCity("+num+")\'>\n" + + " <option value=\"\">请选择</option>\n" + + " </select>\n" + + " <label class=\"col-sm-1\" style=\"width: 9%;margin-top: 7px\">省</label>\n" + + " <select class=\"col-sm-1\" style=\"margin-top: 1%;width: 25%\" id=\'cityData"+num+"\'>\n" + + " <option value=\"\">请选择</option>\n" + + " </select>\n" + + " <label class=\"col-sm-1\" style=\"width: 7%;margin-top: 7px\">市</label>\n" + + " <label name=\"addBranch\" class=\"col-sm-1\" onclick=\"TGoodsInfoDlg.delete(this)\" style=\"border: 0px;cursor: pointer;margin-top: 1%\"><i class=\"fa fa-trash\"></i></label>"+ + " </div>"; + $("#cityDemo").append($(a)); + getProvince(num); +} +function changeCity(n){ + + var provinceSelect = null; + if (n === undefined || n === null || n === ''){ + provinceSelect = document.getElementById("provinceData"); + }else { + provinceSelect = document.getElementById("provinceData"+n); + } + + var citySelect = null; + if (n === undefined || n === null || n === ''){ + citySelect = document.getElementById("cityData"); + }else { + citySelect = document.getElementById("cityData"+n); + } + + var selectedProvince = provinceSelect.value; + // 清空城市下拉框 + citySelect.innerHTML = '<option value="">请选择</option>'; + if (selectedProvince === "") { + return; + } + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/getCity", function(data){ + data.forEach(province => { + var option = document.createElement("option"); + option.value = province.id; // 根据你的数据结构确定省份的id字段 + option.text = province.name; // 根据你的数据结构确定省份的name字段 + citySelect.appendChild(option); + }); + },function(data){ + console.log('data:',data) + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set('province',selectedProvince); + ajax.start(); +} +function getProvince(n){ + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/getProvince", function(data){ + console.log(data) + var provinceSelect = null; + if (n === undefined || n === null || ''){ + provinceSelect = document.getElementById("provinceData"); + }else { + provinceSelect = document.getElementById("provinceData"+n); + } + data.forEach(province => { + var option = document.createElement("option"); + option.value = province.id; // 根据你的数据结构确定省份的id字段 + option.text = province.name; // 根据你的数据结构确定省份的name字段 + provinceSelect.appendChild(option); + }); + },function(data){ + Feng.error("下拉失败!" + data.responseJSON.message + "!"); + }); + ajax.start(); +} +/** + * 提交添加 + */ +TGoodsInfoDlg.addSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + + let typeAll = document.querySelector('input[name="type"]:checked').value; + if(typeAll==2){ + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + let storeId = $("#storeId").val() + if(storeId==''){ + Feng.info("请选择门店") + return; + } + let coursePackageTypeId = $("#coursePackageTypeId").val() + if(coursePackageTypeId==''){ + Feng.info("请选择课包类型") + return; + } + let coursePackageId = $("#coursePackageId").val() + if(coursePackageId==''){ + Feng.info("请选择课包") + return; + } + let coursePackageConfigId = $("#coursePackageConfigId").val() + if(coursePackageConfigId==''){ + Feng.info("请选择课时数") + return; + } + let price = $("#price1").val() + if(price==''){ + Feng.info("请填写原价") + return; + } + let type = document.querySelector('input[name="redemptionMethod"]:checked').value; + if(type==''){ + Feng.info("请选择兑换方式") + return; + } + let integral=''; + let cash=''; + if(type==1){ + integral = $("#integral1").val() + if(integral==''){ + Feng.info("请填写所需积分") + return; + } + } + if(type==2){ + integral = $("#integral1").val() + if(integral==''){ + Feng.info("请填写所需积分") + return; + } + cash = $("#cash1").val() + if(cash==''){ + Feng.info("请填写所需现金") + return; + } + } + + let cover1 = $("#cover1").val() + // if(cover1==''){ + // Feng.info("请上传封面") + // return; + // } + var goodImgs = this.goodsPicArray1; + var imgOne =""; + if(goodImgs.length==0){ + }else { + for (let i = 0; i <goodImgs.length; i++) { + if(i==goodImgs.length-1){ + imgOne += (goodImgs[i].response) + }else { + imgOne+=(goodImgs[i].response+",") + } + } + } + + let userPopulation = document.querySelector('input[name="userPopulation"]:checked').value; + if(userPopulation==''){ + Feng.info("请选择用户人群") + return; + } + + let quantityIssued = $("#quantityIssued1").val() + if(quantityIssued==''){ + Feng.info("请填写发放数量") + return; + } + let pickUpQuantity = $("#pickUpQuantity1").val() + if(pickUpQuantity==''){ + Feng.info("请填写限领数量") + return; + } + let startTime = $("#startTime1").val() + if(startTime==''){ + Feng.info("请选择有效期") + return; + } + let text = TGoodsInfoDlg.editor1.getContent(); + console.log(text) + if(text==""){ + Feng.info("请输入兑换说明") + return; + } + + let sort = $("#sort1").val() + if(sort==''){ + Feng.info("请填写排序") + return; + } + + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tGoods/add", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("添加成功!"); + }else if(language==2){ + Feng.success("Successfully added!"); + }else { + Feng.success("Sangat berhasil ditambah!"); + } + window.parent.TPointProducts.table.refresh(); + TGoodsInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + },function(data){ + Feng.error("添加失败!" + data.responseJSON.message + "!"); + }); + ajax.set("typeAll",typeAll); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("storeId",storeId); + ajax.set("coursePackageTypeId",coursePackageTypeId); + ajax.set("coursePackageId",coursePackageId); + ajax.set("coursePackageConfigId",coursePackageConfigId); + ajax.set("price",price); + ajax.set("type",type); + ajax.set("integral",integral); + ajax.set("cash",cash); + ajax.set("cover",cover1); + ajax.set("imgOne",imgOne); + ajax.set("userPopulation",userPopulation); + ajax.set("quantityIssued",quantityIssued); + ajax.set("pickUpQuantity",pickUpQuantity); + ajax.set("startTime",startTime); + ajax.set("text",text); + ajax.set("sort",sort); + ajax.start(); + + }else { + let name = $("#name").val() + if(name==''){ + Feng.info("请填写商品名称") + return; + } + let price = $("#price").val() + if(price==''){ + Feng.info("请填写原价") + return; + } + let type = document.querySelector('input[name="redemptionMethod"]:checked').value; + if(type==''){ + Feng.info("请选择兑换方式") + return; + } + + let integral=''; + let cash=''; + if(type==1){ + integral = $("#integral").val() + if(integral==''){ + Feng.info("请填写所需积分") + return; + } + } + if(type==2){ + integral = $("#integral").val() + if(integral==''){ + Feng.info("请填写所需积分") + return; + } + cash = $("#cash").val() + if(cash==''){ + Feng.info("请填写所需现金") + return; + } + } + if(type==3){ + cash = $("#cash").val() + if(cash==''){ + Feng.info("请填写所需现金") + return; + } + } + + let cover1 = $("#cover").val() + var goodImgs = this.goodsPicArray; + var imgOne =""; + if(goodImgs.length==0){ + }else { + for (let i = 0; i <goodImgs.length; i++) { + if(i==goodImgs.length-1){ + imgOne += (goodImgs[i].response) + }else { + imgOne+=(goodImgs[i].response+",") + } + } + } + + let userPopulation = document.querySelector('input[name="userPopulation"]:checked').value; + if(userPopulation==''){ + Feng.info("请选择用户人群") + return; + } + + let quantityIssued = $("#quantityIssued").val() + if(quantityIssued==''){ + Feng.info("请填写发放数量") + return; + } + let pickUpQuantity = $("#pickUpQuantity").val() + if(pickUpQuantity==''){ + Feng.info("请填写限领数量") + return; + } + let startTime = $("#startTime").val() + if(startTime==''){ + Feng.info("请选择有效期") + return; + } + + let company = document.querySelector('input[name="company"]:checked').value; + + var cityIds = []; + var cts = ""; + if (company === '2'){ + var myselect=document.getElementById('cityData'); + var seCity = myselect.options[myselect.selectedIndex].value; + if (seCity === null || seCity === undefined || seCity === ''){ + return Feng.error('请选中一个省市'); + } + cityIds.push(seCity); + if (num > 0){ + for (let i = 1; i <= num; i++) { + var insSelect=document.getElementById('cityData'+i); + var inData = insSelect.options[insSelect.selectedIndex].value; + if (inData !== undefined || inData !== null || inData !== ''){ + cityIds.push(inData); + } + } + cts = cityIds.join(','); + }else { + cts = cityIds + } + } + + const commaSeparatedString = this.goodsPicArray.join(','); + + var stores = ""; + if (company === '3'){ + console.log('3---this.storeIds',this.storeIds); + if (TGoodsInfoDlg.storeIds.length === 0 ){ + return Feng.error('请至少选择一个门店'); + } + stores = this.storeIds.join(','); + console.log('stores--===--',stores) + } + + let text = TGoodsInfoDlg.editor.getContent(); + console.log(text) + if(text==""){ + Feng.info("请输入兑换说明") + return; + } + + let sort = $("#sort").val() + if(sort==''){ + Feng.info("请填写排序") + return; + } + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tGoods/add", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("添加成功!"); + }else if(language==2){ + Feng.success("Successfully added!"); + }else { + Feng.success("Sangat berhasil ditambah!"); + } + window.parent.TPointProducts.table.refresh(); + TGoodsInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + + },function(data){ + Feng.error("添加失败!" + data.responseJSON.message + "!"); + }); + ajax.set("typeAll",typeAll); + ajax.set("name",name); + ajax.set("price",price); + ajax.set("type",type); + ajax.set("integral",integral); + ajax.set("cash",cash); + ajax.set("cover",cover1); + ajax.set("imgOne",imgOne); + ajax.set("userPopulation",userPopulation); + ajax.set("quantityIssued",quantityIssued); + ajax.set("pickUpQuantity",pickUpQuantity); + ajax.set("startTime",startTime); + ajax.set("useScope",company); + ajax.set("cityIds",cts); + ajax.set("storeIds",stores); + ajax.set("text",text); + ajax.set("sort",sort); + ajax.set("cardType",document.querySelector('input[name="cardType"]:checked').value); + ajax.start(); + + } + + +} + +/** + * 删除图片的函数 + * @param e + */ +function delImg(e){ + + $(e).parent().remove(); +} + + +/** + * 提交修改 + */ +TGoodsInfoDlg.editSubmit = function() { + let cover = $("#cover").val(); + let goodsId = $("#goodsId").val(); + var productImages = ""; + if (TGoodsInfoDlg.goodsPicArray.length > 0){ + productImages = TGoodsInfoDlg.goodsPicArray.join(','); + } + let quantityIssued = $("#quantityIssued").val(); + let pickUpQuantity = $("#pickUpQuantity").val(); + let editor = jQuery.trim(TGoodsInfoDlg.editor.getContent()); + console.log('editor:',editor) + + let sort = $("#sort").val(); + + if (quantityIssued === undefined || quantityIssued === null || quantityIssued === ''){ + return Feng.error('发放数量不能为空!'); + } + if (pickUpQuantity === undefined || pickUpQuantity === null || pickUpQuantity === ''){ + return Feng.error('限领数量不能为空!'); + } + let quantityHas = $("#quantityHas").val(); + if (quantityIssued <= quantityHas){ + return Feng.error('发放数量小于已领数量!'); + } + + + if (editor === undefined || editor === null || editor === ''){ + return Feng.error('兑换说明不能为空!'); + } + if (sort === undefined || sort === null || sort === ''){ + return Feng.error('排序不能为空!'); + } + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tGoods/update", function(data){ + Feng.success("修改成功!"); + window.parent.TPointProducts.table.refresh(); + TGoodsInfoDlg.close(); + },function(data){ + Feng.error("修改失败!" + data.responseJSON.message + "!"); + }); + ajax.set("pointMerchandiseId",goodsId); + ajax.set("quantityIssued",quantityIssued); + ajax.set("pickUpQuantity",pickUpQuantity); + ajax.set("redemptionInstructions",editor); + ajax.set("cover",cover); + ajax.set("productImages",productImages); + ajax.set("sort",sort); + ajax.start(); +} + +$(function() { + + getProvince(null); + Feng.initValidator("carInfoForm", TGoodsInfoDlg.validateFields); + // 初始化图片上传 + var carPhoto = new $WebUpload("cover"); + carPhoto.setUploadBarId("progressBar"); + carPhoto.init(); + var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto"); + drivingLicensePhoto.setUploadBarId("progressBar"); + drivingLicensePhoto.init(); + var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto"); + drivingLicensePhoto.setUploadBarId("progressBar"); + drivingLicensePhoto.init(); + TGoodsInfoDlg.editor = UE.getEditor('editor'); + TGoodsInfoDlg.editor1 = UE.getEditor('editor1'); +}); + +/** + * 选择分公司后执行 + */ +TGoodsInfoDlg.oneChange = function (e) { + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择市</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.code+"'>"+v.name+"</option>"; + }); + $("#cCode").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} +TGoodsInfoDlg.storeChange = function (e) { + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCity/storeChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择门店</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.id+"'>"+v.name+"</option>"; + }); + $("#storeId").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} +TGoodsInfoDlg.packageChange = function (e) { + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCity/packageChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择课包</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.id+"'>"+v.name+"</option>"; + }); + $("#coursePackageId").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} +TGoodsInfoDlg.timeChange = function (e) { + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCity/timeChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择课时数</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.id+"'>"+v.classHours+"</option>"; + }); + $("#coursePackageConfigId").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} + +/** + * 类型改变执行 + * @param e + */ +TGoodsInfoDlg.companyTypeClick = function (e) { + if (1 == e){ + $(".companyDiv").hide(); + } else if (2 == e){ + $(".companyDiv").show(); + } +} + +/** + * 车辆品牌改变时执行 + */ +TGoodsInfoDlg.brandChange = function (e) { + var carBrandId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCar/brandChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择车辆类型</option>'; + }else if(language==2){ + var content='<option value="">Please select the vehicle type</option>'; + }else { + var content='<option value="">Pilih Jenis Kendaraan</option>'; + } + + $.each(data, function(k,v) { + content += "<option value='"+v.id+"'>"+v.name+"</option>"; + }); + $("#carModelId").empty().append(content); + } + }); + ajax.set("carBrandId",carBrandId); + ajax.start(); +} + +/** + * 专车服务被点击 + */ +TGoodsInfoDlg.zcServerClick = function () { + var serverBox1 = $('#serverBox1').prop('checked'); + if (serverBox1){ + $("#zcModelDiv").show(); + } else { + $("#zcModelDiv").hide(); + } +} + +/** + * 跨城服务被点击 + */ +TGoodsInfoDlg.kcServerClick = function () { + var serverBox3 = $('#serverBox3').prop('checked'); + if (serverBox3){ + $("#kcModelDiv").show(); + } else { + $("#kcModelDiv").hide(); + } +} diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tPay_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tPay_info.js new file mode 100644 index 0000000..2c49494 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoodsAudit/tPay_info.js @@ -0,0 +1,102 @@ +/** + * 管理初始化 + */ +var TPayInfo = { + id: "TPayInfoTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1, +}; + +/** + * 初始化表格的列 + */ +TPayInfo.initColumn = function () { + return [ + {field: 'selectItem', radio: true}, + {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '选择', field: '', visible: true, align: 'center', valign: 'middle'}, + {title: '姓名', field: 'name', visible: true, align: 'center', valign: 'middle'}, + {title: '联系方式', field: 'phone', visible: true, align: 'center', valign: 'middle'}, + {title: '使用状态', field: 'status', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + return {1: "未使用", 2: "已核销"}[value] + } + }, + ]; +}; + +/** + * 检查是否选中 + */ +TPayInfo.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TPayInfo.seItem = selected[0]; + return true; + } +}; + + +/** + * 核销操作 + * @constructor + */ +TPayInfo.WriteOff = function (){ + if (TPayInfo.check()) { + if (TPayInfo.seItem.status === 2){ + return Feng.error("重复核销!"); + } + var ajax = new $ax(Feng.ctxPath + "/tGoods/write_off", function (data) { + Feng.success("核销成功!"); + TPayInfo.table.refresh(); + }, function (data) { + Feng.error("核销失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",TPayInfo.seItem.id); + ajax.start(); + } +} + + +/** + * 关闭此对话框 + */ +TPayInfo.close = function() { + parent.layer.close(window.parent.TPointProducts.layerIndex); +} + + +/** + * 查询列表 + */ +TPayInfo.search = function () { + var queryData = {}; + queryData['name'] = $("#name").val(); + queryData['phone'] = $("#phone").val(); + queryData['status'] = $("#status").val(); + queryData['id'] = $("#id").val(); + TPayInfo.table.refresh({query: queryData}); +}; + + +/** + * 重置搜索 + */ +TPayInfo.resetSearch = function () { + $("#name").val(''); + $("#phone").val(''); + $("#status").val(''); + TPayInfo.search(); +}; + +$(function () { + let goodsId = $("#id").val(); + var defaultColunms = TPayInfo.initColumn(); + var table = new BSTable(TPayInfo.id, "/tGoods/payList/"+goodsId, defaultColunms); + table.setPaginationType("client"); + TPayInfo.table = table.init(); +}); diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java new file mode 100644 index 0000000..e9ff656 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java @@ -0,0 +1,265 @@ +package com.dsh.other.controller; + +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.dsh.other.entity.TGame; +import com.dsh.other.entity.TGameConfig; +import com.dsh.other.entity.TGameRecord; +import com.dsh.other.feignclient.account.AppUserClient; +import com.dsh.other.feignclient.account.model.AppUser; +import com.dsh.other.model.QueryMySiteVo; +import com.dsh.other.service.TGameConfigService; +import com.dsh.other.service.TGameRecordService; +import com.dsh.other.service.TGameService; +import com.dsh.other.util.*; +import com.dsh.other.util.httpClinet.HttpResult; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; + +@RestController +@RequestMapping("/api/game") +public class GameController { + + @Autowired + private TGameRecordService gameRecordService; + + @Autowired + private TGameService gameService; + + @Autowired + private TGameConfigService gameConfigService; + + @Autowired + private TokenUtil tokenUtil; + + @Autowired + private AppUserClient appUserClient; + + @Autowired + private PayMoneyUtil payMoneyUtil; + + + @ResponseBody + @PostMapping("/queryGameList") + @ApiOperation(value = "获取当前场地的游戏列表配置", tags = {"用户—游戏"}) + @ApiImplicitParams({ + @ApiImplicitParam(value = "siteId", name = "siteId", dataType = "int", required = true), + @ApiImplicitParam(value = "storeId", name = "storeId", dataType = "int", required = true), + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + }) + public ResultUtil<List<TGameConfig>> queryGameList(Integer siteId, Integer storeId){ + try { + List<TGameConfig> tGameConfigs = new ArrayList<>(); + + List<TGame> list = gameService.list(new LambdaQueryWrapper<TGame>().eq(TGame::getSiteId, siteId).eq(TGame::getStoreId, storeId)); + if(list.size()>0){ + Integer id = list.get(0).getId(); + tGameConfigs = gameConfigService.list(new LambdaQueryWrapper<TGameConfig>().eq(TGameConfig::getOtherId, id)); + } + return ResultUtil.success(tGameConfigs); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + + + @ResponseBody + @PostMapping("/payGame") + @ApiOperation(value = "支付游戏", tags = {"用户—游戏"}) + @ApiImplicitParams({ + @ApiImplicitParam(value = "三方游戏id", name = "gameId", dataType = "int", required = true), + @ApiImplicitParam(value = "游戏配置id", name = "configId", dataType = "int", required = true), + @ApiImplicitParam(value = "sutuId", name = "sutuId", dataType = "int", required = true), + @ApiImplicitParam(value = "spaceId", name = "spaceId", dataType = "int", required = true), + @ApiImplicitParam(value = "1微信 2支付宝 3玩湃币", name = "type", dataType = "int", required = true), + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + }) + public ResultUtil payGame(Integer gameId, Integer configId,Integer type,Integer sutuId,Integer spaceId){ + try { + Integer uid = tokenUtil.getUserIdFormRedis(); + if(null == uid){ + return ResultUtil.tokenErr(); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); + TGameConfig config = gameConfigService.getById(configId); + TGameRecord tGameRecord = new TGameRecord(); + tGameRecord.setGameId(gameId); + tGameRecord.setPayType(type); + tGameRecord.setUserId(uid); + tGameRecord.setNumber(code); + gameRecordService.save(tGameRecord); + if(type==1){ + ResultUtil weixinpay = payMoneyUtil.weixinpay("游戏支付", "", code, config.getCash().toString(), "/base/course/weChatPaymentCourseCallback", "APP", ""); + if(weixinpay.getCode() == 200){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + List<TGameRecord> list = gameRecordService.list(new QueryWrapper<TGameRecord>().eq("code", code).eq("payType", 2)); + TGameRecord one = list.get(0); + + if(one.getStatus() == 1){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); + if(resultUtil.getCode() == 200 && one.getStatus() == 0){ + /** + * SUCCESS—支付成功, + * REFUND—转入退款, + * NOTPAY—未支付, + * CLOSED—已关闭, + * REVOKED—已撤销(刷卡支付), + * USERPAYING--用户支付中, + * PAYERROR--支付失败(其他原因,如银行返回失败) + */ + Map<String, String> data1 = resultUtil.getData(); + String s = data1.get("trade_state"); + String transaction_id = data1.get("transaction_id"); + if("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10){ + break; + } + if("SUCCESS".equals(s)){ + for (TGameRecord coursePackagePayment : list) { + coursePackagePayment.setStatus(1); + coursePackagePayment.setOrderNo(transaction_id); + } + gameRecordService.updateBatchById(list); + Integer integer = startGame(uid, gameId, spaceId, sutuId); + break; + } + if("USERPAYING".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return weixinpay; + }else if(type==2){ + ResultUtil alipay = payMoneyUtil.alipay("游戏支付", "游戏支付", "", code, config.getCash().toString(), "/base/course/aliPaymentCourseCallback"); + if(alipay.getCode() == 200){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + List<TGameRecord> list = gameRecordService.list(new QueryWrapper<TGameRecord>().eq("code", code).eq("payType", 3)); + TGameRecord one = list.get(0); + if(one.getStatus() == 1){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); + if(resultUtil.getCode() == 200 && one.getStatus() == 0){ + /** + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ + Map<String, String> data1 = resultUtil.getData(); + String s = data1.get("tradeStatus"); + String tradeNo = data1.get("tradeNo"); + if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){ + break; + } + if("TRADE_SUCCESS".equals(s)){ + for (TGameRecord coursePackagePayment : list) { + coursePackagePayment.setStatus(1); + coursePackagePayment.setOrderNo(tradeNo); + } + gameRecordService.updateBatchById(list); + Integer integer = startGame(uid, gameId, spaceId, sutuId); + break; + } + if("WAIT_BUYER_PAY".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return alipay; + }else if(type==3){ + AppUser appUser = appUserClient.queryAppUser(uid); + Integer playPaiCoins = appUser.getPlayPaiCoins(); + BigDecimal playCoin = config.getPlayCoin(); + int i = playCoin.intValue(); + if(playPaiCoins<i){ + return ResultUtil.error("玩湃币不足"); + } + int i1 = playPaiCoins - i; + appUser.setPlayPaiCoins(i1); + appUserClient.updateAppUser(appUser); + startGame(uid,gameId,spaceId,sutuId); + return ResultUtil.success(); + + }else { + return ResultUtil.error("支付方式错误"); + } + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + + + + } + + + private static Integer startGame(Integer uid,Integer gameId,Integer spaceId,Integer sutuId){ + HashMap<String, String> map = new HashMap<>(); + map.put("sign","0DB011836143EEE2C2E072967C9F4E4B"); + map.put("app_user_id",uid+""); + map.put("game_id",gameId+""); + map.put("space_id",spaceId+""); + map.put("sutu_id",sutuId+""); + + String s = HttpRequestUtil.postRequest("https://try.daowepark.com/v7/user_api/general/gameStart", map); + JSONObject jsonObject = JSONObject.parseObject(s); + Object code = jsonObject.get("code"); + if(String.valueOf(code)!=null && "200".equals(String.valueOf(code))){ + return 200; + }else { + return 500; + } + } + + + public static void main(String[] args) { + Integer integer = startGame(1, 13, 1001, 1001); + System.out.println(integer); + } +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java index 8d86b0a..5082c8b 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java @@ -1,5 +1,9 @@ package com.dsh.other.controller; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.other.entity.Site; import com.dsh.other.entity.SiteBooking; @@ -347,16 +351,38 @@ @ApiImplicitParam(value = "id", name = "id", dataType = "int", required = true), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) - public ResultUtil<SiteBooking> queryMySiteById(Integer id){ + public ResultUtil<Map<String,Object>> queryMySiteById(Integer id){ try { + HashMap<String, Object> map = new HashMap<>(); SiteBooking byId = siteBookingService.getById(id); - return ResultUtil.success(byId); + List<Integer> ids = getIds(byId.getSiteId()); + map.put("data",byId); + map.put("ids",ids); + return ResultUtil.success(map); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } + public List<Integer> getIds(Integer siteId) { + HttpRequest httpRequest = HttpRequest.get("https://try.daowepark.com/v7/user_api/general/get_space_area?space_id=" + siteId); + HttpResponse execute = httpRequest.execute(); + String body = execute.body(); + JSONObject jsonObject = JSONObject.parseObject(body); + Object data = jsonObject.get("data"); + JSONArray array = JSONArray.parseArray(data.toString()); + List<Integer> ids =new ArrayList<>(); + for (Object o : array) { + JSONObject jsonObject1 = JSONObject.parseObject(o.toString()); + Object id = jsonObject1.get("id"); + Integer integer = Integer.valueOf(id.toString()); + ids.add(integer); + } + return ids; + + } + @ResponseBody @PostMapping("/api/site/cancelMySite") diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java index 025c33d..2f445f8 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java @@ -39,7 +39,7 @@ return ResultUtil.paranErr("storeId"); } try { - List<StoreConfig> list = storeConfigService.list(new QueryWrapper<StoreConfig>().eq("storeId", storeId).orderByAsc("sort")); + List<StoreConfig> list = storeConfigService.list(new QueryWrapper<StoreConfig>().eq("storeId", storeId).orderByAsc("sort").eq("isOpen",1)); List<StoreConfigVo> listVo = new ArrayList<>(); for (StoreConfig storeConfig : list) { StoreConfigVo storeConfigVo = new StoreConfigVo(); diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/TGameConfig.java b/cloud-server-other/src/main/java/com/dsh/other/entity/TGameConfig.java index 715d35e..b679fbd 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/entity/TGameConfig.java +++ b/cloud-server-other/src/main/java/com/dsh/other/entity/TGameConfig.java @@ -63,6 +63,9 @@ private Integer gameId; @TableField("otherId") private Integer otherId; + + + @Override protected Serializable pkVal() { return this.id; diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/TGameRecord.java b/cloud-server-other/src/main/java/com/dsh/other/entity/TGameRecord.java new file mode 100644 index 0000000..ab36246 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/entity/TGameRecord.java @@ -0,0 +1,65 @@ +package com.dsh.other.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * <p> + * + * </p> + * + * @author administrator + * @since 2023-10-07 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_game_record") +public class TGameRecord extends Model<TGameRecord> { + + private static final long serialVersionUID=1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("userId") + private Integer userId; + + @TableField("gameId") + private Integer gameId; + + /** + * 1玩湃币 2微信 3支付宝 + */ + @TableField("payType") + private Integer payType; + + /** + * 金额 + */ + private BigDecimal money; + + /** + * 0待支付 1已支付 + */ + private Integer status; + + private String number; + @TableField("orderNo") + private String orderNo; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java b/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java index 7492083..f0cfac2 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java +++ b/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java @@ -33,7 +33,8 @@ /** * 图片 */ - private String url; + @TableField("url") + private String backgroundImage; /** * 跳转模块 diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/TGameRecordMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/TGameRecordMapper.java new file mode 100644 index 0000000..a799475 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/TGameRecordMapper.java @@ -0,0 +1,17 @@ +package com.dsh.other.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dsh.other.entity.TGameRecord; + +/** + * <p> + * Mapper 接口 + * </p> + * + * @author administrator + * @since 2023-10-07 + */ +public interface TGameRecordMapper extends BaseMapper<TGameRecord> { + +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/TGameRecordService.java b/cloud-server-other/src/main/java/com/dsh/other/service/TGameRecordService.java new file mode 100644 index 0000000..e860e98 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/service/TGameRecordService.java @@ -0,0 +1,17 @@ +package com.dsh.other.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dsh.other.entity.TGameRecord; + +/** + * <p> + * 服务类 + * </p> + * + * @author administrator + * @since 2023-10-07 + */ +public interface TGameRecordService extends IService<TGameRecord> { + +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/TGameRecordServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/TGameRecordServiceImpl.java new file mode 100644 index 0000000..9e5decb --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/TGameRecordServiceImpl.java @@ -0,0 +1,21 @@ +package com.dsh.other.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dsh.other.entity.TGameRecord; +import com.dsh.other.mapper.TGameRecordMapper; +import com.dsh.other.service.TGameRecordService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 服务实现类 + * </p> + * + * @author administrator + * @since 2023-10-07 + */ +@Service +public class TGameRecordServiceImpl extends ServiceImpl<TGameRecordMapper, TGameRecord> implements TGameRecordService { + +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/HttpRequestUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/HttpRequestUtil.java new file mode 100644 index 0000000..a6791cd --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/util/HttpRequestUtil.java @@ -0,0 +1,254 @@ +package com.dsh.other.util; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.SimpleHttpConnectionManager; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.security.MessageDigest; +import java.util.Map; + +public class HttpRequestUtil { + + public static String postRequest(String url, Map<String, String> params) { + // 构造HttpClient的实例 + HttpClient httpClient = new HttpClient(); + // 创建POST方法的实例 + PostMethod postMethod = new PostMethod(url); + // 设置请求头信息 + postMethod.setRequestHeader("Connection", "close"); + postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); + // 添加参数 + for (Map.Entry<String, String> entry : params.entrySet()) { + postMethod.addParameter(entry.getKey(), entry.getValue()); + } + // 使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次 + httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); + // 接收处理结果 + String result = null; + try { + // 执行Http Post请求 + httpClient.executeMethod(postMethod); + // 返回处理结果 + result = postMethod.getResponseBodyAsString(); + } catch (HttpException e) { + // 发生致命的异常,可能是协议不对或者返回的内容有问题 + System.out.println("请检查输入的URL!"); + e.printStackTrace(); + } catch (IOException e) { + // 发生网络异常 + System.out.println("发生网络异常!"); + e.printStackTrace(); + } finally { + // 释放链接 + postMethod.releaseConnection(); + // 关闭HttpClient实例 + if (httpClient != null) { + ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); + httpClient = null; + } + } + return result; + } + public static String postRequest1(String url, Map<String, String> params,String appKey,String appSecret) { + // 构造HttpClient的实例 + HttpClient httpClient = new HttpClient(); + // 创建POST方法的实例 + PostMethod postMethod = new PostMethod(url); + // 设置请求头信息 + String nonce = String.valueOf(Double.valueOf(Math.random() * 1000000.0D).intValue()); + String timeMillis = String.valueOf(System.currentTimeMillis()); + String signature = string2Sha1(appSecret + nonce + timeMillis); + postMethod.setRequestHeader("Host", "api-cn.ronghub.com"); + postMethod.setRequestHeader("App-Key", appKey); + postMethod.setRequestHeader("Signature", signature); + postMethod.setRequestHeader("Nonce", nonce); + postMethod.setRequestHeader("Timestamp", timeMillis); + postMethod.setRequestHeader("Host", "api-cn.ronghub.com"); + postMethod.addRequestHeader("Content-Type", "application/json"); + // 添加参数 + for (Map.Entry<String, String> entry : params.entrySet()) { + postMethod.addParameter(entry.getKey(), entry.getValue()); + } + // 使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次 + httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); + // 接收处理结果 + String result = null; + try { + // 执行Http Post请求 + httpClient.executeMethod(postMethod); + // 返回处理结果 + result = postMethod.getResponseBodyAsString(); + } catch (HttpException e) { + // 发生致命的异常,可能是协议不对或者返回的内容有问题 + System.out.println("请检查输入的URL!"); + e.printStackTrace(); + } catch (IOException e) { + // 发生网络异常 + System.out.println("发生网络异常!"); + e.printStackTrace(); + } finally { + // 释放链接 + postMethod.releaseConnection(); + // 关闭HttpClient实例 + if (httpClient != null) { + ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); + httpClient = null; + } + } + return result; + } + private static String string2Sha1(String str){ + if(str==null||str.length()==0){ + return null; + } + char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9', + 'a','b','c','d','e','f'}; + try { + MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); + mdTemp.update(str.getBytes("UTF-8")); + + byte[] md = mdTemp.digest(); + int j = md.length; + char buf[] = new char[j*2]; + int k = 0; + for (int i = 0; i < j; i++) { + byte byte0 = md[i]; + buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; + buf[k++] = hexDigits[byte0 & 0xf]; + } + return new String(buf); + } catch (Exception e) { + // TODO: handle exception + return null; + } + } + public static String getRequest(String url, Map<String, String> params) { + // 构造HttpClient实例 + HttpClient client = new HttpClient(); + // 拼接参数 + String paramStr = ""; + for (String key : params.keySet()) { + paramStr = paramStr + "&" + key + "=" + params.get(key); + } + paramStr = paramStr.substring(1); + // 创建GET方法的实例 + GetMethod method = new GetMethod(url + "?" + paramStr); + // 接收返回结果 + String result = null; + try { + // 执行HTTP GET方法请求 + client.executeMethod(method); + // 返回处理结果 + result = method.getResponseBodyAsString(); + } catch (HttpException e) { + // 发生致命的异常,可能是协议不对或者返回的内容有问题 + System.out.println("请检查输入的URL!"); + e.printStackTrace(); + } catch (IOException e) { + // 发生网络异常 + System.out.println("发生网络异常!"); + e.printStackTrace(); + } finally { + // 释放链接 + method.releaseConnection(); + // 关闭HttpClient实例 + if (client != null) { + ((SimpleHttpConnectionManager) client + .getHttpConnectionManager()).shutdown(); + client = null; + } + } + return result; + } + + + /** + * 发送网络请求 + * @param url + * @return + */ + public static String sendNetRequest(String url, Map<String, String> params) { + // 构造HttpClient实例 + HttpClient client = new HttpClient(); + String paramStr = ""; + for (String key : params.keySet()) { + paramStr = paramStr + "&" + key + "=" + params.get(key); + } + paramStr = paramStr.substring(1); + System.err.println(url + "?" + paramStr); + // 创建GET方法的实例 + GetMethod method = new GetMethod(url + "?" + paramStr); + // 接收返回结果 + String result = null; + try { + // 执行HTTP GET方法请求 + client.executeMethod(method); + // 返回处理结果 + result = method.getResponseBodyAsString(); + } catch (HttpException e) { + // 发生致命的异常,可能是协议不对或者返回的内容有问题 + System.out.println("请检查输入的URL!"); + e.printStackTrace(); + } catch (IOException e) { + // 发生网络异常 + System.out.println("发生网络异常!"); + e.printStackTrace(); + } finally { + // 释放链接 + method.releaseConnection(); + // 关闭HttpClient实例 + if (client != null) { + ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); + client = null; + } + } + return result; + } + + + + /** + * jsonp跨域请求数据响应<br/> + * 方法名:responsejsonpData<br/> + * @author:Mryang<br/> + * @createTime:2016年7月31日-下午11:17:31 <br/> + * @tel: 15198268054<br/> + * @param request + * @param response + * @param map void<br/> + * @exception <br/> + * @since 1.0.0 + */ + public void responsejsonpData(HttpServletRequest request, HttpServletResponse response, Map<String, Object> map) { + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Type", "text/html;Charset=utf-8"); + try { + PrintWriter writer = response.getWriter(); + String params = request.getParameter("callback"); + String json = JSONObject.toJSONString(map); + writer.print(params+ "("+json+")"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + + + + + + + + + + + +} diff --git a/cloud-server-other/src/main/resources/mapper/TGameRecordMapper.xml b/cloud-server-other/src/main/resources/mapper/TGameRecordMapper.xml new file mode 100644 index 0000000..12269bc --- /dev/null +++ b/cloud-server-other/src/main/resources/mapper/TGameRecordMapper.xml @@ -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.other.mapper.TGameRecordMapper"> + + +</mapper> -- Gitblit v1.7.1