From 1d07f8271751880bdfbf3ea41e696f9ee719888b Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期四, 17 八月 2023 08:48:36 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai --- cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICoursePackageService.java | 170 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java | 4 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageStudentController.java | 121 cloud-server-activity/src/main/java/com/dsh/activity/model/request/PointMercharsVo.java | 38 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponCity.java | 65 cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_edit.html | 2 cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml | 23 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICourseService.java | 8 cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_add.html | 2 cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java | 15 cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java | 41 cloud-server-management/src/main/webapp/WEB-INF/view/blackboardBlank.html | 2 cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java | 4 cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TIntegral_add.html | 27 cloud-server-activity/src/main/java/com/dsh/activity/model/request/CouponDataVo.java | 8 cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageSchedulingList.java | 20 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js | 62 cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageMapper.java | 11 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html | 107 cloud-server-activity/src/main/java/com/dsh/activity/model/request/IntegralGoodsOfSearch.java | 29 cloud-server-activity/src/main/resources/mapper/CouponMapper.xml | 15 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageSchedulingController.java | 61 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryExamineCoursePackageLists.java | 36 cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java | 107 cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java | 156 cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java | 131 cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageSchedulingMapper.java | 26 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java | 11 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html | 43 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/PointMercharsVo.java | 38 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java | 38 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java | 35 cloud-server-course/src/main/java/com/dsh/course/model/WeekEnum.java | 51 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/examineCoursePackage.html | 82 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_edit.html | 154 cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TIntegral.html | 6 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java | 40 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 56 cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageStudentList.java | 28 cloud-server-management/src/main/webapp/WEB-INF/view/system/tEnsureIncomeRule/tEnsureIncomeRule_edit.html | 2 cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java | 6 cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java | 37 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java | 127 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java | 9 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/IntegralGoodsOfSearch.java | 29 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponRecordQuery.java | 23 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java | 138 cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html | 4 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java | 11 cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java | 61 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageDiscount.html | 86 cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_edit.html | 2 cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java | 5 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CancelledClasses.java | 69 cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java | 14 cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java | 4 cloud-server-course/src/main/java/com/dsh/course/model/QueryExamineCoursePackageLists.java | 36 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java | 32 cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html | 2 cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java | 25 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html | 241 + cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml | 30 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java | 54 cloud-server-management/src/main/webapp/static/modular/system/course/course_info.js | 25 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html | 58 cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user.html | 6 cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_chpwd.html | 2 cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCoupon.js | 124 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageDiscount.js | 819 ++++ cloud-server-activity/src/main/java/com/dsh/activity/model/CouponRecordQuery.java | 23 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/examineCoursePackage_info.html | 229 + cloud-server-management/src/main/webapp/static/modular/system/coursePackage/examineCoursePackage.js | 185 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js | 428 ++ cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageScheduling.java | 86 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java | 128 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java | 578 ++ cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/manualReservation.html | 42 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html | 8 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TCity_edit.html | 98 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_pay.html | 48 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCoupon.html | 5 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TStoreList.html | 58 cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponInfo.js | 224 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java | 444 ++ cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponRecord.js | 264 + cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageSchedulingService.java | 18 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponRecord.html | 45 cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml | 61 cloud-server-course/src/main/java/com/dsh/course/model/QueryRegistrationRecord.java | 28 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java | 1 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html | 53 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java | 25 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/Coupon.java | 2 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageStudent.java | 39 cloud-server-activity/src/main/java/com/dsh/activity/entity/CouponCity.java | 2 cloud-server-course/src/main/resources/mapper/TCoursePackageMapper.xml | 35 cloud-server-management/src/main/webapp/static/modular/system/tGoods/tPay_info.js | 99 cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js | 448 ++ cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java | 9 cloud-server-course/src/main/java/com/dsh/course/entity/CancelledClasses.java | 7 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java | 191 cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_edit.html | 2 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java | 12 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageSchedulingClient.java | 43 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageStudentList.java | 28 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentConfigController.java | 55 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CouponDataVo.java | 8 cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java | 21 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java | 581 ++ cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 110 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCourseController.java | 13 cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java | 12 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CancelledClassesClient.java | 21 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentConfigClient.java | 41 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java | 9 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageSchedulingList.java | 20 cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java | 13 cloud-server-course/src/main/java/com/dsh/course/model/QueryWalkInStudentList.java | 28 cloud-server-management/src/main/webapp/static/modular/system/tGoods/TStoreInfo.js | 157 cloud-server-activity/src/main/java/com/dsh/activity/model/request/PointMercharsPayedVo.java | 24 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryRegistrationRecord.java | 28 cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java | 7 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java | 11 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponInfo.html | 415 ++ cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageStudent.java | 71 cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord.html | 2 cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java | 12 cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods.js | 227 + cloud-server-course/src/main/java/com/dsh/course/controller/CancelledClassesController.java | 31 cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageStudent.java | 39 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageScheduling.java | 56 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java | 21 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity_edit.html | 2 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_add.html | 363 + cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java | 30 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js | 210 + cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java | 14 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html | 8 cloud-server-management/src/main/webapp/static/modular/system/tIntegral/tIntegral.js | 51 cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java | 11 cloud-server-management/src/main/java/com/dsh/course/feignClient/account/IntegralClient.java | 3 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TIntegralController.java | 9 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java | 8 cloud-server-activity/src/main/java/com/dsh/activity/service/ICouponService.java | 6 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/examineCoursePackage_info.js | 43 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js | 430 ++ cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_info.html | 202 cloud-server-course/src/main/java/com/dsh/CourseApplication.java | 2 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java | 2 cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml | 32 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackageDiscount.java | 67 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryWalkInStudentList.java | 28 /dev/null | 181 cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_view.html | 2 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java | 53 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageStudentClient.java | 71 cloud-server-management/src/main/webapp/WEB-INF/view/system/menu/menu_edit.html | 2 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js | 159 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/PointMercharsPayedVo.java | 24 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/manualReservation.js | 96 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods.html | 78 cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_add.html | 2 162 files changed, 11,776 insertions(+), 396 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java index 97015db..fccd65a 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java @@ -1,5 +1,6 @@ package com.dsh.account.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.dsh.account.entity.TAppUser; import com.dsh.account.model.*; @@ -19,6 +20,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.List; import java.util.List; import java.util.Map; @@ -377,4 +379,16 @@ return new TAppUser(); } } + + + /** + * 根据名称模糊搜索用户 + * @param name + * @return + */ + @ResponseBody + @PostMapping("/appUser/queryAppUserListByName") + public List<TAppUser> queryAppUserListByName(@RequestBody String name){ + return appUserService.list(new QueryWrapper<TAppUser>().eq("state", 1).like("name", name)); + } } 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 7a37553..85db5fe 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 @@ -125,4 +125,16 @@ TStudent student = studentService.getById(id); return student; } + + + /** + * 根据名称模糊搜索学员 + * @param name + * @return + */ + @ResponseBody + @PostMapping("/student/queryStudentListByName") + public List<TStudent> queryStudentListByName(@RequestBody String name){ + return studentService.list(new QueryWrapper<TStudent>().eq("state", 1).like("name", name)); + } } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java index e83e1c8..4829342 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java @@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.activity.entity.Coupon; import com.dsh.activity.entity.CouponCity; import com.dsh.activity.entity.CouponStore; import com.dsh.activity.entity.UserCoupon; +import com.dsh.activity.feignclient.account.AppUserClient; import com.dsh.activity.feignclient.account.CityClient; import com.dsh.activity.feignclient.account.StoreStaffClient; import com.dsh.activity.feignclient.account.model.TCityManager; @@ -19,6 +21,7 @@ import com.dsh.activity.feignclient.other.model.CityDataAndProvinceDataVo; import com.dsh.activity.feignclient.other.model.Store; import com.dsh.activity.model.CouponListVo; +import com.dsh.activity.model.CouponRecordQuery; import com.dsh.activity.model.request.CommodityRequest; import com.dsh.activity.model.request.CouponDataVo; import com.dsh.activity.model.request.CouponPackageReq; @@ -31,6 +34,7 @@ import com.dsh.activity.util.ResultUtil; import com.dsh.activity.util.TokenUtil; import com.dsh.activity.util.ToolUtil; +import com.google.gson.Gson; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; @@ -82,6 +86,9 @@ @Resource private CouponCityService cityService; + + @Autowired + private AppUserClient appUserClient; @@ -379,26 +386,28 @@ @ResponseBody @PostMapping("/base/coupon/insertIntoCouponData") public boolean saveCouponData(@RequestBody CouponDataVo dataVo){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { System.out.println(dataVo); Coupon coupon = new Coupon(); coupon.setName(dataVo.getCouponName()); coupon.setType(dataVo.getPrescription()); HashMap<String, Object> stringObjectHashMap = new HashMap<>(); + Gson gson = new Gson(); switch (dataVo.getPrescription()){ // {"conditionalAmount":50,"deductionAmount":10,"experienceName":""} case 1: stringObjectHashMap.put("conditionalAmount",dataVo.getCondition()); stringObjectHashMap.put("deductionAmount",dataVo.getSubtraction()); - coupon.setContent(stringObjectHashMap.toString()); + coupon.setContent(gson.toJson(stringObjectHashMap)); break; case 2: stringObjectHashMap.put("conditionalAmount",dataVo.getDiscount()); - coupon.setContent(stringObjectHashMap.toString()); + coupon.setContent(gson.toJson(stringObjectHashMap)); break; case 3: stringObjectHashMap.put("experienceName",dataVo.getExperience()); - coupon.setContent(stringObjectHashMap.toString()); + coupon.setContent(gson.toJson(stringObjectHashMap)); break; default: break; @@ -406,45 +415,71 @@ coupon.setIllustrate(dataVo.getIllustrate()); coupon.setDistributionMethod(dataVo.getDistributionMethod()); coupon.setRedemptionMethod(dataVo.getExchangeMethod()); - coupon.setCash(dataVo.getRequiredCash()); - coupon.setIntegral(BigDecimal.valueOf(dataVo.getRequiredPoints())); + switch (dataVo.getExchangeMethod()){ + case 1: + coupon.setIntegral(BigDecimal.valueOf(dataVo.getRequiredPoints())); + break; + case 2: + coupon.setCash(dataVo.getRequiredCash()); + coupon.setIntegral(BigDecimal.valueOf(dataVo.getRequiredPoints())); + break; + case 3: + coupon.setCash(dataVo.getRequiredCash()); + break; + default: + break; + } coupon.setQuantityIssued(dataVo.getQuantityIssued()); coupon.setPickUpQuantity(dataVo.getPickUpQuantity()); coupon.setUseScope(dataVo.getCompany()); + coupon.setUserPopulation(dataVo.getUserGroup()); + String timeDeal = dataVo.getPeriodOfValidity(); + if (ToolUtil.isNotEmpty(timeDeal)){ + String[] split = timeDeal.split(" - "); + coupon.setStartTime(simpleDateFormat.parse(split[0])); + coupon.setEndTime(simpleDateFormat.parse(split[1])); + } coupon.setAuditStatus(1); coupon.setStatus(1); + coupon.setState(1); coupon.setInsertTime(new Date()); coupon.setCover(dataVo.getGoodImg()); - List<String> goodImgs = dataVo.getGoodImgs(); - StringBuilder builder = new StringBuilder(); - if (goodImgs.size() > 0){ - if (goodImgs.size() == 1){ - coupon.setProductImages(goodImgs.get(0)); + String goodImgs = dataVo.getGoodImgs(); + String[] imgsSplit = goodImgs.split(","); + if (imgsSplit.length > 0){ + if (imgsSplit.length == 1){ + coupon.setProductImages(imgsSplit[0]); }else { - for (String goodImg : goodImgs) { - builder.append(goodImg).append(","); - } - builder.deleteCharAt(builder.lastIndexOf(",")); - coupon.setProductImages(builder.toString()); + coupon.setProductImages(goodImgs); } } - coupon.setPublisherType(dataVo.getUserType()); if (dataVo.getUserType() == 1){ + coupon.setPublisherType(2); + } + if (dataVo.getUserType() == 2){ + coupon.setPublisherType(1); coupon.setCityManagerId(dataVo.getCityManagerId()); } boolean save = couponService.save(coupon); if (save){ - if (dataVo.getCompany() == 2){ - for (Integer storeId : dataVo.getStoreIds()) { + if (dataVo.getCompany() == 3){ + String[] split = dataVo.getStoreIds().split(","); + for (String storeId : split) { CouponStore couponStore = new CouponStore(); couponStore.setCouponId(coupon.getId()); - couponStore.setStoreId(storeId); + couponStore.setStoreId(Integer.parseInt(storeId)); couStoreService.save(couponStore); } } - List<Integer> cityIds = dataVo.getCityIds(); - if (dataVo.getCompany() == 3 && cityIds.size() > 0 ){ - List<CityDataAndProvinceDataVo> cityAndProvince = regionClient.getCityAndProvince(cityIds); + String cityIds = dataVo.getCityIds(); + String[] split = cityIds.split(","); + List<Integer> cityIdss = new ArrayList<>(); + if (dataVo.getCompany() == 2 && split.length > 0 ){ + for (String s : split) { + int intValue = Integer.parseInt(s); + cityIdss.add(intValue); + } + List<CityDataAndProvinceDataVo> cityAndProvince = regionClient.getCityAndProvince(cityIdss); for (CityDataAndProvinceDataVo cityId : cityAndProvince) { CouponCity couponCity = new CouponCity(); couponCity.setCouponId(coupon.getId()); @@ -452,6 +487,7 @@ couponCity.setCity(cityId.getCityName()); couponCity.setProvinceCode(cityId.getProvinceCode()); couponCity.setProvince(cityId.getProvinceName()); + System.out.println(couponCity); cityService.save(couponCity); } } @@ -462,4 +498,31 @@ } } + @ResponseBody + @PostMapping("/base/coupon/queryCity") + public List<CouponCity> queryCity(@RequestBody Integer id){ + List<CouponCity> list = cityService.list(new LambdaQueryWrapper<CouponCity>().eq(CouponCity::getCouponId, id)); + return list; + } + + @ResponseBody + @PostMapping("/base/coupon/queryStore") + public List<Integer> queryStore(@RequestBody Integer id){ + return couStoreService.list(new LambdaQueryWrapper<CouponStore>().eq(CouponStore::getCouponId,id)).stream().map(CouponStore::getStoreId).collect(Collectors.toList()); + } + + + @PostMapping("/base/coupon/listRecord") + @ResponseBody + public List<Map<String,Object>> listRecord(@RequestBody CouponRecordQuery ofSearch){ + Page<Object> objectPage = new Page<>(ofSearch.getOffset(), ofSearch.getLimit()); + return couponService.listRecord(objectPage,ofSearch.getId(),ofSearch.getIds(),ofSearch.getType()); + } + + + + @PostMapping("/base/coupon/updateType") + public void updateType(@RequestBody Long id){ + couponService.updateType(id); + } } 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 24697ee..b176c57 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 @@ -12,8 +12,7 @@ import com.dsh.activity.feignclient.other.StoreClient; import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse; import com.dsh.activity.model.PointMerchandiseVo; -import com.dsh.activity.model.request.AppUserGoodResp; -import com.dsh.activity.model.request.CommodityRequest; +import com.dsh.activity.model.request.*; import com.dsh.activity.service.*; import com.dsh.activity.util.GDMapGeocodingUtil; import com.dsh.activity.util.StrUtils; @@ -23,7 +22,11 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.xml.crypto.Data; +import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -527,4 +530,153 @@ } + + @ResponseBody + @PostMapping("/base/pointMerchars/queryGoodsListSearch") + public List<Map<String,Object>> getIntegralGoodsListOfSearch(@RequestBody IntegralGoodsOfSearch ofSearch){ + System.out.println(ofSearch); + List<Map<String, Object>> mapList = pmdsService.queryGoodsListOfSearch(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; + } + + public int dealTimeStatus(String startTime, String endTime){ + LocalDate now = LocalDate.now(); + LocalDate start = LocalDate.parse(startTime); + LocalDate end = LocalDate.parse(endTime); + if (now.isBefore(start)) { + return 1; // 未开始 + } else if (now.isAfter(end)) { + return 3; // 已结束 + } else { + return 2; // 已开始 + } + } + + /** + * + * @param mapLists + * @param timeType 1=未开始 2=已开始 3=已结束 + * @return + */ + public List<Map<String, Object>> dealTimeData(List<Map<String, Object>> mapLists,Integer timeType){ + Date currentDate = new Date(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + switch (timeType){ + case 1: + return mapLists.stream() + .filter(event -> { + try { + return simpleDateFormat.parse((String) event.get("startTime")).after(currentDate); + } catch (ParseException e) { + throw new RuntimeException(e); + } + }) + .collect(Collectors.toList()); + case 2: + return mapLists.stream() + .filter(event -> { + try { + return simpleDateFormat.parse((String) event.get("startTime")).before(currentDate) && simpleDateFormat.parse((String) event.get("endTime")).after(currentDate); + } catch (ParseException e) { + throw new RuntimeException(e); + } + }) + .collect(Collectors.toList()); + case 3: + return mapLists.stream() + .filter(event -> { + try { + return simpleDateFormat.parse((String) event.get("endTime")).before(currentDate); + } catch (ParseException e) { + throw new RuntimeException(e); + } + }) + .collect(Collectors.toList()); + default: + break; + } + return null; + } + + + @PostMapping("/base/pointMerchars/queryPointMerchaseDetailOfId") + public PointMercharsVo queryPointMerchaseDetailOfId(@RequestBody Integer pointMercharsId){ + PointMercharsVo vo = new PointMercharsVo(); + PointsMerchandise byId = pmdsService.getById(pointMercharsId); + if (ToolUtil.isNotEmpty(byId)){ + vo.setName(byId.getName()); + vo.setCover(byId.getCover()); + vo.setPics(byId.getProductImages()); + vo.setQuantityIssued(byId.getQuantityIssued()); + vo.setPickUpQuantity(byId.getPickUpQuantity()); + vo.setSort(byId.getSort()); + vo.setContent(byId.getRedemptionInstructions()); + } + return vo; + } + + + @PostMapping("/base/pointMerchars/updateGoodsGroudingStatus") + boolean updateGoodsGroudingStatus(@RequestBody Map<String,Integer> map){ + Integer id = map.get("id"); + Integer type = map.get("type"); + System.out.println(id); + System.out.println(type); + try { + PointsMerchandise byId = pmdsService.getById(id); + byId.setShelves(type); + pmdsService.updateById(byId); + return true; + }catch (Exception e){ + return false; + } + } + + + @ResponseBody + @PostMapping("/base/pointMerchars/queryUserPayedGoodsList") + public List<Map<String, Object>> queryUserPayedGoodsList(@RequestBody PointMercharsPayedVo pointMercharsPayedVo){ + System.out.println(pointMercharsPayedVo); + List<Map<String, Object>> mapList = new ArrayList<>(); + LambdaQueryWrapper<UserPointsMerchandise> userPointsMerchandiseLambdaQueryWrapper = new LambdaQueryWrapper<>(); + userPointsMerchandiseLambdaQueryWrapper.eq(UserPointsMerchandise::getPointsMerchandiseId,pointMercharsPayedVo.getId()); + if (ToolUtil.isNotEmpty(pointMercharsPayedVo.getStatus())){ + userPointsMerchandiseLambdaQueryWrapper.eq(UserPointsMerchandise::getStatus,pointMercharsPayedVo.getStatus()); + } + List<UserPointsMerchandise> list = upmseService.list(userPointsMerchandiseLambdaQueryWrapper); + System.out.println(list); + if (list.size() > 0 ){ + for (UserPointsMerchandise pointsMerchandise : list) { + Map<String, Object> map = new HashMap<>(); + map.put("id",pointsMerchandise.getId()); + map.put("userId",pointsMerchandise.getUserId()); + map.put("status", pointsMerchandise.getStatus()); + mapList.add(map); + } + } + System.out.println(mapList); + return mapList; + } + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/CouponCity.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/CouponCity.java index 92edd0c..5d818af 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/CouponCity.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/CouponCity.java @@ -25,7 +25,6 @@ @TableName("t_coupon_city") public class CouponCity extends Model<CouponCity> { - private static final long serialVersionUID = 1L; /** * 主键 @@ -35,6 +34,7 @@ /** * 优惠券id */ + @TableField("couponId") private Integer couponId; /** * 省 diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java index dc45750..71d39e9 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java @@ -19,4 +19,5 @@ */ @PostMapping("/base/appUser/queryAppUser") AppUser queryAppUser(Integer appUserId); + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java index c522a07..b622619 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java @@ -38,4 +38,8 @@ @Param("page")Page<Map<String, Object>> page); + List<Map<String, Object>> listRecord(@Param("objectPage") Page<Object> objectPage, @Param("id") Integer id, @Param("ids") List<Integer> ids, @Param("type") Integer type); + + + void updateType(@Param("id") Long id); } 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 4e3fe33..1293821 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 @@ -1,7 +1,12 @@ package com.dsh.activity.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.activity.entity.PointsMerchandise; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; /** * <p> @@ -13,4 +18,12 @@ */ public interface PointsMerchandiseMapper extends BaseMapper<PointsMerchandise> { + List<Map<String, Object>> queryGoodsListOfSearch(@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); + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java index 3b5bbf0..ab12b53 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java @@ -1,7 +1,12 @@ package com.dsh.activity.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.activity.entity.UserPointsMerchandise; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; /** * <p> diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/CouponRecordQuery.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/CouponRecordQuery.java new file mode 100644 index 0000000..f6054d6 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/CouponRecordQuery.java @@ -0,0 +1,23 @@ +package com.dsh.activity.model; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class CouponRecordQuery { + + private long offset; + + private long limit; + + private Integer id; + + private List<Integer> ids; + + private Integer type; + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/request/CouponDataVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/CouponDataVo.java index e24adcf..ab4876c 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/model/request/CouponDataVo.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/CouponDataVo.java @@ -9,7 +9,7 @@ @Data public class CouponDataVo { /** - * 用户类型1=城市管理者 2=平台管理者 + * 用户类型2=城市管理者 1=平台管理者 */ Integer userType; /** @@ -83,7 +83,7 @@ /** * 图片列表 */ - List<String> goodImgs; + String goodImgs; /** * 适用范围 */ @@ -91,9 +91,9 @@ /** * 城市code */ - List<Integer> cityIds; + String cityIds; /** * 门店列表 */ - List<Integer> storeIds; + String storeIds; } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/request/IntegralGoodsOfSearch.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/IntegralGoodsOfSearch.java new file mode 100644 index 0000000..6c2ef5e --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/IntegralGoodsOfSearch.java @@ -0,0 +1,29 @@ +package com.dsh.activity.model.request; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class IntegralGoodsOfSearch { + + private String name; + + private Integer type; + + private Integer redemptionMethod; + + private Integer userPopulation; + + private Integer activeStatus; + + private Integer state; + + private Page<Map<String, Object>> page; +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/request/PointMercharsPayedVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/PointMercharsPayedVo.java new file mode 100644 index 0000000..271e056 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/PointMercharsPayedVo.java @@ -0,0 +1,24 @@ +package com.dsh.activity.model.request; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PointMercharsPayedVo { + + Integer id; + + String name; + + String phone; + + Integer status; + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/request/PointMercharsVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/PointMercharsVo.java new file mode 100644 index 0000000..e781c0e --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/PointMercharsVo.java @@ -0,0 +1,38 @@ +package com.dsh.activity.model.request; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PointMercharsVo { + + String name; + /** + * 封面图 + */ + String cover; + /** + * 图片 + */ + String pics; + /** + * 发放数量 + */ + Integer quantityIssued; + /** + * 限领数量 + */ + Integer pickUpQuantity; + /** + * 商品说明 + */ + String content; + /** + * 排序 + */ + Integer sort; +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/ICouponService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/ICouponService.java index 77c8a58..3f7fcf6 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/service/ICouponService.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/ICouponService.java @@ -1,11 +1,14 @@ package com.dsh.activity.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.activity.entity.Coupon; import com.dsh.activity.feignclient.model.CouponExamineListSearch; import com.dsh.activity.feignclient.model.CouponListOfSearch; import com.dsh.activity.model.CouponListVo; +import com.dsh.activity.model.request.IntegralGoodsOfSearch; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -33,4 +36,7 @@ List<Map<String, Object>> queryCouponExamineList(CouponExamineListSearch ofSearch); + List<Map<String, Object>> listRecord(Page<Object> objectPage, Integer id, List<Integer> ids, Integer type); + + void updateType(Long id); } 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 c658be5..a27221b 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 @@ -2,6 +2,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.activity.entity.PointsMerchandise; +import com.dsh.activity.model.request.IntegralGoodsOfSearch; + +import java.util.List; +import java.util.Map; /** * <p> @@ -13,4 +17,6 @@ */ public interface PointsMerchandiseService extends IService<PointsMerchandise> { + List<Map<String, Object>> queryGoodsListOfSearch(IntegralGoodsOfSearch ofSearch); + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java index b8c2f1e..81e58a7 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java @@ -2,6 +2,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.activity.entity.UserPointsMerchandise; +import com.dsh.activity.model.request.PointMercharsPayedVo; + +import java.util.List; +import java.util.Map; /** * <p> diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java index 1da2f4b..1483b1c 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.activity.entity.Coupon; import com.dsh.activity.feignclient.account.AppUserClient; @@ -14,6 +15,7 @@ import com.dsh.activity.feignclient.model.CouponListOfSearch; import com.dsh.activity.mapper.CouponMapper; import com.dsh.activity.model.CouponListVo; +import com.dsh.activity.model.request.IntegralGoodsOfSearch; import com.dsh.activity.service.ICouponService; import org.springframework.stereotype.Service; @@ -111,4 +113,14 @@ return this.baseMapper.queryCouponExamineList(ofSearch.getName(),ofSearch.getType(),ofSearch.getUserPopulation(),ofSearch.getDistributionMethod(),ofSearch.getAuditStatus(),ofSearch.getPage()); } + @Override + public List<Map<String, Object>> listRecord(Page<Object> objectPage, Integer id, List<Integer> ids, Integer type) { + return this.baseMapper.listRecord(objectPage,id,ids,type); + } + + @Override + public void updateType(Long id) { + this.baseMapper.updateType(id); + } + } 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 4809c45..3709d22 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 @@ -3,8 +3,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.activity.entity.PointsMerchandise; import com.dsh.activity.mapper.PointsMerchandiseMapper; +import com.dsh.activity.model.request.IntegralGoodsOfSearch; import com.dsh.activity.service.PointsMerchandiseService; import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; /** * <p> @@ -17,4 +21,9 @@ @Service public class PointsMerchandiseServiceImpl extends ServiceImpl<PointsMerchandiseMapper, PointsMerchandise> implements PointsMerchandiseService { + @Override + public List<Map<String, Object>> queryGoodsListOfSearch(IntegralGoodsOfSearch ofSearch) { + return this.baseMapper.queryGoodsListOfSearch(ofSearch.getName(),ofSearch.getType(),ofSearch.getRedemptionMethod(), + ofSearch.getUserPopulation(),ofSearch.getActiveStatus(),ofSearch.getState(),ofSearch.getPage()); + } } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java index c989bb4..0ba9902 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java @@ -3,9 +3,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.activity.entity.UserPointsMerchandise; import com.dsh.activity.mapper.UserPointsMerchandiseMapper; +import com.dsh.activity.model.request.PointMercharsPayedVo; import com.dsh.activity.service.UserPointsMerchandiseService; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; + /** * <p> * 用户积分商品领取记录 服务实现类 diff --git a/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml b/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml index 491e235..a09094e 100644 --- a/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml +++ b/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml @@ -1,6 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.activity.mapper.CouponMapper"> + <update id="updateType"> + update t_user_coupon set status = 2 where id =#{id} + </update> <select id="queryConponRuleOfJson" resultType="java.util.Map"> SELECT JSON_EXTRACT(content, "$.conditionalAmount") as conditionalAmount, @@ -24,7 +27,8 @@ quantityIssued, pickUpQuantity, `status`, - state + state, + illustrate from t_coupon where 1 = 1 <if test="name != null"> @@ -78,6 +82,15 @@ </if> order by insertTime desc </select> + <select id="listRecord" resultType="java.util.Map"> + select id,userId,status from t_user_coupon where couponId =#{id} + and userId in <foreach collection="ids" separator="," open="(" item="i" close=")"> + #{i} + </foreach> + <if test="type !=null"> + and status =#{type} + </if> + </select> </mapper> diff --git a/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml b/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml index 8e05102..38bcc37 100644 --- a/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml +++ b/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml @@ -3,4 +3,36 @@ <mapper namespace="com.dsh.activity.mapper.PointsMerchandiseMapper"> + <select id="queryGoodsListOfSearch" 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 + from t_points_merchandise + where 1 = 1 + <if test="name != null"> + and `name` like concat('%', #{name}, '%') + </if> + <if test="type != null"> + and type = #{type} + </if> + <if test="redemptionMethod != null"> + and redemptionMethod = #{redemptionMethod} + </if> + <if test="userPopulation != null"> + and userPopulation = #{userPopulation} + </if> + <if test="state != null"> + and `state` = #{state} + </if> + order by insertTime desc + </select> </mapper> diff --git a/cloud-server-course/src/main/java/com/dsh/CourseApplication.java b/cloud-server-course/src/main/java/com/dsh/CourseApplication.java index 78da217..081c0bc 100644 --- a/cloud-server-course/src/main/java/com/dsh/CourseApplication.java +++ b/cloud-server-course/src/main/java/com/dsh/CourseApplication.java @@ -11,6 +11,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.scheduling.annotation.EnableScheduling; import springfox.documentation.swagger2.annotations.EnableSwagger2; import javax.annotation.PostConstruct; @@ -20,6 +21,7 @@ * @author jason */ @EnableSwagger2 +@EnableScheduling @EnableFeignClients @MBCloudApplication @Import({WebConfig.class}) diff --git a/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java b/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java index 66183bb..eb205d6 100644 --- a/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java +++ b/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java @@ -94,6 +94,14 @@ props4.setProperty("algorithm-expression", "t_user_video_details$->{appUserId % 5 + 1}"); result1.getShardingAlgorithms().put("t_user_video_details-inline", new AlgorithmConfiguration("INLINE", props4)); result1.getKeyGenerators().put("t_user_video_details-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties())); + + //分片规则配置 + result1.getTables().add(getCoursePackageSchedulingTableRuleConfiguration()); + Properties props5 = new Properties(); + props5.setProperty("algorithm-expression", "t_course_package_scheduling$->{coursePackageId % 5 + 1}"); + result1.getShardingAlgorithms().put("t_course_package_scheduling-inline", new AlgorithmConfiguration("INLINE", props5)); + result1.getKeyGenerators().put("t_course_package_scheduling-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties())); + linkedList.add(result1); return linkedList; @@ -125,6 +133,7 @@ + /** * 分片算法配置 * @return @@ -149,4 +158,16 @@ return result; } + + /** + * 分片算法配置 + * @return + */ + private ShardingTableRuleConfiguration getCoursePackageSchedulingTableRuleConfiguration() { + ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_course_package_scheduling", "m_$->{0}.t_course_package_scheduling$->{1..5}");//30 + result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("coursePackageId", "t_course_package_scheduling-inline")); + result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_course_package_scheduling-snowflake")); + return result; + } + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CancelledClassesController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CancelledClassesController.java new file mode 100644 index 0000000..39d5b40 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CancelledClassesController.java @@ -0,0 +1,31 @@ +package com.dsh.course.controller; + +import com.dsh.course.entity.CancelledClasses; +import com.dsh.course.service.CancelledClassesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author zhibing.pu + * @Date 2023/8/12 3:47 + */ +@RestController +@RequestMapping("") +public class CancelledClassesController { + + @Autowired + private CancelledClassesService cancelledClassesService; + + + + + /** + * 添加数据 + * @param cancelledClasses + */ + @ResponseBody + @PostMapping("/cancelledClasses/addCancelledClasses") + public void addCancelledClasses(@RequestBody CancelledClasses cancelledClasses){ + cancelledClassesService.save(cancelledClasses); + } +} 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 c312630..e171113 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 @@ -345,4 +345,16 @@ courseService.updateById(course); } } + + + /** + * 根据类型获取数据 + * @param type + * @return + */ + @ResponseBody + @PostMapping("/course/queryCourseByType") + public List<TCourse> queryCourseByType(@RequestBody Integer type){ + return courseService.list(new QueryWrapper<TCourse>().eq("type", type).eq("state", 1)); + } } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java index 2a36239..75ed806 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java @@ -11,6 +11,7 @@ import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.model.BaseVo; import com.dsh.course.model.QueryCoursePackageLists; +import com.dsh.course.model.QueryExamineCoursePackageLists; import com.dsh.course.model.vo.response.Details; import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; import com.dsh.course.service.ICoursePackagePaymentConfigService; @@ -182,4 +183,43 @@ Page<Map<String, Object>> mapPage = page.setRecords(coursePackageService.queryCoursePackageLists(page, queryCoursePackageLists)); return mapPage; } + + + /** + * 添加数据 + * @param coursePackage + * @return + */ + @ResponseBody + @PostMapping("/coursePackage/addCoursePackage") + public Integer addCoursePackage(@RequestBody TCoursePackage coursePackage){ + return coursePackageService.addCoursePackage(coursePackage); + } + + + /** + * 修改数据 + * @param coursePackage + */ + @ResponseBody + @PostMapping("/coursePackage/updateCoursePackageById") + public void updateCoursePackageById(@RequestBody TCoursePackage coursePackage){ + coursePackageService.updateCoursePackageById(coursePackage); + } + + + + /** + * 获取课包审核列表 + * @param queryExamineCoursePackageLists + * @return + */ + @ResponseBody + @PostMapping("/coursePackage/queryExamineCoursePackageLists") + public Page<Map<String, Object>> queryExamineCoursePackageLists(@RequestBody QueryExamineCoursePackageLists queryExamineCoursePackageLists){ + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(queryExamineCoursePackageLists.getLimit(), queryExamineCoursePackageLists.getOffset(), + queryExamineCoursePackageLists.getSort(), queryExamineCoursePackageLists.getOrder()); + Page<Map<String, Object>> mapPage = page.setRecords(coursePackageService.queryExamineCoursePackageLists(page, queryExamineCoursePackageLists)); + return mapPage; + } } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java new file mode 100644 index 0000000..d5649f6 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java @@ -0,0 +1,54 @@ +package com.dsh.course.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.dsh.course.entity.TCoursePackageDiscount; +import com.dsh.course.service.TCoursePackageDiscountService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2023/8/8 14:50 + */ +@RestController +@RequestMapping("") +public class CoursePackageDiscountController { + + @Autowired + private TCoursePackageDiscountService coursePackageDiscountService; + + + /** + * 获取课包折扣 + * @param coursePackagePaymentConfigId + * @return + */ + @ResponseBody + @PostMapping("/coursePackageDiscount/queryCoursePackageDiscount") + public List<TCoursePackageDiscount> queryCoursePackageDiscount(@RequestBody Integer coursePackagePaymentConfigId){ + return coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfigId) + .eq("auditStatus", 2)); + } + + + /** + * 编辑课包折扣 + * @param list + */ + @ResponseBody + @PostMapping("/coursePackageDiscount/setCoursePackageDiscount") + public void setCoursePackageDiscount(@RequestBody List<TCoursePackageDiscount> list){ + TCoursePackageDiscount tCoursePackageDiscount = list.get(0); + coursePackageDiscountService.remove(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackageId", tCoursePackageDiscount.getCoursePackageId())); + if(list.size() > 0){ + coursePackageDiscountService.saveBatch(list); + } + } + + + + + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentConfigController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentConfigController.java new file mode 100644 index 0000000..dc5c9f3 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentConfigController.java @@ -0,0 +1,55 @@ +package com.dsh.course.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.dsh.course.entity.CoursePackagePaymentConfig; +import com.dsh.course.service.ICoursePackagePaymentConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2023/8/7 11:46 + */ +@RestController +@RequestMapping("") +public class CoursePackagePaymentConfigController { + + @Autowired + private ICoursePackagePaymentConfigService coursePackagePaymentConfigService; + + + /** + * 添加数据 + * @param coursePackagePaymentConfig + */ + @ResponseBody + @PostMapping("/coursePackagePaymentConfig/addCoursePackagePaymentConfig") + public void addCoursePackagePaymentConfig(@RequestBody CoursePackagePaymentConfig coursePackagePaymentConfig){ + coursePackagePaymentConfigService.save(coursePackagePaymentConfig); + } + + + /** + * 根据课包id获取价格配置 + * @param coursePackageId + * @return + */ + @ResponseBody + @PostMapping("/coursePackagePaymentConfig/queryCoursePackagePaymentConfigList") + public List<CoursePackagePaymentConfig> queryCoursePackagePaymentConfigList(@RequestBody Integer coursePackageId){ + return coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", coursePackageId)); + } + + + /** + * 删除数据 + * @param coursePackageId + */ + @ResponseBody + @PostMapping("/coursePackagePaymentConfig/delCoursePackagePaymentConfig") + public void delCoursePackagePaymentConfig(@RequestBody Integer coursePackageId){ + coursePackagePaymentConfigService.remove(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", coursePackageId)); + } +} 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 dc6c581..a5bbd2e 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.entity.*; import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.StudentClient; @@ -12,6 +13,8 @@ import com.dsh.course.feignclient.other.StoreClient; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.model.BaseVo; +import com.dsh.course.model.QueryRegistrationRecord; +import com.dsh.course.model.QueryWalkInStudentList; import com.dsh.course.model.BillingRequest; import com.dsh.course.model.BillingRequestVo; import com.dsh.course.model.dto.DiscountJsonDto; @@ -822,6 +825,56 @@ } + /** + * 获取课包报名信息列表 + * @param queryRegistrationRecord + * @return + */ + @ResponseBody + @PostMapping("/coursePackagePayment/queryRegistrationRecord") + public Page<Map<String, Object>> queryRegistrationRecord(@RequestBody QueryRegistrationRecord queryRegistrationRecord){ + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(queryRegistrationRecord.getLimit(), queryRegistrationRecord.getOffset(), queryRegistrationRecord.getSort(), queryRegistrationRecord.getOrder()); + Page<Map<String, Object>> mapPage = page.setRecords(packagePaymentService.queryRegistrationRecord(page, queryRegistrationRecord)); + return mapPage; + } + + + /** + * 获取未预约排课学员列表 + * @param queryWalkInStudentList + * @return + */ + @ResponseBody + @PostMapping("/coursePackagePayment/queryWalkInStudentList") + public Page<Map<String, Object>> queryWalkInStudentList(@RequestBody QueryWalkInStudentList queryWalkInStudentList){ + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(queryWalkInStudentList.getLimit(), queryWalkInStudentList.getOffset(), queryWalkInStudentList.getSort(), queryWalkInStudentList.getOrder()); + Page<Map<String, Object>> mapPage = page.setRecords(packagePaymentService.queryWalkInStudentList(page, queryWalkInStudentList)); + return mapPage; + } + + + /** + * 根据id获取数据 + * @param id + * @return + */ + @ResponseBody + @PostMapping("/coursePackagePayment/queryCoursePackagePaymentById") + public TCoursePackagePayment queryCoursePackagePaymentById(@RequestBody Long id){ + return packagePaymentService.getById(id); + } + + + /** + * 修改数据 + * @param coursePackagePayment + */ + @ResponseBody + @PostMapping("/coursePackagePayment/editCoursePackagePayment") + public void editCoursePackagePayment(TCoursePackagePayment coursePackagePayment){ + packagePaymentService.updateById(coursePackagePayment); + } + /** * 上课主页-预约操作 @@ -843,7 +896,7 @@ return ResultUtil.tokenErr(); } TCoursePackagePayment packagePayment = packagePaymentService.getOne(new LambdaQueryWrapper<TCoursePackagePayment>() - .eq(TCoursePackagePayment::getId,courseID ) + .eq(TCoursePackagePayment::getCoursePackageId,courseID ) .eq(TCoursePackagePayment::getAppUserId,appUserId) .eq(TCoursePackagePayment::getStudentId,stuId) ); @@ -863,6 +916,7 @@ coursePackageStudent.setInsertTime(simpleDateFormat.parse(time)); cspsService.updateById(coursePackageStudent); }else { + coursePackageStudent = new CoursePackageStudent(); coursePackageStudent.setAppUserId(appUserId); coursePackageStudent.setStudentId(stuId); coursePackageStudent.setCoursePackageId(packagePayment.getCoursePackageId()); diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageSchedulingController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageSchedulingController.java new file mode 100644 index 0000000..9fb040b --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageSchedulingController.java @@ -0,0 +1,61 @@ +package com.dsh.course.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.entity.CoursePackageScheduling; +import com.dsh.course.model.QueryCoursePackageSchedulingList; +import com.dsh.course.service.ICoursePackageSchedulingService; +import com.dsh.course.util.PageFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2023/8/11 10:58 + */ +@RestController +@RequestMapping("") +public class CoursePackageSchedulingController { + + @Autowired + private ICoursePackageSchedulingService coursePackageSchedulingService; + + + /** + * 获取课包排课列表 + * @param queryCoursePackageSchedulingList + * @return + */ + @ResponseBody + @PostMapping("/coursePackageScheduling/queryCoursePackageSchedulingList") + public Page<Map<String, Object>> queryCoursePackageSchedulingList(@RequestBody QueryCoursePackageSchedulingList queryCoursePackageSchedulingList){ + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(queryCoursePackageSchedulingList.getLimit(), queryCoursePackageSchedulingList.getOffset(), + queryCoursePackageSchedulingList.getSort(), queryCoursePackageSchedulingList.getOrder()); + Page<Map<String, Object>> mapPage = page.setRecords(coursePackageSchedulingService.queryCoursePackageSchedulingList(page, queryCoursePackageSchedulingList)); + return mapPage; + } + + + /** + * 根据id获取数据 + * @param id + * @return + */ + @ResponseBody + @PostMapping("/coursePackageScheduling/queryCoursePackageSchedulingById") + public CoursePackageScheduling queryCoursePackageSchedulingById(@RequestBody Long id){ + return coursePackageSchedulingService.getById(id); + } + + + /** + * 编辑数据 + * @param coursePackageScheduling + */ + @ResponseBody + @PostMapping("/coursePackageScheduling/editCoursePackageScheduling") + public void editCoursePackageScheduling(@RequestBody CoursePackageScheduling coursePackageScheduling){ + coursePackageSchedulingService.updateById(coursePackageScheduling); + } +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageStudentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageStudentController.java new file mode 100644 index 0000000..0cce987 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageStudentController.java @@ -0,0 +1,121 @@ +package com.dsh.course.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.entity.CoursePackageStudent; +import com.dsh.course.model.QueryCoursePackageStudent; +import com.dsh.course.model.QueryCoursePackageStudentList; +import com.dsh.course.service.CoursePackageStudentService; +import com.dsh.course.util.PageFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2023/8/11 17:39 + */ +@RestController +@RequestMapping("") +public class CoursePackageStudentController { + + @Autowired + private CoursePackageStudentService coursePackageStudentService; + + + /** + * 根据排课id获取预约数据 + * @param queryCoursePackageStudentList + * @return + */ + @ResponseBody + @PostMapping("/coursePackageStudent/queryCoursePackageStudentList") + public Page<Map<String, Object>> queryCoursePackageStudentList(@RequestBody QueryCoursePackageStudentList queryCoursePackageStudentList){ + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(queryCoursePackageStudentList.getLimit(), queryCoursePackageStudentList.getOffset(), + queryCoursePackageStudentList.getSort(), queryCoursePackageStudentList.getOrder()); + Page<Map<String, Object>> mapPage = page.setRecords(coursePackageStudentService.queryCoursePackageStudentList(page, queryCoursePackageStudentList)); + return mapPage; + } + + + /** + * 根据id获取数据 + * @param id + * @return + */ + @ResponseBody + @PostMapping("/coursePackageStudent/queryCoursePackageStudentById") + public CoursePackageStudent queryCoursePackageStudentById(@RequestBody Long id){ + return coursePackageStudentService.getById(id); + } + + + /** + * 修改数据 + * @param coursePackageStudent + */ + @ResponseBody + @PostMapping("/coursePackageStudent/editCoursePackageStudent") + public void editCoursePackageStudent(@RequestBody CoursePackageStudent coursePackageStudent){ + coursePackageStudentService.updateById(coursePackageStudent); + } + + + /** + * 根据排课id获取预约数据 + * @param coursePackageSchedulingId + * @return + */ + @ResponseBody + @PostMapping("/coursePackageStudent/queryByCoursePackageSchedulingId") + public List<CoursePackageStudent> queryByCoursePackageSchedulingId(@RequestBody Long coursePackageSchedulingId){ + return coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", coursePackageSchedulingId)); + } + + + /** + * 获取上课记录数据 + * @param queryCoursePackageStudent + * @return + */ + @ResponseBody + @PostMapping("/coursePackageStudent/queryCoursePackageStudent") + public List<CoursePackageStudent> queryCoursePackageStudent(@RequestBody QueryCoursePackageStudent queryCoursePackageStudent){ + QueryWrapper<CoursePackageStudent> wrapper = new QueryWrapper<>(); + if(null != queryCoursePackageStudent.getAppUserId()){ + wrapper.eq("appUserId", queryCoursePackageStudent.getAppUserId()); + } + if(null != queryCoursePackageStudent.getStudentId()){ + wrapper.eq("studentId", queryCoursePackageStudent.getStudentId()); + } + if(null != queryCoursePackageStudent.getCoursePackageId()){ + wrapper.eq("coursePackageId", queryCoursePackageStudent.getCoursePackageId()); + } + if(null != queryCoursePackageStudent.getCoursePackagePaymentId()){ + wrapper.eq("coursePackagePaymentId", queryCoursePackageStudent.getCoursePackagePaymentId()); + } + if(null != queryCoursePackageStudent.getCoursePackageSchedulingId()){ + wrapper.eq("coursePackageSchedulingId", queryCoursePackageStudent.getCoursePackageSchedulingId()); + } + if(null != queryCoursePackageStudent.getSignInOrNot()){ + wrapper.eq("signInOrNot", queryCoursePackageStudent.getSignInOrNot()); + } + if(null != queryCoursePackageStudent.getReservationStatus()){ + wrapper.eq("reservationStatus", queryCoursePackageStudent.getReservationStatus()); + } + return coursePackageStudentService.list(wrapper); + } + + + /** + * 添加学员上课数据 + * @param coursePackageStudent + */ + @ResponseBody + @PostMapping("/coursePackageStudent/addCoursePackageStudent") + public void addCoursePackageStudent(@RequestBody CoursePackageStudent coursePackageStudent){ + coursePackageStudentService.save(coursePackageStudent); + } +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/CancelledClasses.java b/cloud-server-course/src/main/java/com/dsh/course/entity/CancelledClasses.java index dcb3bc7..7a88b5c 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/CancelledClasses.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/CancelledClasses.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -49,6 +50,11 @@ @TableField("coursePackagePaymentId") private Long coursePackagePaymentId; /** + * 排课记录id + */ + @TableField("coursePackageSchedulingId") + private Long coursePackageSchedulingId; + /** * 消课凭证 */ @TableField("voucher") @@ -62,6 +68,7 @@ * 添加时间 */ @TableField("insertTime") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageScheduling.java b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageScheduling.java new file mode 100644 index 0000000..238c0e6 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageScheduling.java @@ -0,0 +1,86 @@ +package com.dsh.course.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * <p> + * 课包排课记录 + * </p> + * + * @author jqs + * @since 2023-06-30 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_course_package_scheduling") +public class CoursePackageScheduling extends Model<CoursePackageScheduling> { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.NONE) + private Long id; + /** + * 课包id + */ + @TableField("coursePackageId") + private Integer coursePackageId; + /** + * 上课日期 + */ + @TableField("classDate") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date classDate; + /** + * 结束时间 + */ + @TableField("endDate") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endDate; + /** + * 课后练习课程id + */ + @TableField("courseId") + private Integer courseId; + /** + * 可获得积分 + */ + @TableField("integral") + private Integer integral; + /** + * 消课凭证 + */ + @TableField("cancelClasses") + private String cancelClasses; + /** + * 扣除课时 + */ + @TableField("deductClassHour") + private Integer deductClassHour; + /** + * 状态(1=未开始,2=已开始,3=已结束,4=已取消) + */ + @TableField("status") + private Integer status; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java index 15678af..767ae15 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -54,6 +55,11 @@ @TableField("coursePackagePaymentId") private Long coursePackagePaymentId; /** + * 排课记录id + */ + @TableField("coursePackageSchedulingId") + private Long coursePackageSchedulingId; + /** * 到课状态(0=否,1=是) */ @TableField("signInOrNot") @@ -64,6 +70,7 @@ @TableField("reservationStatus") private Integer reservationStatus; @TableField("insertTime") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java index 268ad4b..48ac5e9 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -71,6 +72,7 @@ * 添加时间 */ @TableField("insertTime") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; 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 bfd418b..466651b 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 @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -98,6 +99,11 @@ @TableField("absencesNumber") private Integer absencesNumber; /** + * 退课课时 + */ + @TableField("dropoutsNumber") + private Integer dropoutsNumber; + /** * 支付用户类型(1=用户,2=管理员) */ @TableField("payUserType") @@ -126,6 +132,7 @@ * 退课时间 */ @TableField("withdrawalTime") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date withdrawalTime; /** * 退课凭证 @@ -141,6 +148,7 @@ * 添加时间 */ @TableField("insertTime") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; } diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java index 884dc02..ccfb109 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java @@ -4,6 +4,8 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import java.util.List; + /** * @author zhibing.pu * @date 2023/6/29 14:09 @@ -26,4 +28,13 @@ */ @PostMapping("/base/appUser/updateAppUser") void updateAppUser(AppUser appUser); + + + /** + * 根据名称模糊查询用户信息 + * @param name + * @return + */ + @PostMapping("/appUser/queryAppUserListByName") + List<AppUser> queryAppUserListByName(String name); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java index 6512bb9..5754fcc 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java @@ -4,6 +4,8 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import java.util.List; + /** * @author zhibing.pu * @date 2023/7/4 23:38 @@ -28,4 +30,13 @@ */ @PostMapping("/student/queryStudentById") Student queryStudentById(Integer id); + + + /** + * 根据名称模糊搜索数据 + * @param name + * @return + */ + @PostMapping("/student/queryStudentListByName") + List<Student> queryStudentListByName(String name); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageSchedulingMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageSchedulingMapper.java new file mode 100644 index 0000000..fde8a3a --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageSchedulingMapper.java @@ -0,0 +1,26 @@ +package com.dsh.course.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.entity.CoursePackageScheduling; +import com.dsh.course.model.QueryCoursePackageSchedulingList; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2023/8/11 10:55 + */ +public interface CoursePackageSchedulingMapper extends BaseMapper<CoursePackageScheduling> { + + + /** + * 获取课包排课数据 + * @param page + * @param queryCoursePackageSchedulingList + * @return + */ + List<Map<String, Object>> queryCoursePackageSchedulingList(Page<Map<String, Object>> page, @Param("item") QueryCoursePackageSchedulingList queryCoursePackageSchedulingList); +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java index d6057a6..3a6eba8 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java @@ -1,7 +1,12 @@ package com.dsh.course.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.entity.CoursePackageStudent; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; /** * <p> @@ -14,4 +19,14 @@ public interface CoursePackageStudentMapper extends BaseMapper<CoursePackageStudent> { + /** + * 获取排课预约信息 + * @param page + * @param coursePackageSchedulingId + * @param userId + * @param studentId + * @return + */ + List<Map<String, Object>> queryCoursePackageStudentList(Page<Map<String, Object>> page, @Param("coursePackageSchedulingId") Long coursePackageSchedulingId, + @Param("userId") List<Integer> userId, @Param("studentId") List<Integer> studentId); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageMapper.java index 7fc5e6c..f85010f 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageMapper.java +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageMapper.java @@ -5,6 +5,7 @@ import com.dsh.course.entity.TCoursePackage; import com.dsh.course.feignclient.model.CourseOfStoreVo; import com.dsh.course.model.QueryCoursePackageLists; +import com.dsh.course.model.QueryExamineCoursePackageLists; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -31,4 +32,14 @@ */ List<Map<String, Object>> queryCoursePackageLists(Page<Map<String, Object>> page, @Param("item") QueryCoursePackageLists queryCoursePackageLists); + + + /** + * 获取课包审核列表 + * @param page + * @param queryExamineCoursePackageLists + * @return + */ + List<Map<String, Object>> queryExamineCoursePackageLists(Page<Map<String, Object>> page, @Param("item") QueryExamineCoursePackageLists queryExamineCoursePackageLists); + } 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 51ea004..a610fc6 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 @@ -1,9 +1,14 @@ package com.dsh.course.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.entity.TCoursePackagePayment; +import com.dsh.course.model.QueryRegistrationRecord; import com.dsh.course.model.BillingRequest; import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; import java.util.List; @@ -32,4 +37,24 @@ @Param("monthStart")String monthStart, @Param("monthEnd")String monthEnd); + + /** + * 获取课包报名信息 + * @param page + * @return + */ + List<Map<String, Object>> queryRegistrationRecord(Page<Map<String, Object>> page, @Param("coursePackageId") Integer coursePackageId, + @Param("userIds") List<Integer> userIds, @Param("studentIds") List<Integer> studentIds); + + + /** + * 获取未预约排课学员列表 + * @param page + * @param coursePackagePaymentId + * @param userIds + * @param studentIds + * @return + */ + List<Map<String, Object>> queryWalkInStudentList(Page<Map<String, Object>> page, @Param("coursePackageId") Integer coursePackageId, @Param("coursePackagePaymentId") List<Long> coursePackagePaymentId, + @Param("userIds") List<Integer> userIds, @Param("studentIds") List<Integer> studentIds); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageSchedulingList.java b/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageSchedulingList.java new file mode 100644 index 0000000..d2d9ff2 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageSchedulingList.java @@ -0,0 +1,20 @@ +package com.dsh.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/11 11:00 + */ +@Data +public class QueryCoursePackageSchedulingList { + /** + * 课包id + */ + private Integer coursePackageId; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageStudent.java b/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageStudent.java new file mode 100644 index 0000000..86cc81c --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageStudent.java @@ -0,0 +1,39 @@ +package com.dsh.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/12 3:12 + */ +@Data +public class QueryCoursePackageStudent { + /** + * 用户id + */ + private Integer appUserId; + /** + * 学员id + */ + private Integer studentId; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 课包购买记录id + */ + private Long coursePackagePaymentId; + /** + * 排课记录id + */ + private Long coursePackageSchedulingId; + /** + * 到课状态(0=否,1=是) + */ + private Integer signInOrNot; + /** + * 预约状态(0=取消,1=预约) + */ + private Integer reservationStatus; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageStudentList.java b/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageStudentList.java new file mode 100644 index 0000000..b35f3a3 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/QueryCoursePackageStudentList.java @@ -0,0 +1,28 @@ +package com.dsh.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/11 17:07 + */ +@Data +public class QueryCoursePackageStudentList { + /** + * 排课id + */ + private Long coursePackageSchedulingId; + /** + * 用户姓名 + */ + private String userName; + /** + * 学员姓名 + */ + private String studentName; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/QueryExamineCoursePackageLists.java b/cloud-server-course/src/main/java/com/dsh/course/model/QueryExamineCoursePackageLists.java new file mode 100644 index 0000000..0e50791 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/QueryExamineCoursePackageLists.java @@ -0,0 +1,36 @@ +package com.dsh.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/13 3:22 + */ +@Data +public class QueryExamineCoursePackageLists { + /** + * 省编号 + */ + private String provinceCode; + /** + * 市编号 + */ + private String cityCode; + /** + * 课程类型id + */ + private Integer coursePackageTypeId; + /** + * 课程名称 + */ + private String name; + /** + * 审核状态(1=待审核,2=已同意,3=已拒绝) + */ + private Integer auditStatus; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/QueryRegistrationRecord.java b/cloud-server-course/src/main/java/com/dsh/course/model/QueryRegistrationRecord.java new file mode 100644 index 0000000..880b91d --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/QueryRegistrationRecord.java @@ -0,0 +1,28 @@ +package com.dsh.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/10 19:47 + */ +@Data +public class QueryRegistrationRecord { + /** + * 课程id + */ + private Integer coursePackageId; + /** + * 用户名称 + */ + private String userName; + /** + * 学员名称 + */ + private String studentName; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/QueryWalkInStudentList.java b/cloud-server-course/src/main/java/com/dsh/course/model/QueryWalkInStudentList.java new file mode 100644 index 0000000..2f14e62 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/QueryWalkInStudentList.java @@ -0,0 +1,28 @@ +package com.dsh.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/12 2:46 + */ +@Data +public class QueryWalkInStudentList { + /** + * 课程id + */ + private Long coursePackageSchedulingId; + /** + * 用户名称 + */ + private String userName; + /** + * 学员名称 + */ + private String studentName; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/WeekEnum.java b/cloud-server-course/src/main/java/com/dsh/course/model/WeekEnum.java new file mode 100644 index 0000000..b1dca78 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/WeekEnum.java @@ -0,0 +1,51 @@ +package com.dsh.course.model; + +/** + * @author zhibing.pu + * @Date 2023/8/11 14:05 + */ +public enum WeekEnum { + Sunday(1, "周日"), + Monday(2, "周一"), + Tuesday(3, "周二"), + Wednesday(4, "周三"), + Thursday(5, "周四"), + Friday(6, "周五"), + Saturday(7, "周六"); + + + WeekEnum(Integer week, String chineseName) { + this.week = week; + this.chineseName = chineseName; + } + + private Integer week; + private String chineseName; + + public Integer getWeek() { + return week; + } + + public void setWeek(Integer week) { + this.week = week; + } + + public String getChineseName() { + return chineseName; + } + + public void setChineseName(String chineseName) { + this.chineseName = chineseName; + } + + + public static WeekEnum getWeekEnum(Integer week){ + WeekEnum[] values = WeekEnum.values(); + for (WeekEnum value : values) { + if(week == value.getWeek()){ + return value; + } + } + return null; + } +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageSchedulingService.java b/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageSchedulingService.java new file mode 100644 index 0000000..127d0b0 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageSchedulingService.java @@ -0,0 +1,18 @@ +package com.dsh.course.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dsh.course.entity.CoursePackageScheduling; + +/** + * <p> + * 课包排课 服务类 + * </p> + * + * @author jqs + * @since 2023-06-30 + */ +public interface CoursePackageSchedulingService extends IService<CoursePackageScheduling> { + + + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java index 3f623f4..817ccc0 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java @@ -1,7 +1,12 @@ package com.dsh.course.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.CoursePackageStudent; +import com.dsh.course.model.QueryCoursePackageStudentList; + +import java.util.List; +import java.util.Map; /** * <p> @@ -14,5 +19,11 @@ public interface CoursePackageStudentService extends IService<CoursePackageStudent> { + /** + * 获取排课预约数据 + * @param queryCoursePackageStudentList + * @return + */ + List<Map<String, Object>> queryCoursePackageStudentList(Page<Map<String, Object>> page, QueryCoursePackageStudentList queryCoursePackageStudentList); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java b/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java new file mode 100644 index 0000000..b337bd7 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java @@ -0,0 +1,37 @@ +package com.dsh.course.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.dsh.course.entity.CoursePackageScheduling; +import com.dsh.course.model.QueryCoursePackageSchedulingList; + +import java.util.List; +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2023/8/11 10:57 + */ +public interface ICoursePackageSchedulingService extends IService<CoursePackageScheduling> { + + + /** + * 获取课包排课数据 + * @param page + * @param queryCoursePackageSchedulingList + * @return + */ + List<Map<String, Object>> queryCoursePackageSchedulingList(Page<Map<String, Object>> page, QueryCoursePackageSchedulingList queryCoursePackageSchedulingList); + + + /** + * 定时任务添加排课数据 + */ + void taskAddData(); + + + /** + * 定时修改状态 + */ + void taskSetStatus(); +} 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 f08e76e..cd0703d 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 @@ -1,8 +1,11 @@ package com.dsh.course.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.TCoursePackagePayment; import com.dsh.course.feignclient.model.RecordAppoint; +import com.dsh.course.model.QueryRegistrationRecord; +import com.dsh.course.model.QueryWalkInStudentList; import com.dsh.course.model.BillingRequest; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.ClasspaymentRequest; @@ -15,6 +18,7 @@ import com.dsh.course.util.ResultUtil; import java.util.List; +import java.util.Map; /** * <p> @@ -91,4 +95,21 @@ List<BillingRequest> queryAmountDatas(Integer appUserId, String monthStart, String monthEnd); + + /** + * 获取课包报名信息 + * @param page + * @param queryRegistrationRecord + * @return + */ + List<Map<String, Object>> queryRegistrationRecord(Page<Map<String, Object>> page, QueryRegistrationRecord queryRegistrationRecord); + + + /** + * 获取未预约排课学员列表 + * @param page + * @param queryWalkInStudentList + * @return + */ + List<Map<String, Object>> queryWalkInStudentList(Page<Map<String, Object>> page, QueryWalkInStudentList queryWalkInStudentList); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java index 69b376c..d7d6a12 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java @@ -6,6 +6,7 @@ import com.dsh.course.feignclient.model.CourseOfStoreVo; import com.dsh.course.model.*; import com.dsh.course.util.ResultUtil; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; import java.util.Map; @@ -59,4 +60,28 @@ * @return */ List<Map<String, Object>> queryCoursePackageLists(Page<Map<String, Object>> page, QueryCoursePackageLists queryCoursePackageLists); + + + /** + * 添加课包 + * @param coursePackage + * @return + */ + Integer addCoursePackage(TCoursePackage coursePackage); + + + /** + * 修改数据 + * @param coursePackage + */ + void updateCoursePackageById(TCoursePackage coursePackage); + + + + /** + * 获取课包审核列表 + * @param queryExamineCoursePackageLists + * @return + */ + List<Map<String, Object>> queryExamineCoursePackageLists(Page<Map<String, Object>> page, QueryExamineCoursePackageLists queryExamineCoursePackageLists); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java new file mode 100644 index 0000000..97cab75 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java @@ -0,0 +1,131 @@ +package com.dsh.course.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dsh.course.entity.CoursePackageScheduling; +import com.dsh.course.entity.CoursePackageStudent; +import com.dsh.course.entity.TCoursePackage; +import com.dsh.course.mapper.CoursePackageSchedulingMapper; +import com.dsh.course.model.QueryCoursePackageSchedulingList; +import com.dsh.course.service.CoursePackageStudentService; +import com.dsh.course.service.ICoursePackageSchedulingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2023/8/11 10:58 + */ +@Service +public class CoursePackageSchedulingServiceImpl extends ServiceImpl<CoursePackageSchedulingMapper, CoursePackageScheduling> implements ICoursePackageSchedulingService { + + @Autowired + private CoursePackageStudentService coursePackageStudentService; + + @Autowired + private TCoursePackageServiceImpl coursePackageService; + + @Resource + private CoursePackageSchedulingMapper coursePackageSchedulingMapper; + + + + + + /** + * 获取课包排课数据 + * @param page + * @param queryCoursePackageSchedulingList + * @return + */ + @Override + public List<Map<String, Object>> queryCoursePackageSchedulingList(Page<Map<String, Object>> page, QueryCoursePackageSchedulingList queryCoursePackageSchedulingList) { + List<Map<String, Object>> list = this.baseMapper.queryCoursePackageSchedulingList(page, queryCoursePackageSchedulingList); + for (Map<String, Object> map : list) { + Long id = Long.valueOf(map.get("id").toString()); + int count = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", id).eq("reservationStatus", 1)); + map.put("registered", count); + int count1 = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", id).eq("signInOrNot", 1)); + map.put("actualArrival", count1); + map.put("nonArrival", count - count1); + } + return list; + } + + + /** + * 定时添加排课数据 + */ + @Override + public void taskAddData() { + new Thread(new Runnable() { + @Override + public void run() { + try { + List<TCoursePackage> list = coursePackageService.list(new QueryWrapper<TCoursePackage>().eq("status", 2).eq("auditStatus", 2).eq("state", 1)); + for (TCoursePackage tCoursePackage : list) { + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingMapper.selectOne(new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", tCoursePackage.getId()).last(" order by classDate desc limit 0, 1")); + Calendar calendar = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + if(null != coursePackageScheduling){ + calendar.setTime(sdf1.parse(sdf.format(coursePackageScheduling.getClassDate()) + " 00:00:00")); + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); + }else{ + calendar.setTime(sdf1.parse(sdf.format(new Date()) + " 00:00:00")); + } + coursePackageScheduling = new CoursePackageScheduling(); + coursePackageScheduling.setCoursePackageId(tCoursePackage.getId()); + coursePackageScheduling.setClassDate(calendar.getTime()); + coursePackageScheduling.setStatus(1); + coursePackageSchedulingMapper.insert(coursePackageScheduling); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + + + /** + * 定时修改状态 + */ + @Override + public void taskSetStatus() { + new Thread(new Runnable() { + @Override + public void run() { + //开始数据 + List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingMapper.selectList(new QueryWrapper<CoursePackageScheduling>().eq("status", 1).last(" and now() >= classDate and now() < endDate")); + for (CoursePackageScheduling coursePackageScheduling : coursePackageSchedulings) { + coursePackageScheduling.setStatus(2); + coursePackageScheduling.setCoursePackageId(null); + coursePackageSchedulingMapper.updateById(coursePackageScheduling); + + TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId()); + if(coursePackage.getStatus() == 1){ + coursePackage.setStatus(2); + coursePackageService.updateById(coursePackage); + } + } + + //结束数据 + coursePackageSchedulings = coursePackageSchedulingMapper.selectList(new QueryWrapper<CoursePackageScheduling>().eq("status", 2).last(" and now() >= endDate")); + for (CoursePackageScheduling coursePackageScheduling : coursePackageSchedulings) { + coursePackageScheduling.setStatus(3); + coursePackageScheduling.setCoursePackageId(null); + coursePackageSchedulingMapper.updateById(coursePackageScheduling); + } + } + }).start(); + } +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java index 7d1f58c..c420f00 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java @@ -1,10 +1,25 @@ package com.dsh.course.service.impl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.CoursePackageStudent; +import com.dsh.course.feignclient.account.AppUserClient; +import com.dsh.course.feignclient.account.StudentClient; +import com.dsh.course.feignclient.account.model.AppUser; +import com.dsh.course.feignclient.account.model.Student; import com.dsh.course.mapper.CoursePackageStudentMapper; +import com.dsh.course.model.QueryCoursePackageStudentList; import com.dsh.course.service.CoursePackageStudentService; +import com.dsh.course.util.ToolUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * <p> @@ -17,5 +32,51 @@ @Service public class CoursePackageStudentServiceImpl extends ServiceImpl<CoursePackageStudentMapper, CoursePackageStudent> implements CoursePackageStudentService { + @Resource + private AppUserClient appUserClient; + @Resource + private StudentClient studentClient; + + + + + + /** + * 获取排课预约数据 + * @param queryCoursePackageStudentList + * @return + */ + @Override + public List<Map<String, Object>> queryCoursePackageStudentList(Page<Map<String, Object>> page, QueryCoursePackageStudentList queryCoursePackageStudentList) { + List<Integer> userId = null; + List<Integer> studentId = null; + if(ToolUtil.isNotEmpty(queryCoursePackageStudentList.getUserName())){ + List<AppUser> appUsers = appUserClient.queryAppUserListByName(queryCoursePackageStudentList.getUserName()); + if(appUsers.size() > 0){ + userId = appUsers.stream().map(AppUser::getId).collect(Collectors.toList()); + } + } + if(ToolUtil.isNotEmpty(queryCoursePackageStudentList.getStudentName())){ + List<Student> students = studentClient.queryStudentListByName(queryCoursePackageStudentList.getStudentName()); + if(students.size() > 0){ + studentId = students.stream().map(Student::getId).collect(Collectors.toList()); + } + } + List<Map<String, Object>> list = this.baseMapper.queryCoursePackageStudentList(page, queryCoursePackageStudentList.getCoursePackageSchedulingId(), userId, studentId); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + Integer now = Integer.valueOf(sdf.format(new Date())); + for (Map<String, Object> map : list) { + Integer appUserId = Integer.valueOf(map.get("appUserId").toString()); + Integer student_Id = Integer.valueOf(map.get("studentId").toString()); + AppUser appUser = appUserClient.queryAppUser(appUserId); + Student student = studentClient.queryStudentById(student_Id); + map.put("userName", appUser.getName()); + map.put("phone", student.getPhone()); + map.put("studentName", student.getName()); + map.put("age", null != student.getBirthday() ? now - Integer.valueOf(sdf.format(student.getBirthday())) : "-"); + map.put("sex", student.getSex()); + } + return list; + } } 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 a8eb953..8d2bccb 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 @@ -5,12 +5,15 @@ import com.alipay.api.domain.Person; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.*; import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.CoachClient; +import com.dsh.course.feignclient.account.StudentClient; import com.dsh.course.feignclient.account.model.AppUser; import com.dsh.course.feignclient.account.model.Coach; +import com.dsh.course.feignclient.account.model.Student; import com.dsh.course.feignclient.activity.BenefitVideoClient; import com.dsh.course.feignclient.activity.CouponClient; import com.dsh.course.feignclient.activity.model.BenefitsVideos; @@ -20,6 +23,8 @@ import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.*; import com.dsh.course.model.BillingRequest; +import com.dsh.course.model.QueryRegistrationRecord; +import com.dsh.course.model.QueryWalkInStudentList; import com.dsh.course.model.dto.DiscountJsonDto; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.ClasspaymentRequest; @@ -29,10 +34,12 @@ import com.dsh.course.model.vo.response.AppUserVideoResponse; import com.dsh.course.model.vo.response.CourseDetailsResponse; import com.dsh.course.model.vo.response.CourseOfVideoResponse; +import com.dsh.course.service.ICoursePackageSchedulingService; import com.dsh.course.service.TCoursePackagePaymentService; import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -59,7 +66,6 @@ @Resource private BenefitVideoClient bfvoClient; - @Resource private UserVideoDetailsMapper uvdmapper; @@ -84,7 +90,6 @@ @Resource private TCoursePackageDiscountMapper tcpdMapper; - @Resource private CoursePackagePaymentConfigMapper cpConfigMapper; @@ -96,6 +101,16 @@ @Resource private AppUserClient appuClient; + + @Resource + private StudentClient studentClient; + + @Autowired + private ICoursePackageSchedulingService coursePackageSchedulingService; + + + + /** @@ -639,4 +654,95 @@ } + /** + * 获取课包报名信息 + * @param page + * @param queryRegistrationRecord + * @return + */ + @Override + public List<Map<String, Object>> queryRegistrationRecord(Page<Map<String, Object>> page, QueryRegistrationRecord queryRegistrationRecord) { + Integer coursePackageId = queryRegistrationRecord.getCoursePackageId(); + String userName = queryRegistrationRecord.getUserName(); + List<Integer> userIds = null; + List<Integer> studentIds = null; + if(ToolUtil.isNotEmpty(userName)){ + List<AppUser> appUsers = appuClient.queryAppUserListByName(userName); + if(appUsers.size() > 0){ + userIds = appUsers.stream().map(AppUser::getId).collect(Collectors.toList()); + } + } + String studentName = queryRegistrationRecord.getStudentName(); + if(ToolUtil.isNotEmpty(studentName)){ + List<Student> students = studentClient.queryStudentListByName(studentName); + if(students.size() > 0){ + studentIds = students.stream().map(Student::getId).collect(Collectors.toList()); + } + } + List<Map<String, Object>> list = this.baseMapper.queryRegistrationRecord(page, coursePackageId, userIds, studentIds); + for (Map<String, Object> map : list) { + Long id = Long.valueOf(map.get("id").toString()); + Integer appUserId = Integer.valueOf(map.get("appUserId").toString()); + Integer studentId = Integer.valueOf(map.get("studentId").toString()); + AppUser appUser = appuClient.queryAppUser(appUserId); + map.put("userName", null != appUser ? appUser.getName() : ""); + map.put("phone", null != appUser ? appUser.getPhone() : ""); + Student student = studentClient.queryStudentById(studentId); + map.put("studentName", null != student ? student.getName() : ""); + Integer integer = cpsMapper.selectCount(new QueryWrapper<CoursePackageStudent>().eq("appUserId", appUserId) + .eq("studentId", studentId).eq("coursePackagePaymentId", id).eq("signInOrNot", 1)); + map.put("already", integer); + } + return list; + } + + + /** + * 获取未预约排课学员列表 + * @param page + * @param queryWalkInStudentList + * @return + */ + @Override + public List<Map<String, Object>> queryWalkInStudentList(Page<Map<String, Object>> page, QueryWalkInStudentList queryWalkInStudentList) { + Long coursePackageSchedulingId = queryWalkInStudentList.getCoursePackageSchedulingId(); + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingService.getById(coursePackageSchedulingId); + String userName = queryWalkInStudentList.getUserName(); + List<Integer> userIds = null; + List<Integer> studentIds = null; + if(ToolUtil.isNotEmpty(userName)){ + List<AppUser> appUsers = appuClient.queryAppUserListByName(userName); + if(appUsers.size() > 0){ + userIds = appUsers.stream().map(AppUser::getId).collect(Collectors.toList()); + } + } + String studentName = queryWalkInStudentList.getStudentName(); + if(ToolUtil.isNotEmpty(studentName)){ + List<Student> students = studentClient.queryStudentListByName(studentName); + if(students.size() > 0){ + studentIds = students.stream().map(Student::getId).collect(Collectors.toList()); + } + } + List<Long> coursePackagePaymentId = null; + List<CoursePackageStudent> coursePackageStudents = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", coursePackageSchedulingId).eq("reservationStatus", 1)); + if(coursePackageStudents.size() > 0){ + coursePackagePaymentId = coursePackageStudents.stream().map(CoursePackageStudent::getCoursePackagePaymentId).collect(Collectors.toList()); + } + + List<Map<String, Object>> list = this.baseMapper.queryWalkInStudentList(page, coursePackageScheduling.getCoursePackageId(), coursePackagePaymentId, userIds, studentIds); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + Integer now = Integer.valueOf(sdf.format(new Date())); + for (Map<String, Object> map : list) { + Integer appUserId = Integer.valueOf(map.get("appUserId").toString()); + Integer student_Id = Integer.valueOf(map.get("studentId").toString()); + AppUser appUser = appuClient.queryAppUser(appUserId); + Student student = studentClient.queryStudentById(student_Id); + map.put("userName", appUser.getName()); + map.put("phone", student.getPhone()); + map.put("studentName", student.getName()); + map.put("age", null != student.getBirthday() ? now - Integer.valueOf(sdf.format(student.getBirthday())) : "-"); + map.put("sex", student.getSex()); + } + return list; + } } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java index 86028ae..7358a5e 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java @@ -7,10 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.dsh.course.entity.CoursePackagePaymentConfig; -import com.dsh.course.entity.TCoursePackage; -import com.dsh.course.entity.TCoursePackageDiscount; -import com.dsh.course.entity.TCoursePackagePayment; +import com.dsh.course.entity.*; import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.StudentClient; import com.dsh.course.feignclient.account.model.AppUser; @@ -24,10 +21,7 @@ import com.dsh.course.mapper.TCoursePackageMapper; import com.dsh.course.feignclient.model.CourseOfStoreVo; import com.dsh.course.model.*; -import com.dsh.course.service.ICoursePackagePaymentConfigService; -import com.dsh.course.service.TCoursePackageDiscountService; -import com.dsh.course.service.TCoursePackagePaymentService; -import com.dsh.course.service.TCoursePackageService; +import com.dsh.course.service.*; import com.dsh.course.util.*; import com.dsh.course.util.httpClinet.HttpResult; import org.springframework.beans.factory.annotation.Autowired; @@ -80,6 +74,12 @@ @Autowired private PayMoneyUtil payMoneyUtil; + + @Autowired + private ICoursePackageSchedulingService coursePackageSchedulingService; + + @Autowired + private CoursePackageStudentService coursePackageStudentService; @@ -776,4 +776,179 @@ } return list; } + + + /** + * 添加课包 + * @param coursePackage + * @return + */ + @Override + public Integer addCoursePackage(TCoursePackage coursePackage) { + try { + this.baseMapper.insert(coursePackage); + //生成排课数据 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = sdf1.parse(sdf.format(new Date()) + " 00:00:00"); + List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";")); + String classStartTime = coursePackage.getClassStartTime(); + String[] split = classStartTime.split(":"); + String classEndTime = coursePackage.getClassEndTime(); + String[] split1 = classEndTime.split(":"); + Calendar s = Calendar.getInstance(); + s.setTime(date); + s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1); + s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0])); + s.set(Calendar.MINUTE, Integer.valueOf(split[1])); + s.set(Calendar.SECOND, 0); + + Calendar e = Calendar.getInstance(); + e.setTime(date); + e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 13); + long timeInMillis = e.getTimeInMillis(); + + while (true){ + int w = s.get(Calendar.DAY_OF_WEEK); + WeekEnum weekEnum = WeekEnum.getWeekEnum(w); + if(list.contains(weekEnum.getChineseName())){ + Calendar classDate = Calendar.getInstance(); + classDate.setTime(s.getTime()); + classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0])); + classDate.set(Calendar.MINUTE, Integer.valueOf(split[1])); + classDate.set(Calendar.SECOND, 0); + + Calendar endDate = Calendar.getInstance(); + endDate.setTime(s.getTime()); + endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0])); + endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1])); + endDate.set(Calendar.SECOND, 0); + + CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling(); + coursePackageScheduling.setCoursePackageId(coursePackage.getId()); + coursePackageScheduling.setClassDate(classDate.getTime()); + coursePackageScheduling.setEndDate(endDate.getTime()); + coursePackageScheduling.setStatus(1); + coursePackageSchedulingService.save(coursePackageScheduling); + } + s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1); + if(s.getTimeInMillis() > timeInMillis){ + break; + } + } + return coursePackage.getId(); + }catch (Exception e){ + e.printStackTrace(); + return null; + } + } + + + /** + * 修改数据 + * @param coursePackage + */ + @Override + public void updateCoursePackageById(TCoursePackage coursePackage) { + try { + List<CoursePackageStudent> coursePackageStudents = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("coursePackageId", coursePackage.getId())); + List<Long> collect = coursePackageStudents.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList()); + + QueryWrapper<CoursePackageScheduling> coursePackageSchedulingQueryWrapper = new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", coursePackage.getId()); + if(collect.size() > 0){ + coursePackageSchedulingQueryWrapper.notIn("id", collect); + } + coursePackageSchedulingService.remove(coursePackageSchedulingQueryWrapper); + + this.baseMapper.updateById(coursePackage); + //生成排课数据 + Date date = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", coursePackage.getId()).last(" and classDate > now() order by classDate desc limit 0, 1")); + if(null != coursePackageScheduling){ + date = sdf1.parse(sdf.format(coursePackageScheduling.getClassDate()) + " 00:00:00"); + }else{ + date = sdf1.parse(sdf.format(new Date()) + " 00:00:00"); + } + List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";")); + String classStartTime = coursePackage.getClassStartTime(); + String[] split = classStartTime.split(":"); + String classEndTime = coursePackage.getClassEndTime(); + String[] split1 = classEndTime.split(":"); + Calendar s = Calendar.getInstance(); + s.setTime(date); + s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1); + + Calendar e = Calendar.getInstance(); + e.setTime(date); + if(null != coursePackageScheduling){ + long time = sdf1.parse(sdf.format(new Date()) + " 00:00:00").getTime(); + int d = Long.valueOf(14L - ((s.getTimeInMillis() - time) / 86400000L)).intValue(); + e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + d); + }else{ + e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 13); + } + long timeInMillis = e.getTimeInMillis(); + + while (true){ + int w = s.get(Calendar.DAY_OF_WEEK); + WeekEnum weekEnum = WeekEnum.getWeekEnum(w); + if(list.contains(weekEnum.getChineseName())){ + Calendar classDate = Calendar.getInstance(); + classDate.setTime(s.getTime()); + classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0])); + classDate.set(Calendar.MINUTE, Integer.valueOf(split[1])); + classDate.set(Calendar.SECOND, 0); + + Calendar endDate = Calendar.getInstance(); + endDate.setTime(s.getTime()); + endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0])); + endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1])); + endDate.set(Calendar.SECOND, 0); + + CoursePackageScheduling coursePackageScheduling1 = new CoursePackageScheduling(); + coursePackageScheduling1.setCoursePackageId(coursePackage.getId()); + coursePackageScheduling1.setClassDate(classDate.getTime()); + coursePackageScheduling1.setEndDate(endDate.getTime()); + coursePackageScheduling1.setStatus(1); + coursePackageSchedulingService.save(coursePackageScheduling1); + } + s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1); + if(s.getTimeInMillis() > timeInMillis){ + break; + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + + /** + * 获取课包审核列表 + * @param page + * @param queryExamineCoursePackageLists + * @return + */ + @Override + public List<Map<String, Object>> queryExamineCoursePackageLists(Page<Map<String, Object>> page, QueryExamineCoursePackageLists queryExamineCoursePackageLists) { + List<Map<String, Object>> list = this.baseMapper.queryExamineCoursePackageLists(page, queryExamineCoursePackageLists); + for (Map<String, Object> map : list) { + Integer id = Integer.valueOf(map.get("id").toString()); + boolean cash = false; + boolean coin = false; + List<CoursePackagePaymentConfig> coursePackagePaymentConfigs = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", id)); + for (CoursePackagePaymentConfig coursePackagePaymentConfig : coursePackagePaymentConfigs) { + if(0 != coursePackagePaymentConfig.getCashPayment()){ + cash = true; + } + if(0 != coursePackagePaymentConfig.getPlayPaiCoin()){ + coin = true; + } + } + map.put("payType", (cash ? "现金支付" : "") + (coin ? cash ? "&玩湃币支付" : "玩湃币支付" : "")); + } + return list; + } } diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java b/cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java new file mode 100644 index 0000000..fb26c90 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java @@ -0,0 +1,41 @@ +package com.dsh.course.util; + +import com.dsh.course.service.ICoursePackageSchedulingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * @author zhibing.pu + * @Date 2023/8/11 15:01 + */ +@Component +public class TaskUtil { + + @Autowired + private ICoursePackageSchedulingService coursePackageSchedulingService; + + /** + * 每隔一分钟去处理的定时任务 + */ + @Scheduled(fixedRate = 60000) + public void taskMinute(){ + try { + //定时修改排课状态 + coursePackageSchedulingService.taskSetStatus(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + /** + * 零时任务 + */ + @Scheduled(cron = "0 0 0 * * *") + public void zeroTask(){ + //定时添加排课数据 + coursePackageSchedulingService.taskAddData(); + } +} diff --git a/cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml b/cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml new file mode 100644 index 0000000..fdf9e32 --- /dev/null +++ b/cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml @@ -0,0 +1,30 @@ +<?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.CoursePackageSchedulingMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.dsh.course.entity.CoursePackageScheduling"> + <id column="id" property="id" /> + <result column="coursePackageId" property="coursePackageId" /> + <result column="classDate" property="classDate" /> + <result column="courseId" property="courseId" /> + <result column="integral" property="integral" /> + <result column="cancelClasses" property="cancelClasses" /> + <result column="deductClassHour" property="deductClassHour" /> + <result column="status" property="status" /> + </resultMap> + + + + <select id="queryCoursePackageSchedulingList" resultType="map"> + select + CAST(id AS CHAR(20)) as id, + DATE_FORMAT(classDate, '%Y-%m-%d') as classDate, + courseId, + `status`, + cancelClasses, + deductClassHour, + integral + from t_course_package_scheduling where coursePackageId = #{item.coursePackageId} order by classDate desc + </select> +</mapper> \ No newline at end of file diff --git a/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml b/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml index 63b7bd3..3b900eb 100644 --- a/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml @@ -3,4 +3,27 @@ <mapper namespace="com.dsh.course.mapper.CoursePackageStudentMapper"> + + <select id="queryCoursePackageStudentList" resultType="map"> + select + CAST(id AS CHAR(20)) as id, + appUserId, + studentId, + signInOrNot, + reservationStatus + from t_course_package_student where coursePackageSchedulingId = #{coursePackageSchedulingId} + <if test="null != userId"> + and appUserId in + <foreach collection="appUserId" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="null != studentId"> + and studentId in + <foreach collection="studentId" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + order by insertTime desc + </select> </mapper> diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackageMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackageMapper.xml index 25c46c6..bf5df87 100644 --- a/cloud-server-course/src/main/resources/mapper/TCoursePackageMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/TCoursePackageMapper.xml @@ -68,7 +68,7 @@ a.state from t_course_package a left join t_course_package_type b on (a.coursePackageTypeId = b.id) - where a.state != 3 + where a.state != 3 and a.auditStatus = 2 <if test="null != item.provinceCode and '' != item.provinceCode"> and a.provinceCode = #{item.provinceCode} </if> @@ -92,4 +92,37 @@ </if> order by a.insertTime desc </select> + + + <select id="queryExamineCoursePackageLists" resultType="map"> + select + a.id, + CONCAT(a.province, a.city) as city, + a.storeId, + b.`name` as coursePackageType, + a.`name`, + a.maxSubscribeNumber, + CONCAT('购买后', a.validDays, '天内有效') as validDays, + a.sort, + a.auditStatus + from t_course_package a + left join t_course_package_type b on (a.coursePackageTypeId = b.id) + where a.state = 1 and a.auditStatus != 2 + <if test="null != item.provinceCode and '' != item.provinceCode"> + and a.provinceCode = #{item.provinceCode} + </if> + <if test="null != item.cityCode and '' != item.cityCode"> + and a.cityCode = #{item.cityCode} + </if> + <if test="null != item.coursePackageTypeId"> + and a.coursePackageTypeId = #{item.coursePackageTypeId} + </if> + <if test="null != item.name and '' != item.name"> + and a.name line CONCAT('%', #{item.name}, '%') + </if> + <if test="null != item.auditStatus"> + and a.auditStatus = #{item.auditStatus} + </if> + order by a.insertTime desc + </select> </mapper> diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml index 8a19f50..f39a410 100644 --- a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml @@ -55,4 +55,65 @@ and appUserId = #{appUserId} </if> </select> + + + + <select id="queryRegistrationRecord" resultType="map"> + select + CAST(id AS CHAR(20)) as id, + appUserId, + studentId, + DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as insertTime, + totalClassHours, + absencesNumber, + `status` + from t_course_package_payment where payStatus = 2 and state = 1 + <if test="null != coursePackageId"> + and coursePackageId = #{coursePackageId} + </if> + <if test="null != userIds"> + and appUserId in + <foreach collection="userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="null != studentIds"> + and studentId in + <foreach collection="studentIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + order by insertTime desc + </select> + + + <select id="queryWalkInStudentList" resultType="map"> + select + CAST(id AS CHAR(20)) as id, + appUserId, + studentId + from t_course_package_payment where payStatus = 2 and state = 1 + <if test="null != coursePackageId"> + and coursePackageId = #{coursePackageId} + </if> + <if test="null != coursePackagePaymentId"> + and id not in + <foreach collection="coursePackagePaymentId" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="null != userIds"> + and appUserId in + <foreach collection="userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="null != studentIds"> + and studentId in + <foreach collection="studentIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + order by insertTime desc + </select> </mapper> diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java index 304d193..84688f3 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java @@ -21,4 +21,13 @@ */ @PostMapping("/coach/queryCoachByCity") List<Coach> queryCoachByCity(String cityCode); + + + /** + * 根据id获取教练 + * @param id + * @return + */ + @PostMapping("/coach/queryCoachById") + Coach queryCoachById(Integer id); } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/IntegralClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/IntegralClient.java index 3f47e33..4b937be 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/IntegralClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/IntegralClient.java @@ -1,5 +1,6 @@ package com.dsh.course.feignClient.account; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.feignClient.account.model.*; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -12,6 +13,6 @@ @PostMapping("/userIntegralChanges/list") - List<UserIntegral> list(IntegralListQuery integralListQuery); + Page<UserIntegral> list(IntegralListQuery integralListQuery); } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java index e4cca9c..e90d072 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java @@ -1,9 +1,7 @@ package com.dsh.course.feignClient.activity; -import com.dsh.course.feignClient.activity.model.Coupon; -import com.dsh.course.feignClient.activity.model.CouponExamineListSearch; -import com.dsh.course.feignClient.activity.model.CouponListOfSearch; +import com.dsh.course.feignClient.activity.model.*; import com.dsh.guns.modular.system.model.CouponDataVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -37,4 +35,14 @@ @PostMapping("/base/coupon/insertIntoCouponData") void insertIntoData(@RequestBody CouponDataVo dataVo); + @PostMapping("/base/coupon/queryCity") + List<CouponCity> queryCity(Integer id); + @PostMapping("/base/coupon/queryStore") + List<Integer> queryStore(Integer id); + + @PostMapping("/base/coupon/listRecord") + List<Map<String,Object>> listRecord(CouponRecordQuery ofSearch); + + @PostMapping("/base/coupon/updateType") + void updateType(Long id); } 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 new file mode 100644 index 0000000..7c252e3 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java @@ -0,0 +1,30 @@ +package com.dsh.course.feignClient.activity; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.activity.model.IntegralGoodsOfSearch; +import com.dsh.course.feignClient.activity.model.PointMercharsPayedVo; +import com.dsh.course.feignClient.activity.model.PointMercharsVo; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; +import java.util.Map; + +@FeignClient(value = "mb-cloud-activity") +public interface PointMercharsClient { + + @PostMapping("/base/pointMerchars/queryGoodsListSearch") + List<Map<String,Object>> getIntegralGoodsListOfSearch(@RequestBody IntegralGoodsOfSearch ofSearch); + + @PostMapping("/base/pointMerchars/queryPointMerchaseDetailOfId") + PointMercharsVo queryPointMerchaseDetailOfId(@RequestBody Integer pointMercharsId); + + @PostMapping("/base/pointMerchars/updateGoodsGroudingStatus") + boolean updateGoodsGroudingStatus(@RequestBody Map<String,Integer> map); + + @PostMapping("/base/pointMerchars/queryUserPayedGoodsList") + List<Map<String, Object>> queryUserPayedGoodsList(@RequestBody PointMercharsPayedVo pointMercharsPayedVo); + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/Coupon.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/Coupon.java index fa8977e..d299f01 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/Coupon.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/Coupon.java @@ -77,10 +77,12 @@ /** * 开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startTime; /** * 结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date endTime; /** * 使用范围(1=全国,2=指定城市,3=指定门店) diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponCity.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponCity.java new file mode 100644 index 0000000..bdffc88 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponCity.java @@ -0,0 +1,65 @@ +package com.dsh.course.feignClient.activity.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * <p> + * 优惠券使用门店关系数据 + * </p> + * + * @author jqs + * @since 2023-07-07 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_coupon_city") +public class CouponCity extends Model<CouponCity> { + + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 优惠券id + */ + private Integer couponId; + /** + * 省 + */ + @TableField("province") + private String province; + /** + * 省编号 + */ + @TableField("provinceCode") + private String provinceCode; + /** + * 市 + */ + @TableField("city") + private String city; + /** + * 市编号 + */ + @TableField("cityCode") + private String cityCode; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponRecordQuery.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponRecordQuery.java new file mode 100644 index 0000000..a938af4 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponRecordQuery.java @@ -0,0 +1,23 @@ +package com.dsh.course.feignClient.activity.model; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class CouponRecordQuery { + + private long offset; + + private long limit; + + private Integer id; + + private List<Integer> ids; + + private Integer type; + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/IntegralGoodsOfSearch.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/IntegralGoodsOfSearch.java new file mode 100644 index 0000000..d5dd6c0 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/IntegralGoodsOfSearch.java @@ -0,0 +1,29 @@ +package com.dsh.course.feignClient.activity.model; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class IntegralGoodsOfSearch { + + private String name; + + private Integer type; + + private Integer redemptionMethod; + + private Integer userPopulation; + + private Integer activeStatus; + + private Integer state; + + private Page<Map<String, Object>> page; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/PointMercharsPayedVo.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/PointMercharsPayedVo.java new file mode 100644 index 0000000..5a8db1a --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/PointMercharsPayedVo.java @@ -0,0 +1,24 @@ +package com.dsh.course.feignClient.activity.model; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PointMercharsPayedVo { + + Integer id; + + String name; + + String phone; + + Integer status; + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/PointMercharsVo.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/PointMercharsVo.java new file mode 100644 index 0000000..ab8d03b --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/PointMercharsVo.java @@ -0,0 +1,38 @@ +package com.dsh.course.feignClient.activity.model; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PointMercharsVo { + + String name; + /** + * 封面图 + */ + String cover; + /** + * 图片 + */ + String pics; + /** + * 发放数量 + */ + Integer quantityIssued; + /** + * 限领数量 + */ + Integer pickUpQuantity; + /** + * 商品说明 + */ + String content; + /** + * 排序 + */ + Integer sort; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CancelledClassesClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CancelledClassesClient.java new file mode 100644 index 0000000..d6560c1 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CancelledClassesClient.java @@ -0,0 +1,21 @@ +package com.dsh.course.feignClient.course; + +import com.dsh.course.feignClient.course.model.CancelledClasses; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * @author zhibing.pu + * @Date 2023/8/12 3:45 + */ +@FeignClient("mb-cloud-course") +public interface CancelledClassesClient { + + + /** + * 添加数据 + * @param cancelledClasses + */ + @PostMapping("/cancelledClasses/addCancelledClasses") + void addCancelledClasses(CancelledClasses cancelledClasses); +} 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 ed3b04b..73aca6a 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 @@ -66,4 +66,13 @@ */ @PostMapping("/course/editCourseState") void editCourseState(EditCourseState editCourseState); + + + /** + * 根据类型获取数据 + * @param type + * @return + */ + @PostMapping("/course/queryCourseByType") + List<TCourse> queryCourseByType(Integer type); } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java index ba8a483..87ca0c9 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java @@ -2,6 +2,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.feignClient.course.model.QueryCoursePackageLists; +import com.dsh.course.feignClient.course.model.QueryExamineCoursePackageLists; +import com.dsh.course.feignClient.course.model.QueryRegistrationRecord; +import com.dsh.course.feignClient.course.model.TCoursePackage; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -22,4 +25,39 @@ */ @PostMapping("/coursePackage/queryCoursePackageLists") Page<Map<String, Object>> queryCoursePackageLists(QueryCoursePackageLists queryCoursePackageLists); + + + /** + * 添加数据 + * @param coursePackage + */ + @PostMapping("/coursePackage/addCoursePackage") + Integer addCoursePackage(TCoursePackage coursePackage); + + + /** + * 根据id查询数据 + * @param id + * @return + */ + @PostMapping("/base/coursePackage/queryCoursePackageById") + TCoursePackage queryById(Integer id); + + + /** + * 修改数据 + * @param coursePackage + */ + @PostMapping("/coursePackage/updateCoursePackageById") + void updateCoursePackage(TCoursePackage coursePackage); + + + /** + * 获取课包审核列表 + * @param queryExamineCoursePackageLists + * @return + */ + @PostMapping("/coursePackage/queryExamineCoursePackageLists") + Page<Map<String, Object>> queryExamineCoursePackageLists(QueryExamineCoursePackageLists queryExamineCoursePackageLists); + } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java new file mode 100644 index 0000000..b3faf17 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java @@ -0,0 +1,32 @@ +package com.dsh.course.feignClient.course; + +import com.dsh.course.feignClient.course.model.TCoursePackageDiscount; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2023/8/8 14:46 + */ +@FeignClient("mb-cloud-course") +public interface CoursePackageDiscountClient { + + /** + * 获取课包折扣 + * @param coursePackagePaymentConfigId + * @return + */ + @PostMapping("/coursePackageDiscount/queryCoursePackageDiscount") + List<TCoursePackageDiscount> queryCoursePackageDiscount(Integer coursePackagePaymentConfigId); + + + /** + * 配置课包折扣数据 + * @param list + */ + @PostMapping("/coursePackageDiscount/setCoursePackageDiscount") + void setCoursePackageDiscount(List<TCoursePackageDiscount> list); + +} 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 new file mode 100644 index 0000000..3bfda52 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java @@ -0,0 +1,53 @@ +package com.dsh.course.feignClient.course; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.course.model.QueryRegistrationRecord; +import com.dsh.course.feignClient.course.model.QueryWalkInStudentList; +import com.dsh.course.feignClient.course.model.TCoursePackagePayment; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2023/8/10 19:51 + */ +@FeignClient("mb-cloud-course") +public interface CoursePackagePaymentClient { + + + /** + * 获取课程报名信息列表 + * @param queryRegistrationRecord + * @return + */ + @PostMapping("/coursePackagePayment/queryRegistrationRecord") + Page<Map<String, Object>> queryRegistrationRecord(QueryRegistrationRecord queryRegistrationRecord); + + + /** + * 获取未预约排课学员列表 + * @param queryWalkInStudentList + * @return + */ + @PostMapping("/coursePackagePayment/queryWalkInStudentList") + Page<Map<String, Object>> queryWalkInStudentList(QueryWalkInStudentList queryWalkInStudentList); + + + /** + * 根据id获取数据 + * @param id + * @return + */ + @PostMapping("/coursePackagePayment/queryCoursePackagePaymentById") + TCoursePackagePayment queryCoursePackagePaymentById(Long id); + + + /** + * 修改数据 + * @param coursePackagePayment + */ + @PostMapping("/coursePackagePayment/editCoursePackagePayment") + void editCoursePackagePayment(TCoursePackagePayment coursePackagePayment); +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentConfigClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentConfigClient.java new file mode 100644 index 0000000..8f8663b --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentConfigClient.java @@ -0,0 +1,41 @@ +package com.dsh.course.feignClient.course; + +import com.dsh.course.feignClient.course.model.CoursePackagePaymentConfig; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; + + +/** + * @author zhibing.pu + * @Date 2023/8/7 11:45 + */ +@FeignClient("mb-cloud-course") +public interface CoursePackagePaymentConfigClient { + + + /** + * 添加数据 + * @param coursePackagePaymentConfig + */ + @PostMapping("/coursePackagePaymentConfig/addCoursePackagePaymentConfig") + void addCoursePackagePaymentConfig(CoursePackagePaymentConfig coursePackagePaymentConfig); + + + /** + * 根据课包id获取价格配置 + * @param coursePackageId + * @return + */ + @PostMapping("/coursePackagePaymentConfig/queryCoursePackagePaymentConfigList") + List<CoursePackagePaymentConfig> queryCoursePackagePaymentConfigList(Integer coursePackageId); + + + /** + * 删除数据 + * @param coursePackageId + */ + @PostMapping("/coursePackagePaymentConfig/delCoursePackagePaymentConfig") + void delCoursePackagePaymentConfig(Integer coursePackageId); +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageSchedulingClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageSchedulingClient.java new file mode 100644 index 0000000..0dec91e --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageSchedulingClient.java @@ -0,0 +1,43 @@ +package com.dsh.course.feignClient.course; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.course.model.CoursePackageScheduling; +import com.dsh.course.feignClient.course.model.QueryCoursePackageSchedulingList; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2023/8/11 10:59 + */ +@FeignClient("mb-cloud-course") +public interface CoursePackageSchedulingClient { + + + /** + * 获取课包排课记录 + * @param queryCoursePackageSchedulingList + * @return + */ + @PostMapping("/coursePackageScheduling/queryCoursePackageSchedulingList") + Page<Map<String, Object>> queryCoursePackageSchedulingList(QueryCoursePackageSchedulingList queryCoursePackageSchedulingList); + + + /** + * 根据id查询排课数据 + * @param id + * @return + */ + @PostMapping("/coursePackageScheduling/queryCoursePackageSchedulingById") + CoursePackageScheduling queryCoursePackageSchedulingById(Long id); + + + /** + * 编辑数据 + * @param coursePackageScheduling + */ + @PostMapping("/coursePackageScheduling/editCoursePackageScheduling") + void editCoursePackageScheduling(CoursePackageScheduling coursePackageScheduling); +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageStudentClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageStudentClient.java new file mode 100644 index 0000000..d9a706c --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageStudentClient.java @@ -0,0 +1,71 @@ +package com.dsh.course.feignClient.course; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.course.model.CoursePackageStudent; +import com.dsh.course.feignClient.course.model.QueryCoursePackageStudent; +import com.dsh.course.feignClient.course.model.QueryCoursePackageStudentList; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2023/8/11 17:38 + */ +@FeignClient("mb-cloud-course") +public interface CoursePackageStudentClient { + + + /** + * 获取课程排课预约数据 + * @param queryCoursePackageStudentList + * @return + */ + @PostMapping("/coursePackageStudent/queryCoursePackageStudentList") + Page<Map<String, Object>> queryCoursePackageStudentList(QueryCoursePackageStudentList queryCoursePackageStudentList); + + + /** + * 根据id查询数据 + * @param id + * @return + */ + @PostMapping("/coursePackageStudent/queryCoursePackageStudentById") + CoursePackageStudent queryCoursePackageStudentById(Long id); + + + /** + * 修改数据 + * @param coursePackageStudent + */ + @PostMapping("/coursePackageStudent/editCoursePackageStudent") + void editCoursePackageStudent(CoursePackageStudent coursePackageStudent); + + + /** + * 根据排课id获取预约数据 + * @param coursePackageSchedulingId + * @return + */ + @PostMapping("/coursePackageStudent/queryByCoursePackageSchedulingId") + List<CoursePackageStudent> queryByCoursePackageSchedulingId(Long coursePackageSchedulingId); + + + /** + * 获取学员上课数据 + * @param queryCoursePackageStudent + * @return + */ + @PostMapping("/coursePackageStudent/queryCoursePackageStudent") + List<CoursePackageStudent> queryCoursePackageStudent(QueryCoursePackageStudent queryCoursePackageStudent); + + + /** + * 添加学员上课数据 + * @param coursePackageStudent + */ + @PostMapping("/coursePackageStudent/addCoursePackageStudent") + void addCoursePackageStudent(CoursePackageStudent coursePackageStudent); +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CancelledClasses.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CancelledClasses.java new file mode 100644 index 0000000..787078b --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CancelledClasses.java @@ -0,0 +1,69 @@ +package com.dsh.course.feignClient.course.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * <p> + * 课包消课记录 + * </p> + * + * @author jqs + * @since 2023-06-29 + */ +@Data +public class CancelledClasses extends Model<CancelledClasses> { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Integer id; + /** + * 消课类型(1=上课消课,2=支付消课) + */ + private Integer type; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 课程支付记录id + */ + private Long coursePackagePaymentId; + /** + * 排课记录id + */ + private Long coursePackageSchedulingId; + /** + * 消课凭证 + */ + private String voucher; + /** + * 消课数量 + */ + private Integer cancelledClassesNumber; + /** + * 添加时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date insertTime; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java new file mode 100644 index 0000000..6533a11 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java @@ -0,0 +1,35 @@ +package com.dsh.course.feignClient.course.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @author zhibing.pu + * @date 2023/6/29 10:42 + */ +@Data +public class CoursePackagePaymentConfig { + /** + * 主键 + */ + private Integer id; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 课时数 + */ + private Integer classHours; + /** + * 现金支付价格 + */ + private Double cashPayment; + /** + * 玩湃币价格 + */ + private Integer playPaiCoin; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageScheduling.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageScheduling.java new file mode 100644 index 0000000..83f5d5f --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageScheduling.java @@ -0,0 +1,56 @@ +package com.dsh.course.feignClient.course.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @author zhibing.pu + * @Date 2023/8/11 10:46 + */ +@Data +public class CoursePackageScheduling { + /** + * 主键 + */ + private Long id; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 上课日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date classDate; + /** + * 结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endDate; + /** + * 课后练习课程id + */ + private Integer courseId; + /** + * 可获得积分 + */ + private Integer integral; + /** + * 消课凭证 + */ + private String cancelClasses; + /** + * 扣除课时 + */ + private Integer deductClassHour; + /** + * 状态(1=未开始,2=已开始,3=已结束,4=已取消) + */ + private Integer status; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageStudent.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageStudent.java new file mode 100644 index 0000000..3fb4383 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageStudent.java @@ -0,0 +1,71 @@ +package com.dsh.course.feignClient.course.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * <p> + * 学员上课记录 + * </p> + * + * @author jqs + * @since 2023-06-30 + */ +@Data +public class CoursePackageStudent extends Model<CoursePackageStudent> { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + /** + * 用户id + */ + private Integer appUserId; + /** + * 学员id + */ + private Integer studentId; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 课包购买记录id + */ + private Long coursePackagePaymentId; + /** + * 排课记录id + */ + private Long coursePackageSchedulingId; + /** + * 到课状态(0=否,1=是) + */ + private Integer signInOrNot; + /** + * 预约状态(0=取消,1=预约) + */ + private Integer reservationStatus; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date insertTime; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageSchedulingList.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageSchedulingList.java new file mode 100644 index 0000000..4207918 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageSchedulingList.java @@ -0,0 +1,20 @@ +package com.dsh.course.feignClient.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/11 11:00 + */ +@Data +public class QueryCoursePackageSchedulingList { + /** + * 课包id + */ + private Integer coursePackageId; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageStudent.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageStudent.java new file mode 100644 index 0000000..cc6ce81 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageStudent.java @@ -0,0 +1,39 @@ +package com.dsh.course.feignClient.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/12 3:12 + */ +@Data +public class QueryCoursePackageStudent { + /** + * 用户id + */ + private Integer appUserId; + /** + * 学员id + */ + private Integer studentId; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 课包购买记录id + */ + private Long coursePackagePaymentId; + /** + * 排课记录id + */ + private Long coursePackageSchedulingId; + /** + * 到课状态(0=否,1=是) + */ + private Integer signInOrNot; + /** + * 预约状态(0=取消,1=预约) + */ + private Integer reservationStatus; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageStudentList.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageStudentList.java new file mode 100644 index 0000000..6023bcd --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryCoursePackageStudentList.java @@ -0,0 +1,28 @@ +package com.dsh.course.feignClient.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/11 17:07 + */ +@Data +public class QueryCoursePackageStudentList { + /** + * 排课id + */ + private Long coursePackageSchedulingId; + /** + * 用户姓名 + */ + private String userName; + /** + * 学员姓名 + */ + private String studentName; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryExamineCoursePackageLists.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryExamineCoursePackageLists.java new file mode 100644 index 0000000..290b462 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryExamineCoursePackageLists.java @@ -0,0 +1,36 @@ +package com.dsh.course.feignClient.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/13 3:22 + */ +@Data +public class QueryExamineCoursePackageLists { + /** + * 省编号 + */ + private String provinceCode; + /** + * 市编号 + */ + private String cityCode; + /** + * 课程类型id + */ + private Integer coursePackageTypeId; + /** + * 课程名称 + */ + private String name; + /** + * 审核状态(1=待审核,2=已同意,3=已拒绝) + */ + private Integer auditStatus; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryRegistrationRecord.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryRegistrationRecord.java new file mode 100644 index 0000000..967a03f --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryRegistrationRecord.java @@ -0,0 +1,28 @@ +package com.dsh.course.feignClient.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/10 19:47 + */ +@Data +public class QueryRegistrationRecord { + /** + * 课程id + */ + private Integer coursePackageId; + /** + * 用户名称 + */ + private String userName; + /** + * 学员名称 + */ + private String studentName; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryWalkInStudentList.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryWalkInStudentList.java new file mode 100644 index 0000000..36a4e78 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryWalkInStudentList.java @@ -0,0 +1,28 @@ +package com.dsh.course.feignClient.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2023/8/12 2:46 + */ +@Data +public class QueryWalkInStudentList { + /** + * 课程id + */ + private Long coursePackageSchedulingId; + /** + * 用户名称 + */ + private String userName; + /** + * 学员名称 + */ + private String studentName; + + private String order; + private Integer offset; + private Integer limit; + private String sort; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java new file mode 100644 index 0000000..3e75872 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java @@ -0,0 +1,128 @@ +package com.dsh.course.feignClient.course.model; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * <p> + * 课包 + * </p> + * + * @author administrator + * @since 2023-06-14 + */ +@Data +public class TCoursePackage extends Model<TCoursePackage>{ + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Integer id; + /** + * 省 + */ + private String province; + /** + * 省编号 + */ + private String provinceCode; + /** + * 市 + */ + private String city; + /** + * 市编号 + */ + private String cityCode; + /** + * 门店id + */ + private Integer storeId; + /** + * 课包类型id + */ + private Integer coursePackageTypeId; + /** + * 课包名称 + */ + private String name; + /** + * 上课场地id + */ + private Integer siteId; + /** + * 教练id + */ + private Integer coachId; + /** + * 最多预约人数 + */ + private Integer maxSubscribeNumber; + /** + * 上课开始时间 + */ + private String classStartTime; + /** + * 上课结束时段 + */ + private String classEndTime; + /** + * 上课周,多个分号分隔 + */ + private String classWeeks; + /** + * 封面图 + */ + private String coverDrawing; + /** + * 详情图 + */ + private String detailDrawing; + /** + * 介绍图 + */ + private String introduceDrawing; + /** + * 排序 + */ + private Integer sort; + /** + * 支付方式(1=现金,2=玩湃币) + */ + private Integer payType; + /** + * 有效天数 + */ + private Integer validDays; + /** + * 课程状态(1=未开始,2=进行中,3=已结束,4=已取消) + */ + private Integer status; + /** + * 审核状态(1=待审核,2=已同意,3=已拒绝) + */ + private Integer auditStatus; + /** + * 审核人id + */ + private Integer auditUserId; + /** + * 审核备注 + */ + private String authRemark; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date insertTime; + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackageDiscount.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackageDiscount.java new file mode 100644 index 0000000..32dc3c1 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackageDiscount.java @@ -0,0 +1,67 @@ +package com.dsh.course.feignClient.course.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * <p> + * 课包折扣 + * </p> + * + * @author administrator + * @since 2023-06-14 + */ +@Data +public class TCoursePackageDiscount extends Model<TCoursePackageDiscount>{ + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Integer id; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 课包价格规则id + */ + private Integer coursePackagePaymentConfigId; + /** + * 折扣类型(1=会员折扣,2=续课优惠,3=限时折扣,4=赠送课时) + */ + private Integer type; + /** + * 折扣优惠规则JSON ->详见 DiscountJsonDto类 + */ + private String content; + /** + * 审核状态(1=待审核,2=已通过,3=已拒绝) + */ + private Integer auditStatus; + /** + * 审核人id + */ + private Integer auditUserId; + /** + * 审核备注 + */ + private String auditRemark; + /** + * 添加时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date insertTime; + + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java new file mode 100644 index 0000000..c73435a --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java @@ -0,0 +1,127 @@ +package com.dsh.course.feignClient.course.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * <p> + * 用户课程包购买记录 + * </p> + * + * @author administrator + * @since 2023-06-14 + */ +@Data +public class TCoursePackagePayment extends Model<TCoursePackagePayment>{ + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + /** + * 业务编号 + */ + private String code; + /** + * 用户id + */ + private Integer appUserId; + /** + * 学员id + */ + private Integer studentId; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 支付方式(1=微信,2=支付宝,3=玩湃币,4=积分,5=积分+微信,6=积分+支付宝) + */ + private Integer payType; + /** + * 课时数 + */ + private Integer classHours; + /** + * 原价 + */ + private Double originalPrice; + /** + * 优惠券id + */ + private Long userCouponId; + /** + * 现金支付价格 + */ + private BigDecimal cashPayment; + /** + * 玩湃币价格/积分 + */ + private Integer playPaiCoin; + /** + * 总课时 + */ + private Integer totalClassHours; + /** + * 剩余课时 + */ + private Integer laveClassHours; + /** + * 缺课次数 + */ + private Integer absencesNumber; + /** + * 退课课时 + */ + private Integer dropoutsNumber; + /** + * 支付用户类型(1=用户,2=管理员) + */ + private Integer payUserType; + /** + * 支付状态(1=待支付,2=已支付) + */ + private Integer payStatus; + /** + * 第三方支付流水号 + */ + private String orderNumber; + /** + * 支付用户id + */ + private Integer payUserId; + /** + * 课程状态(1=正常,2=已退课) + */ + private Integer status; + /** + * 退课时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date withdrawalTime; + /** + * 退课凭证 + */ + private String certificate; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date insertTime; + +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java index e027a45..544365d 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java @@ -1,22 +1,31 @@ package com.dsh.guns.modular.system.controller.code; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.account.AppUserClient; import com.dsh.course.feignClient.account.CityManagerClient; import com.dsh.course.feignClient.account.model.CityManager; +import com.dsh.course.feignClient.account.model.QueryByNamePhone; +import com.dsh.course.feignClient.account.model.TAppUser; import com.dsh.course.feignClient.activity.CouponClient; +import com.dsh.course.feignClient.activity.model.Coupon; +import com.dsh.course.feignClient.activity.model.CouponCity; import com.dsh.course.feignClient.activity.model.CouponListOfSearch; +import com.dsh.course.feignClient.activity.model.CouponRecordQuery; import com.dsh.guns.config.UserExt; import com.dsh.guns.core.base.tips.SuccessTip; import com.dsh.guns.core.common.constant.factory.PageFactory; import com.dsh.guns.core.util.ToolUtil; import com.dsh.guns.modular.system.model.CouponDataVo; import com.dsh.guns.modular.system.model.Region; +import com.dsh.guns.modular.system.model.TStore; import com.dsh.guns.modular.system.service.IRegionService; import com.dsh.guns.modular.system.service.IStoreService; import com.dsh.guns.modular.system.util.OBSUploadUtil; import org.apache.commons.beanutils.ConvertUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @@ -24,10 +33,9 @@ import javax.annotation.Resource; import java.io.IOException; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; /** @@ -55,6 +63,9 @@ @Resource private CityManagerClient cmgrClient; + @Autowired + private AppUserClient appUserClient; + /** @@ -77,6 +88,74 @@ } + @RequestMapping("/coupon_record/{id}") + public String memberCouponAdd(@PathVariable Integer id,Model model) { + Coupon coupon = client.queryCouponById(id); + + model.addAttribute("id",id); + model.addAttribute("type",coupon.getType()); + return PREFIX + "TCouponRecord.html"; + } + + + + @RequestMapping("/coupon_detail/{id}") + public String memberCouponDetail(@PathVariable Integer id,Model model) { + Coupon coupon = client.queryCouponById(id); + String content = coupon.getContent(); + JSONObject jsonObject = JSONObject.parseObject(content); + String one =""; + String two =""; + String three =""; + if(coupon.getType()==1){ + one = jsonObject.get("conditionalAmount").toString(); + two = jsonObject.get("deductionAmount").toString(); + } + if(coupon.getType()==2){ + one = jsonObject.get("conditionalAmount").toString(); + } + if(coupon.getType()==3){ + three = jsonObject.get("experienceName").toString(); + } + List<CouponCity> list = new ArrayList<>(); + List<Integer> list1=null; + List<TStore> list2=new ArrayList<>(); + if(coupon.getUseScope()==2){ + list = client.queryCity(coupon.getId()); + } + if(coupon.getUseScope()==3){ + list1 = client.queryStore(coupon.getId()); + list2 = storeService.list(new LambdaQueryWrapper<TStore>().in(TStore::getId, list1)); + for (TStore tStore : list2) { + CityManager cityManager = cmgrClient.queryCityManagerById(tStore.getCityManagerId()); + if (ToolUtil.isNotEmpty(cityManager)){ + tStore.setProvince(tStore.getProvince()+tStore.getCity()); + tStore.setPhone(cityManager.getName()+"-"+cityManager.getPhone()); + } + } + + } + model.addAttribute("city",list); + model.addAttribute("store",list2); + model.addAttribute("s",new SimpleDateFormat("yyyy-MM-dd").format(coupon.getStartTime())); + model.addAttribute("e",new SimpleDateFormat("yyyy-MM-dd").format(coupon.getEndTime())); + model.addAttribute("one",one); + model.addAttribute("two",two); + model.addAttribute("three",three); + ArrayList<String> strings = new ArrayList<>(); + String productImages = coupon.getProductImages(); + for (String s : productImages.split(",")) { + strings.add(s); + } + + model.addAttribute("img",strings); + Integer objectType = UserExt.getUser().getObjectType(); + System.out.println(objectType); + model.addAttribute("item",coupon); + return PREFIX + "TCouponInfo.html"; + } + + /** * 跳转到门店管理列表页 @@ -84,6 +163,12 @@ @RequestMapping("/storeList") public String storePage(Model model) { return PREFIX + "TQuestionEdit.html"; + } + @RequestMapping("/updateType") + @ResponseBody + public Object updateType(Long id) { + client.updateType(id); + return new SuccessTip<>(); } @RequestMapping("/storeDetailsOfSearch") @@ -137,12 +222,47 @@ ofSearch.setState(state); return client.getCouponListOfSearch(ofSearch); } + @RequestMapping(value = "/listRecord") + @ResponseBody + public Object listRecord(Integer id,String name, Integer type, String phone) { + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(); + List<TAppUser> tAppUsers = appUserClient.queryByNamePhone(new QueryByNamePhone(name, phone)); + if(tAppUsers.size()==0){ + return new ArrayList<>(); + } + CouponRecordQuery ofSearch = new CouponRecordQuery(); + ofSearch.setId(id); + ofSearch.setLimit(page.getSize()); + ofSearch.setOffset(page.getCurrent()); + ofSearch.setIds(tAppUsers.stream().map(TAppUser::getId).collect(Collectors.toList())); + ofSearch.setType(type); + List<Map<String, Object>> maps = client.listRecord(ofSearch); + for (Map<String, Object> map : maps) { + map.put("id",map.get("id").toString()); + for (TAppUser tAppUser : tAppUsers) { + if(map.get("userId").equals(tAppUser.getId())){ + map.put("name",tAppUser.getName()); + map.put("phone",tAppUser.getPhone()); + } + } + } + return maps; + } @RequestMapping(value = "/getProvince") @ResponseBody public Object getProvince(){ return regiService.list(new LambdaQueryWrapper<Region>() .eq(Region::getParentId,0)); + } + + @RequestMapping(value = "/onShelf") + @ResponseBody + public Object onShelf(Integer id,Integer type){ + Coupon coupon = client.queryCouponById(id); + coupon.setState(type); + client.updateCouponData(coupon); + return new SuccessTip<>(); } @@ -188,4 +308,14 @@ client.insertIntoData(dataVo); return new SuccessTip<>(); } + @PostMapping(value = "/update") + @ResponseBody + public Object update( Integer id,Integer num,Integer num1,String text){ + Coupon coupon = client.queryCouponById(id); + coupon.setQuantityIssued(num); + coupon.setPickUpQuantity(num1); + coupon.setIllustrate(text); + client.updateCouponData(coupon); + return new SuccessTip<>(); + } } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCourseController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCourseController.java index b600818..a4f036a 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCourseController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCourseController.java @@ -11,6 +11,7 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Map; /** @@ -146,4 +147,16 @@ courseService.editCourseState(id, state); return ResultUtil.success(); } + + + /** + * 根据类型获取数据 + * @param type + * @return + */ + @ResponseBody + @PostMapping("/queryCourseByType") + public List<TCourse> queryCourseByType(Integer type){ + return courseService.queryCourseByType(type); + } } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java index 4c8dc1a..62c7ec2 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java @@ -1,20 +1,26 @@ package com.dsh.guns.modular.system.controller.code; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.feignClient.account.CityManagerClient; import com.dsh.course.feignClient.account.CoachClient; import com.dsh.course.feignClient.account.model.CityManager; import com.dsh.course.feignClient.account.model.Coach; +import com.dsh.course.feignClient.course.CoursePackageClient; +import com.dsh.course.feignClient.course.CoursePackageDiscountClient; +import com.dsh.course.feignClient.course.CoursePackagePaymentConfigClient; import com.dsh.course.feignClient.course.CoursePackageTypeClient; -import com.dsh.course.feignClient.course.model.TCoursePackageType; +import com.dsh.course.feignClient.course.model.*; 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.TSite; import com.dsh.guns.modular.system.model.TStore; import com.dsh.guns.modular.system.service.ICoursePackageService; import com.dsh.guns.modular.system.service.IStoreService; import com.dsh.guns.modular.system.service.ITSiteService; +import com.dsh.guns.modular.system.util.ResultUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -24,8 +30,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author zhibing.pu @@ -55,6 +60,15 @@ @Resource private CoachClient coachClient; + @Resource + private CoursePackagePaymentConfigClient coursePackagePaymentConfigClient; + + @Resource + private CoursePackageDiscountClient coursePackageDiscountClient; + + @Resource + private CoursePackageClient coursePackageClient; + @@ -82,7 +96,11 @@ } - + /** + * 跳转到添加页 + * @param model + * @return + */ @GetMapping("/openAddCoursePackage") public String openAddCoursePackage(Model model){ Integer objectType = UserExt.getUser().getObjectType(); @@ -111,6 +129,264 @@ } + /** + * 跳转到编辑页 + * @param model + * @param id + * @return + */ + @GetMapping("/openEditCoursePackage") + public String openEditCoursePackage(Model model, Integer id){ + TCoursePackage tCoursePackage = coursePackageService.queryById(id); + model.addAttribute("item", tCoursePackage); + model.addAttribute("classTime", tCoursePackage.getClassStartTime() + ":00 - " + tCoursePackage.getClassEndTime() + ":00"); + String[] split = tCoursePackage.getClassWeeks().split(";"); + List<String> list5 = Arrays.asList("周一", "周二", "周三", "周四", "周五", "周六", "周日"); + List<Map<String, Object>> classWeeks = new ArrayList<>(); + for (String s : list5) { + Map<String, Object> map = new HashMap<>(); + map.put("value", s); + map.put("checked", false); + for (String s1 : split) { + if(s.equals(s1)){ + map.put("checked", true); + } + } + classWeeks.add(map); + } + model.addAttribute("classWeeks", classWeeks); + List<TCoursePackageType> tCoursePackageTypes = coursePackageTypeClient.queryAllCoursePackageType(); + model.addAttribute("coursePackageType", tCoursePackageTypes); + String cityCode = tCoursePackage.getCityCode(); + String provinceCode = tCoursePackage.getProvinceCode(); + List<Map<String, Object>> list = storeService.queryProvince(cityCode); + model.addAttribute("province", list); + List<Map<String, Object>> list1 = storeService.queryCity(provinceCode, cityCode); + model.addAttribute("city", list1); + List<TStore> list2 = storeService.list(new QueryWrapper<TStore>().eq("cityCode", cityCode).eq("state", 1)); + model.addAttribute("store", list2); + List<TSite> list3 = siteService.list(new QueryWrapper<TSite>().eq("storeId", tCoursePackage.getStoreId()).eq("state", 1)); + model.addAttribute("site", list3); + List<Coach> coaches = coachClient.queryCoachByCity(cityCode); + model.addAttribute("coach", coaches); + List<CoursePackagePaymentConfig> list4 = coursePackagePaymentConfigClient.queryCoursePackagePaymentConfigList(id); + model.addAttribute("coursePackagePaymentConfig", list4.remove(0)); + model.addAttribute("coursePackagePaymentConfigs", list4); + CoursePackagePaymentConfig coursePackagePaymentConfig = list4.get(0); + model.addAttribute("cashPayment", coursePackagePaymentConfig.getCashPayment() == 0 ? false : true); + model.addAttribute("playPaiCoin", coursePackagePaymentConfig.getPlayPaiCoin() == 0 ? false : true); + return PREFIX + "coursePackage_edit.html"; + } + + + /** + * 跳转详情页 + * @param model + * @param id + * @return + */ + @GetMapping("/showCoursePackageDetails") + public String showCoursePackageDetails(Model model, Integer id){ + TCoursePackage tCoursePackage = coursePackageService.queryById(id); + model.addAttribute("item", tCoursePackage); + model.addAttribute("classTime", tCoursePackage.getClassStartTime() + ":00 - " + tCoursePackage.getClassEndTime() + ":00"); + String[] split = tCoursePackage.getClassWeeks().split(";"); + List<String> list5 = Arrays.asList("周一", "周二", "周三", "周四", "周五", "周六", "周日"); + List<Map<String, Object>> classWeeks = new ArrayList<>(); + for (String s : list5) { + Map<String, Object> map = new HashMap<>(); + map.put("value", s); + map.put("checked", false); + for (String s1 : split) { + if(s.equals(s1)){ + map.put("checked", true); + } + } + classWeeks.add(map); + } + model.addAttribute("classWeeks", classWeeks); + List<TCoursePackageType> tCoursePackageTypes = coursePackageTypeClient.queryAllCoursePackageType(); + model.addAttribute("coursePackageType", tCoursePackageTypes); + String cityCode = tCoursePackage.getCityCode(); + String provinceCode = tCoursePackage.getProvinceCode(); + List<Map<String, Object>> list = storeService.queryProvince(cityCode); + model.addAttribute("province", list); + List<Map<String, Object>> list1 = storeService.queryCity(provinceCode, cityCode); + model.addAttribute("city", list1); + List<TStore> list2 = storeService.list(new QueryWrapper<TStore>().eq("cityCode", cityCode).eq("state", 1)); + model.addAttribute("store", list2); + List<TSite> list3 = siteService.list(new QueryWrapper<TSite>().eq("storeId", tCoursePackage.getStoreId()).eq("state", 1)); + model.addAttribute("site", list3); + List<Coach> coaches = coachClient.queryCoachByCity(cityCode); + model.addAttribute("coach", coaches); + List<CoursePackagePaymentConfig> list4 = coursePackagePaymentConfigClient.queryCoursePackagePaymentConfigList(id); + model.addAttribute("coursePackagePaymentConfig", list4.remove(0)); + model.addAttribute("coursePackagePaymentConfigs", list4); + CoursePackagePaymentConfig coursePackagePaymentConfig = list4.get(0); + model.addAttribute("cashPayment", coursePackagePaymentConfig.getCashPayment() == 0 ? false : true); + model.addAttribute("playPaiCoin", coursePackagePaymentConfig.getPlayPaiCoin() == 0 ? false : true); + return PREFIX + "coursePackage_info.html"; + } + + + /** + * 跳转到折扣页 + * @param model + * @param id + * @return + */ + @GetMapping("/showCoursePackageDiscount") + public String showCoursePackageDiscount(Model model, Integer id){ + TCoursePackage tCoursePackage = coursePackageService.queryById(id); + model.addAttribute("item", tCoursePackage); + List<CoursePackagePaymentConfig> list4 = coursePackagePaymentConfigClient.queryCoursePackagePaymentConfigList(id); + List<Map<String, Object>> list = new ArrayList<>(); + for (CoursePackagePaymentConfig coursePackagePaymentConfig : list4) { + if(coursePackagePaymentConfig.getCashPayment() == 0){ + continue; + } + Map<String, Object> map = new HashMap<>(); + map.put("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()); + map.put("classHours", coursePackagePaymentConfig.getClassHours()); + String payment = ""; + if(coursePackagePaymentConfig.getCashPayment() > 0){ + payment += "现金支付"; + } + if(coursePackagePaymentConfig.getPlayPaiCoin() > 0){ + payment += (ToolUtil.isNotEmpty(payment) ? "、" : "") + "玩湃币支付"; + } + map.put("payment", payment); + map.put("cashPayment", coursePackagePaymentConfig.getCashPayment()); + List<TCoursePackageDiscount> tCoursePackageDiscounts = coursePackageDiscountClient.queryCoursePackageDiscount(coursePackagePaymentConfig.getId()); + map.put("coursePackageDiscount", tCoursePackageDiscounts); + list.add(map); + } + model.addAttribute("coursePackagePaymentConfig", JSON.toJSONString(list)); + return PREFIX + "coursePackageDiscount.html"; + } + + + /** + * 跳转到报名列表页 + * @param model + * @param id + * @return + */ + @GetMapping("/registrationRecord") + public String registrationRecord(Model model, Integer id){ + TCoursePackage tCoursePackage = coursePackageService.queryById(id); + model.addAttribute("item", tCoursePackage); + return PREFIX + "registrationRecord.html"; + } + + + /** + * 跳转到上课记录列表页 + * @param model + * @param id + * @return + */ + @GetMapping("/openClassRecord") + public String openClassRecord(Model model, Integer id){ + TCoursePackage tCoursePackage = coursePackageClient.queryById(id); + TStore store = storeService.getById(tCoursePackage.getStoreId()); + Coach coach = coachClient.queryCoachById(tCoursePackage.getCoachId()); + model.addAttribute("item", tCoursePackage); + model.addAttribute("store", store); + model.addAttribute("coach", coach); + return PREFIX + "classRecord.html"; + } + + + /** + * 跳转到查看学员列表 + * @param model + * @param id + * @return + */ + @GetMapping("/openCoursePackageStudent") + public String openCoursePackageStudent(Model model, Long id){ + model.addAttribute("id", id); + return PREFIX + "coursePackageStudent.html"; + } + + + /** + * 跳转到手动预约列表 + * @param model + * @param id + * @return + */ + @GetMapping("/openManualReservation") + public String openManualReservation(Model model, Long id){ + model.addAttribute("id", id); + return PREFIX + "manualReservation.html"; + } + + + /** + * 跳转到课包审核列表页 + * @return + */ + @GetMapping("/examineCoursePackage") + public String examineCoursePackage(Model model){ + List<TCoursePackageType> tCoursePackageTypes = coursePackageTypeClient.queryAllCoursePackageType(); + model.addAttribute("coursePackageType", tCoursePackageTypes); + List<Map<String, Object>> list = storeService.queryProvince(null); + model.addAttribute("province", list); + return PREFIX + "examineCoursePackage.html"; + } + + + /** + * 跳转到审核详情页 + * @param model + * @param id + * @return + */ + @GetMapping("/showExamineCoursePackageDetails") + public String showExamineCoursePackageDetails(Model model, Integer id){ + TCoursePackage tCoursePackage = coursePackageService.queryById(id); + model.addAttribute("item", tCoursePackage); + model.addAttribute("classTime", tCoursePackage.getClassStartTime() + ":00 - " + tCoursePackage.getClassEndTime() + ":00"); + String[] split = tCoursePackage.getClassWeeks().split(";"); + List<String> list5 = Arrays.asList("周一", "周二", "周三", "周四", "周五", "周六", "周日"); + List<Map<String, Object>> classWeeks = new ArrayList<>(); + for (String s : list5) { + Map<String, Object> map = new HashMap<>(); + map.put("value", s); + map.put("checked", false); + for (String s1 : split) { + if(s.equals(s1)){ + map.put("checked", true); + } + } + classWeeks.add(map); + } + model.addAttribute("classWeeks", classWeeks); + List<TCoursePackageType> tCoursePackageTypes = coursePackageTypeClient.queryAllCoursePackageType(); + model.addAttribute("coursePackageType", tCoursePackageTypes); + String cityCode = tCoursePackage.getCityCode(); + String provinceCode = tCoursePackage.getProvinceCode(); + List<Map<String, Object>> list = storeService.queryProvince(cityCode); + model.addAttribute("province", list); + List<Map<String, Object>> list1 = storeService.queryCity(provinceCode, cityCode); + model.addAttribute("city", list1); + List<TStore> list2 = storeService.list(new QueryWrapper<TStore>().eq("cityCode", cityCode).eq("state", 1)); + model.addAttribute("store", list2); + List<TSite> list3 = siteService.list(new QueryWrapper<TSite>().eq("storeId", tCoursePackage.getStoreId()).eq("state", 1)); + model.addAttribute("site", list3); + List<Coach> coaches = coachClient.queryCoachByCity(cityCode); + model.addAttribute("coach", coaches); + List<CoursePackagePaymentConfig> list4 = coursePackagePaymentConfigClient.queryCoursePackagePaymentConfigList(id); + model.addAttribute("coursePackagePaymentConfig", list4.remove(0)); + model.addAttribute("coursePackagePaymentConfigs", list4); + CoursePackagePaymentConfig coursePackagePaymentConfig = list4.get(0); + model.addAttribute("cashPayment", coursePackagePaymentConfig.getCashPayment() == 0 ? false : true); + model.addAttribute("playPaiCoin", coursePackagePaymentConfig.getPlayPaiCoin() == 0 ? false : true); + return PREFIX + "examineCoursePackage_info.html"; + } + @@ -131,6 +407,44 @@ } return storeService.queryCity(code, cityCode); } + + + /** + * 根据城市code获取门店 + * @param cityCode + * @return + */ + @ResponseBody + @PostMapping("/queryStore") + public List<TStore> queryStore(String cityCode){ + List<TStore> list = storeService.list(new QueryWrapper<TStore>().eq("cityCode", cityCode).eq("state", 1)); + return list; + } + + /** + * 根据门店id获取场地 + * @param storeId + * @return + */ + @ResponseBody + @PostMapping("/querySite") + public List<TSite> querySite(Integer storeId){ + List<TSite> list = siteService.list(new QueryWrapper<TSite>().eq("storeId", storeId).eq("state", 1)); + return list; + } + + /** + * 获取城市教练 + * @param cityCode + * @return + */ + @ResponseBody + @PostMapping("/queryCoach") + public List<Coach> queryCoach(String cityCode){ + List<Coach> coaches = coachClient.queryCoachByCity(cityCode); + return coaches; + } + /** @@ -162,7 +476,266 @@ } + /** + * 添加课包数据 + * @param coursePackage + * @param coursePackagePaymentConfig + * @return + */ + @ResponseBody + @PostMapping("/addCoursePackage") + public ResultUtil addCoursePackage(TCoursePackage coursePackage, String coursePackagePaymentConfig){ + String classStartTime = coursePackage.getClassStartTime(); + String classEndTime = coursePackage.getClassEndTime(); + classStartTime = classStartTime.substring(0, classStartTime.lastIndexOf(":")); + classEndTime = classEndTime.substring(0, classEndTime.lastIndexOf(":")); + coursePackage.setClassStartTime(classStartTime); + coursePackage.setClassEndTime(classEndTime); + coursePackage.setAuditStatus(1); + coursePackage.setStatus(1); + coursePackage.setState(1); + coursePackage.setInsertTime(new Date()); + coursePackageService.addCoursePackage(coursePackage, coursePackagePaymentConfig); + return ResultUtil.success(); + } + /** + * 修改数据 + * @param coursePackage + * @param coursePackagePaymentConfig + * @return + */ + @ResponseBody + @PostMapping("/updateCoursePackage") + public ResultUtil updateCoursePackage(TCoursePackage coursePackage, String coursePackagePaymentConfig){ + String classStartTime = coursePackage.getClassStartTime(); + String classEndTime = coursePackage.getClassEndTime(); + classStartTime = classStartTime.substring(0, classStartTime.lastIndexOf(":")); + classEndTime = classEndTime.substring(0, classEndTime.lastIndexOf(":")); + coursePackage.setClassStartTime(classStartTime); + coursePackage.setClassEndTime(classEndTime); + coursePackageService.updateCoursePackage(coursePackage, coursePackagePaymentConfig); + return ResultUtil.success(); + } + + /** + * 修改数据状态 + * @param id + * @param state + * @return + */ + @ResponseBody + @PostMapping("/editCoursePackageState") + public ResultUtil editCoursePackageState(Integer id, Integer state){ + TCoursePackage coursePackage = new TCoursePackage(); + coursePackage.setId(id); + coursePackage.setState(state); + coursePackageService.editCoursePackageState(coursePackage); + return ResultUtil.success(); + } + + + /** + * 编辑课包折扣 + * @param json + * @return + */ + @ResponseBody + @PostMapping("/setCoursePackageDiscount") + public ResultUtil setCoursePackageDiscount(Integer id, String json){ + return coursePackageService.setCoursePackageDiscount(id, json); + } + + + /** + * 获取课包报名信息列表 + * @param id + * @param userName + * @param studentName + * @return + */ + @ResponseBody + @PostMapping("/queryRegistrationRecord") + public Object queryRegistrationRecord(Integer id, String userName, String studentName){ + Page<Map<String, Object>> mapPage = coursePackageService.queryRegistrationRecord(id, userName, studentName); + return super.packForBT(mapPage); + } + + + /** + * 获取课包排课数据 + * @param id + * @return + */ + @ResponseBody + @PostMapping("/queryClassRecord") + public Object queryClassRecord(Integer id){ + Page<Map<String, Object>> page = coursePackageService.queryCoursePackageSchedulingList(id); + return super.packForBT(page); + } + + + /** + * 根据排课id获取学员预约数据列表 + * @param id + * @param userName + * @param studentName + * @return + */ + @ResponseBody + @PostMapping("/queryCoursePackageStudentList") + public Object queryCoursePackageStudentList(Long id, String userName, String studentName){ + Page<Map<String, Object>> page = coursePackageService.queryCoursePackageStudentList(id, userName, studentName); + return super.packForBT(page); + } + + + /** + * 取消预约 + * @param id + * @return + */ + @ResponseBody + @PostMapping("/cancelReservation") + public ResultUtil cancelReservation(Long id){ + return coursePackageService.cancelReservation(id); + } + + + /** + * 修改缺席状态 + * @param id + * @return + */ + @ResponseBody + @PostMapping("/setAbsenceStatus") + public ResultUtil setAbsenceStatus(Long id){ + return coursePackageService.setAbsenceStatus(id); + } + + + /** + * 取消排课记录 + * @param id + * @return + */ + @ResponseBody + @PostMapping("/cancelClassSchedule") + public ResultUtil cancelClassSchedule(Long id){ + return coursePackageService.cancelClassSchedule(id); + } + + + /** + * 发布课后练习 + * @param id + * @param courseId + * @param integral + * @return + */ + @ResponseBody + @PostMapping("/afterClassExercises") + public ResultUtil afterClassExercises(Long id, Integer courseId, Integer integral){ + return coursePackageService.afterClassExercises(id, courseId, integral); + } + + + /** + * 添加消课凭证 + * @param id + * @param cancelClasses + * @param deductClassHour + * @return + */ + @ResponseBody + @PostMapping("/cancellationRecord") + public ResultUtil cancellationRecord(Long id, String cancelClasses, Integer deductClassHour){ + return coursePackageService.cancellationRecord(id, cancelClasses, deductClassHour); + } + + + /** + * 获取未预约排课学员列表 + * @param coursePackageSchedulingId + * @param userName + * @param studentName + * @return + */ + @ResponseBody + @PostMapping("/queryWalkInStudentList") + public Object queryWalkInStudentList(Long coursePackageSchedulingId, String userName, String studentName){ + Page<Map<String, Object>> page = coursePackageService.queryWalkInStudentList(coursePackageSchedulingId, userName, studentName); + return super.packForBT(page); + } + + + /** + * 手动预约课程 + * @param coursePackagePaymentId + * @param coursePackageSchedulingId + * @return + */ + @ResponseBody + @PostMapping("/courseReservation") + public ResultUtil courseReservation(Long coursePackagePaymentId, Long coursePackageSchedulingId){ + return coursePackageService.courseReservation(coursePackagePaymentId, coursePackageSchedulingId); + } + + + /** + * 退课操作 + * @param coursePackagePaymentId + * @param certificate + * @return + */ + @ResponseBody + @PostMapping("/dropTheClass") + public ResultUtil dropTheClass(Long coursePackagePaymentId, String certificate){ + return coursePackageService.dropTheClass(coursePackagePaymentId, certificate); + } + + + /** + * 补课操作 + * @param coursePackagePaymentId + * @return + */ + @ResponseBody + @PostMapping("/makeUpMissedLessons") + public ResultUtil makeUpMissedLessons(Long coursePackagePaymentId){ + return coursePackageService.makeUpMissedLessons(coursePackagePaymentId); + } + + + /** + * 获取课包审核列表 + * @param provinceCode + * @param cityCode + * @param coursePackageTypeId + * @param name + * @param auditStatus + * @return + */ + @ResponseBody + @PostMapping("/queryExamineCoursePackageLists") + public Object queryExamineCoursePackageLists(String provinceCode, String cityCode, Integer coursePackageTypeId, String name, Integer auditStatus){ + Page<Map<String, Object>> mapPage = coursePackageService.queryExamineCoursePackageLists(provinceCode, cityCode, coursePackageTypeId, name, auditStatus); + return super.packForBT(mapPage); + } + + + /** + * 审核课包 + * @param id + * @param auditStatus + * @param authRemark + * @return + */ + @ResponseBody + @PostMapping("/setCoursePackageAuditStatus") + public ResultUtil setCoursePackageAuditStatus(Integer id, Integer auditStatus, String authRemark){ + return coursePackageService.setCoursePackageAuditStatus(id, auditStatus, authRemark); + } } 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 new file mode 100644 index 0000000..58c86e5 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java @@ -0,0 +1,444 @@ +package com.dsh.guns.modular.system.controller.code; + + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.account.AppUserClient; +import com.dsh.course.feignClient.account.CityManagerClient; +import com.dsh.course.feignClient.account.model.CityManager; +import com.dsh.course.feignClient.account.model.QueryByNamePhone; +import com.dsh.course.feignClient.account.model.TAppUser; +import com.dsh.course.feignClient.account.model.TCityManager; +import com.dsh.course.feignClient.activity.CouponClient; +import com.dsh.course.feignClient.activity.PointMercharsClient; +import com.dsh.course.feignClient.activity.model.*; +import com.dsh.guns.config.UserExt; +import com.dsh.guns.core.base.tips.ErrorTip; +import com.dsh.guns.core.base.tips.SuccessTip; +import com.dsh.guns.core.common.constant.factory.PageFactory; +import com.dsh.guns.core.util.ToolUtil; +import com.dsh.guns.modular.system.model.CouponDataVo; +import com.dsh.guns.modular.system.model.Region; +import com.dsh.guns.modular.system.model.TCity; +import com.dsh.guns.modular.system.model.TStore; +import com.dsh.guns.modular.system.service.ICityService; +import com.dsh.guns.modular.system.service.IRegionService; +import com.dsh.guns.modular.system.service.IStoreService; +import com.dsh.guns.modular.system.util.OBSUploadUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +/** + * 优惠券管理 控制器 + */ + +@Controller +@RequestMapping("/tGoods") +public class TGoodsController { + + + + private String PREFIX = "/system/tGoods/"; + + + @Resource + private IRegionService regiService; + + @Resource + private IStoreService storeService; + + @Resource + private CouponClient client; + + @Resource + private CityManagerClient cmgrClient; + + @Autowired + private AppUserClient appUserClient; + @Autowired + private ICityService cityService; + + @Resource + private PointMercharsClient pointMercharsClient; + + + + /** + * 跳转到优惠券管理首页 + */ + @RequestMapping("") + public String index(Model model) { + + return PREFIX + "TGoods.html"; + } + + /** + * 跳转到添加 + */ + @RequestMapping("/tGoods_add") + public String memberCouponAdd(Model model) { + Integer objectType = UserExt.getUser().getObjectType(); + System.out.println(objectType); + model.addAttribute("userType",objectType); + List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0)); + model.addAttribute("list",list); + return PREFIX + "TGoods_add.html"; + } + + + @RequestMapping("/coupon_record/{id}") + public String memberCouponAdd(@PathVariable Integer id,Model model) { + Coupon coupon = client.queryCouponById(id); + + model.addAttribute("id",id); + model.addAttribute("type",coupon.getType()); + return PREFIX + "TCouponRecord.html"; + } + + + + @RequestMapping("/coupon_detail/{id}") + public String memberCouponDetail(@PathVariable Integer id,Model model) { + Coupon coupon = client.queryCouponById(id); + String content = coupon.getContent(); + JSONObject jsonObject = JSONObject.parseObject(content); + String one =""; + String two =""; + String three =""; + if(coupon.getType()==1){ + one = jsonObject.get("conditionalAmount").toString(); + two = jsonObject.get("deductionAmount").toString(); + } + if(coupon.getType()==2){ + one = jsonObject.get("conditionalAmount").toString(); + } + if(coupon.getType()==3){ + three = jsonObject.get("experienceName").toString(); + } + List<CouponCity> list = new ArrayList<>(); + List<Integer> list1=null; + List<TStore> list2=new ArrayList<>(); + if(coupon.getUseScope()==2){ + list = client.queryCity(coupon.getId()); + } + if(coupon.getUseScope()==3){ + list1 = client.queryStore(coupon.getId()); + list2 = storeService.list(new LambdaQueryWrapper<TStore>().in(TStore::getId, list1)); + for (TStore tStore : list2) { + CityManager cityManager = cmgrClient.queryCityManagerById(tStore.getCityManagerId()); + if (ToolUtil.isNotEmpty(cityManager)){ + tStore.setProvince(tStore.getProvince()+tStore.getCity()); + tStore.setPhone(cityManager.getName()+"-"+cityManager.getPhone()); + } + } + + } + model.addAttribute("city",list); + model.addAttribute("store",list2); + model.addAttribute("s",new SimpleDateFormat("yyyy-MM-dd").format(coupon.getStartTime())); + model.addAttribute("e",new SimpleDateFormat("yyyy-MM-dd").format(coupon.getEndTime())); + model.addAttribute("one",one); + model.addAttribute("two",two); + model.addAttribute("three",three); + ArrayList<String> strings = new ArrayList<>(); + String productImages = coupon.getProductImages(); + for (String s : productImages.split(",")) { + strings.add(s); + } + + model.addAttribute("img",strings); + Integer objectType = UserExt.getUser().getObjectType(); + System.out.println(objectType); + model.addAttribute("item",coupon); + return PREFIX + "TCouponInfo.html"; + } + + + + /** + * 跳转到门店管理列表页 + */ + @RequestMapping("/storeList") + public String storePage(Model model) { + return PREFIX + "TStoreList.html"; + } + @RequestMapping("/updateType") + @ResponseBody + public Object updateType(Long id) { + client.updateType(id); + return new SuccessTip<>(); + } + + @RequestMapping("/storeDetailsOfSearch") + @ResponseBody + public Object listOfStore(Integer provinceId,Integer cityId,Integer cityManagerId,String storeName){ + System.out.println("provinceId"+provinceId); + System.out.println("cityId"+cityId); + System.out.println("cityManagerId"+cityManagerId); + System.out.println("storeName"+storeName); + String provinceCode = null; + String cityCode = null; + if (ToolUtil.isNotEmpty(provinceId)){ + Region provinceRegion = regiService.getById(provinceId); + provinceCode = provinceRegion.getCode(); + } + if (ToolUtil.isNotEmpty(cityId)){ + Region cityRegion = regiService.getById(cityId); + cityCode = cityRegion.getCode(); + } + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(); + List<Map<String,Object>> storeList = storeService.queryListOfpage(provinceCode,cityCode,cityManagerId,storeName,page); + if (storeList.size() > 0 ){ + for (Map<String, Object> stringObjectMap : storeList) { + String provinceName = (String) stringObjectMap.get("province"); + String cityName = (String) stringObjectMap.get("city"); + stringObjectMap.put("provinceCity",provinceName+cityName); + Integer managerId = (Integer) stringObjectMap.get("cityManagerId"); + CityManager cityManager = cmgrClient.queryCityManagerById(managerId); + if (ToolUtil.isNotEmpty(cityManager)){ + stringObjectMap.put("accountName",cityManager.getName()+"+"+cityManager.getPhone()); + } + } + } + return storeList; + } + + @RequestMapping(value = "/listRecord") + @ResponseBody + public Object listRecord(Integer id,String name, Integer type, String phone) { + Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(); + List<TAppUser> tAppUsers = appUserClient.queryByNamePhone(new QueryByNamePhone(name, phone)); + if(tAppUsers.size()==0){ + return new ArrayList<>(); + } + CouponRecordQuery ofSearch = new CouponRecordQuery(); + ofSearch.setId(id); + ofSearch.setLimit(page.getSize()); + ofSearch.setOffset(page.getCurrent()); + ofSearch.setIds(tAppUsers.stream().map(TAppUser::getId).collect(Collectors.toList())); + ofSearch.setType(type); + List<Map<String, Object>> maps = client.listRecord(ofSearch); + for (Map<String, Object> map : maps) { + map.put("id",map.get("id").toString()); + for (TAppUser tAppUser : tAppUsers) { + if(map.get("userId").equals(tAppUser.getId())){ + map.put("name",tAppUser.getName()); + map.put("phone",tAppUser.getPhone()); + } + } + } + return maps; + } + + @RequestMapping(value = "/getProvince") + @ResponseBody + public Object getProvince(){ + return regiService.list(new LambdaQueryWrapper<Region>() + .eq(Region::getParentId,0)); + } + + @RequestMapping(value = "/onShelf") + @ResponseBody + public Object onShelf(Integer id,Integer type){ + Coupon coupon = client.queryCouponById(id); + coupon.setState(type); + client.updateCouponData(coupon); + return new SuccessTip<>(); + } + + + @RequestMapping(value = "/getCity") + @ResponseBody + public Object getCity(Integer province){ + return regiService.list(new LambdaQueryWrapper<Region>() + .eq(Region::getParentId,province)); + } + + @RequestMapping(value = "/uploadPic") + @ResponseBody + public Object add(@RequestParam("file") MultipartFile imgFile) throws IOException { + String originalFilename = imgFile.getOriginalFilename(); + String newName = originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf(".")); + String url = OBSUploadUtil.inputStreamUpload(imgFile); + Map<String, String> map = new HashMap<String, String>(); + //是否上传成功 + map.put("state", "SUCCESS"); + //现在文件名称 + map.put("title", newName); + //文件原名称 + map.put("original", originalFilename); + //文件类型 .+后缀名 + map.put("type", originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf("."))); + //文件路径 + map.put("url", url); + //文件大小(字节数) + map.put("size", imgFile.getSize() + ""); + System.out.println(map); + return url; + } + + /** + * 提交添加 + */ + @PostMapping(value = "/commitData") + @ResponseBody + public Object commitData( CouponDataVo dataVo){ + System.out.println(dataVo); + Integer objectType = UserExt.getUser().getObjectType(); + dataVo.setUserType(objectType); + client.insertIntoData(dataVo); + return new SuccessTip<>(); + } + @PostMapping(value = "/update") + @ResponseBody + public Object update( Integer id,Integer num,Integer num1,String text){ + Coupon coupon = client.queryCouponById(id); + coupon.setQuantityIssued(num); + coupon.setPickUpQuantity(num1); + coupon.setIllustrate(text); + client.updateCouponData(coupon); + return new SuccessTip<>(); + } + + + /** + * 获取 积分商品列表 + */ + @RequestMapping(value = "/list") + @ResponseBody + public Object listOfIntegralGoods(String name, Integer type, Integer redemptionMethod , Integer userPopulation, Integer activeStatus, Integer state) { + 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); + ofSearch.setState(state); + System.out.println(ofSearch); + return pointMercharsClient.getIntegralGoodsListOfSearch(ofSearch); + } + + + + /** + * 跳转到修改车辆管理 + */ + @RequestMapping("/tGoods_update/{id}") + public String tCityUpdate(@PathVariable Integer id, Model model) { + System.out.println("id:"+id); + PointMercharsVo pointMercharsVo = pointMercharsClient.queryPointMerchaseDetailOfId(id); + System.out.println("pointMercharsVo:"+pointMercharsVo); + String[] split = pointMercharsVo.getPics().split(","); + model.addAttribute("item",pointMercharsVo); + model.addAttribute("pictures",split); + return PREFIX + "TGoods_edit.html"; + } + + /** + * 上下架处理操作 + * @param id 商品id + * @param type 1=上架操作 2=下架操作 + * @return + */ + @RequestMapping("/grounding") + @ResponseBody + public Object updateGrounding(Integer id,Integer type) { + System.out.println(id); + System.out.println(type); + Map<String,Integer> map = new HashMap<>(); + map.put("id",id); + map.put("type",type); + boolean b = pointMercharsClient.updateGoodsGroudingStatus(map); + System.out.println(b); + return new SuccessTip<>(); + } + + + + /** + * 购买详情 + * @param id 商品id + * @return + */ + @RequestMapping("/tPay_detail/{id}") + public String payOfDetails(@PathVariable(value = "id") Integer id,Model model) { + System.out.println(id); + model.addAttribute("id",id); + return PREFIX + "TGoods_pay.html"; + } + + + /** + * 获取 购买记录列表 + */ + @ResponseBody + @RequestMapping(value = "/payList/{id}") + public Object payList(@PathVariable(value = "id") Integer id, String name, String phone, Integer status) { + PointMercharsPayedVo payedVo = new PointMercharsPayedVo(); + payedVo.setId(id); + payedVo.setName(name); + payedVo.setPhone(phone); + payedVo.setStatus(status); + List<Map<String,Object>> points = pointMercharsClient.queryUserPayedGoodsList(payedVo); + System.out.println(points); + if (points.size() > 0 ){ + for (Map<String, Object> point : points) { + Integer userId = (Integer) point.get("userId"); + TAppUser tAppUser = appUserClient.queryById(userId); + if (ToolUtil.isNotEmpty(tAppUser)){ + point.put("name",tAppUser.getName()); + point.put("phone",tAppUser.getPhone()); + } + } + if (ToolUtil.isNotEmpty(name)){ + points = points.stream() + .filter(data -> { + String obtName = (String) data.get("name"); + return obtName != null && obtName.contains(name); + }) + .collect(Collectors.toList()); + } + if (ToolUtil.isNotEmpty(phone)){ + points = points.stream() + .filter(data -> { + String obtPhone = (String) data.get("phone"); + return obtPhone != null && obtPhone.contains(phone); + }) + .collect(Collectors.toList()); + } + } + return points; + } + + /** + * 核销操作 + * @param id 商品id + * @return + */ + @RequestMapping("/write_off") + @ResponseBody + public Object GoodsWriteOff(Integer id){ + System.out.println(id); + // TODO: 2023/8/15 核销操作 + return new SuccessTip<>(); + } + + +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TIntegralController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TIntegralController.java index 6d22eac..1268219 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TIntegralController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TIntegralController.java @@ -60,9 +60,12 @@ public Object list(String name, String phone,Integer type,Integer category,String time) { Page<UserIntegral> page = new PageFactory<UserIntegral>().defaultPage(); IntegralListQuery integralListQuery = new IntegralListQuery(page.getSize(), page.getCurrent(), name, phone, type, category, time); - List<UserIntegral> list = client.list(integralListQuery); - page.setRecords(list); - return super.packForBT(page); + Page<UserIntegral> list = client.list(integralListQuery); + return super.packForBT(list); + } + @RequestMapping("/tIntegral_add") + public String tCompetitionAdd(Model model) { + return PREFIX + "TIntegral_add.html"; } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CouponDataVo.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CouponDataVo.java index f84643c..c3089f7 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CouponDataVo.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CouponDataVo.java @@ -39,7 +39,7 @@ /** * 体验券名称 */ - BigDecimal experience; + String experience; /** * 说明 */ @@ -83,7 +83,7 @@ /** * 图片列表 */ - List<String> goodImgs; + String goodImgs; /** * 适用范围 */ @@ -91,9 +91,9 @@ /** * 城市code */ - List<Integer> cityIds; + String cityIds; /** * 门店列表 */ - List<Integer> storeIds; + String storeIds; } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICoursePackageService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICoursePackageService.java index 52b537c..088082a 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICoursePackageService.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICoursePackageService.java @@ -1,6 +1,9 @@ package com.dsh.guns.modular.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.course.model.CoursePackageScheduling; +import com.dsh.course.feignClient.course.model.TCoursePackage; +import com.dsh.guns.modular.system.util.ResultUtil; import java.util.Map; @@ -22,4 +25,171 @@ * @return */ Page<Map<String, Object>> queryCoursePackageLists(String provinceCode, String cityCode, Integer coursePackageTypeId, Integer storeId, String name, Integer status, Integer state); + + + /** + * 添加数据 + * @param coursePackage + * @param coursePackagePaymentConfig + */ + void addCoursePackage(TCoursePackage coursePackage, String coursePackagePaymentConfig); + + + /** + * 获取数据 + * @param id + * @return + */ + TCoursePackage queryById(Integer id); + + + /** + * 修改数据 + * @param coursePackage + * @param coursePackagePaymentConfig + */ + void updateCoursePackage(TCoursePackage coursePackage, String coursePackagePaymentConfig); + + + /** + * 修改数据 + * @param coursePackage + */ + void editCoursePackageState(TCoursePackage coursePackage); + + + /** + * 编辑课包折扣 + * @param json + * @return + */ + ResultUtil setCoursePackageDiscount(Integer id, String json); + + + /** + * 获取课程报名信息 + * @param id + * @param userName + * @param studentName + * @return + */ + Page<Map<String, Object>> queryRegistrationRecord(Integer id, String userName, String studentName); + + + /** + * 获取课包上课信息列表 + * @param id + * @return + */ + Page<Map<String, Object>> queryCoursePackageSchedulingList(Integer id); + + + /** + * 获取排课对应学员数据 + * @param id + * @return + */ + Page<Map<String, Object>> queryCoursePackageStudentList(Long id, String userName, String studentName); + + + /** + * 取消学员预约数据 + * @param id + * @return + */ + ResultUtil cancelReservation(Long id); + + + /** + * 修改缺席状态 + * @param id + * @return + */ + ResultUtil setAbsenceStatus(Long id); + + + /** + * 取消本次排课数据 + * @param id + * @return + */ + ResultUtil cancelClassSchedule(Long id); + + + /** + * 添加课后练习 + * @param id + * @param courseId + * @param integral + * @return + */ + ResultUtil afterClassExercises(Long id, Integer courseId, Integer integral); + + + /** + * 上传消课凭证 + * @param id + * @param cancelClasses + * @param deductClassHour + * @return + */ + ResultUtil cancellationRecord(Long id, String cancelClasses, Integer deductClassHour); + + + /** + * 获取未预约排课学员列表 + * @param coursePackageSchedulingId + * @param userName + * @param studentName + * @return + */ + Page<Map<String, Object>> queryWalkInStudentList(Long coursePackageSchedulingId, String userName, String studentName); + + + /** + * 手动预约课程 + * @param coursePackagePaymentId + * @param coursePackageSchedulingId + * @return + */ + ResultUtil courseReservation(Long coursePackagePaymentId, Long coursePackageSchedulingId); + + + /** + * 退课操作 + * @param coursePackagePaymentId + * @param certificate + * @return + */ + ResultUtil dropTheClass(Long coursePackagePaymentId, String certificate); + + + /** + * 补课操作 + * @param coursePackagePaymentId + * @return + */ + ResultUtil makeUpMissedLessons(Long coursePackagePaymentId); + + + /** + * 获取课包审核列表 + * @param provinceCode + * @param cityCode + * @param coursePackageTypeId + * @param name + * @param auditStatus + * @return + */ + Page<Map<String, Object>> queryExamineCoursePackageLists(String provinceCode, String cityCode, Integer coursePackageTypeId, String name, Integer auditStatus); + + + /** + * 审核课包 + * @param id + * @param auditStatus + * @param authRemark + * @return + */ + ResultUtil setCoursePackageAuditStatus(Integer id, Integer auditStatus, String authRemark); } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICourseService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICourseService.java index 79b8b07..6bc1e5a 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICourseService.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ICourseService.java @@ -57,4 +57,12 @@ * @param state */ void editCourseState(Integer id, Integer state); + + + /** + * 根据类型获取数据 + * @param type + * @return + */ + List<TCourse> queryCourseByType(Integer type); } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java index fc79a76..994cab8 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java @@ -1,17 +1,26 @@ package com.dsh.guns.modular.system.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.dsh.course.feignClient.course.CoursePackageClient; -import com.dsh.course.feignClient.course.model.QueryCoursePackageLists; +import com.dsh.course.feignClient.course.*; +import com.dsh.course.feignClient.course.model.*; +import com.dsh.guns.config.UserExt; import com.dsh.guns.core.support.HttpKit; +import com.dsh.guns.core.util.ToolUtil; import com.dsh.guns.modular.system.model.TStore; import com.dsh.guns.modular.system.service.ICoursePackageService; import com.dsh.guns.modular.system.service.IStoreService; +import com.dsh.guns.modular.system.util.ResultUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; @@ -27,6 +36,24 @@ @Autowired private IStoreService storeService; + + @Resource + private CoursePackagePaymentConfigClient coursePackagePaymentConfigClient; + + @Resource + private CoursePackageDiscountClient coursePackageDiscountClient; + + @Resource + private CoursePackagePaymentClient coursePackagePaymentClient; + + @Resource + private CoursePackageSchedulingClient coursePackageSchedulingClient; + + @Resource + private CoursePackageStudentClient coursePackageStudentClient; + + @Resource + private CancelledClassesClient cancelledClassesClient; @@ -65,4 +92,551 @@ } return mapPage; } + + + /** + * 添加课包数据 + * @param coursePackage + * @param coursePackagePaymentConfig + */ + @Override + public void addCoursePackage(TCoursePackage coursePackage, String coursePackagePaymentConfig) { + Integer integer = coursePackageClient.addCoursePackage(coursePackage); + JSONArray jsonArray = JSON.parseArray(coursePackagePaymentConfig); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + Integer classHours = jsonObject.getInteger("classHours"); + Double cashPayment = jsonObject.getDouble("cashPayment"); + Integer playPaiCoin = jsonObject.getInteger("playPaiCoin"); + CoursePackagePaymentConfig coursePackagePaymentConfig1 = new CoursePackagePaymentConfig(); + coursePackagePaymentConfig1.setCoursePackageId(integer); + coursePackagePaymentConfig1.setClassHours(classHours); + coursePackagePaymentConfig1.setCashPayment(cashPayment); + coursePackagePaymentConfig1.setPlayPaiCoin(playPaiCoin); + coursePackagePaymentConfigClient.addCoursePackagePaymentConfig(coursePackagePaymentConfig1); + } + } + + + /** + * 根据id获取数据 + * @param id + * @return + */ + @Override + public TCoursePackage queryById(Integer id) { + return coursePackageClient.queryById(id); + } + + + /** + * 编辑数据 + * @param coursePackage + * @param coursePackagePaymentConfig + */ + @Override + public void updateCoursePackage(TCoursePackage coursePackage, String coursePackagePaymentConfig) { + coursePackageClient.updateCoursePackage(coursePackage); + coursePackagePaymentConfigClient.delCoursePackagePaymentConfig(coursePackage.getId()); + JSONArray jsonArray = JSON.parseArray(coursePackagePaymentConfig); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + Integer classHours = jsonObject.getInteger("classHours"); + Double cashPayment = jsonObject.getDouble("cashPayment"); + Integer playPaiCoin = jsonObject.getInteger("playPaiCoin"); + CoursePackagePaymentConfig coursePackagePaymentConfig1 = new CoursePackagePaymentConfig(); + coursePackagePaymentConfig1.setCoursePackageId(coursePackage.getId()); + coursePackagePaymentConfig1.setClassHours(classHours); + coursePackagePaymentConfig1.setCashPayment(cashPayment); + coursePackagePaymentConfig1.setPlayPaiCoin(playPaiCoin); + coursePackagePaymentConfigClient.addCoursePackagePaymentConfig(coursePackagePaymentConfig1); + } + } + + + /** + * 修改数据 + * @param coursePackage + */ + @Override + public void editCoursePackageState(TCoursePackage coursePackage) { + coursePackageClient.updateCoursePackage(coursePackage); + } + + + /** + * 编辑课包折扣 + * @param json + * @return + */ + @Override + public ResultUtil setCoursePackageDiscount(Integer id, String json) { + List<TCoursePackageDiscount> list = new ArrayList<>(); + JSONArray jsonArray = JSON.parseArray(json); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + Integer coursePackagePaymentConfigId = jsonObject.getInteger("coursePackagePaymentConfigId"); + JSONArray coursePackageDiscount = jsonObject.getJSONArray("coursePackageDiscount"); + if(coursePackageDiscount.size() == 0){ + continue; + } + for (int j = 0; j < coursePackageDiscount.size(); j++) { + JSONObject cpd = coursePackageDiscount.getJSONObject(j); + Integer type = cpd.getInteger("type"); + switch (type){ + case 1: + JSONObject content1 = cpd.getJSONObject("content"); + if(null == content1){ + return ResultUtil.error("请填写有效的会员折扣"); + } + Double discountMember = content1.getDouble("discountMember"); + if(null == discountMember){ + return ResultUtil.error("请填写有效的会员折扣价格"); + } + break; + case 2: + JSONObject content2 = cpd.getJSONObject("content"); + if(null == content2){ + return ResultUtil.error("请填写有效的续课优惠"); + } + Double continuingMember = content2.getDouble("continuingMember"); + if(null == continuingMember){ + return ResultUtil.error("请填写有效的会员续课价格"); + } + Double continuingUser = content2.getDouble("continuingUser"); + if(null == continuingUser){ + return ResultUtil.error("请填写有效的用户续课价格"); + } + break; + case 3: + JSONArray content3 = cpd.getJSONArray("content"); + if(content3.size() == 0){ + return ResultUtil.error("请配置有效的限时折扣"); + } + for (int k = 0; k < content3.size(); k++) { + JSONObject jsonObject1 = content3.getJSONObject(k); + String startDate = jsonObject1.getString("startDate"); + String endDate = jsonObject1.getString("endDate"); + String startTime = jsonObject1.getString("startTime"); + String endTime = jsonObject1.getString("endTime"); + JSONArray weeks = jsonObject1.getJSONArray("weeks"); + Double cashPayment = jsonObject1.getDouble("cashPayment"); + if(ToolUtil.isEmpty(startDate)){ + return ResultUtil.error("请填写有效的折扣有效期"); + } + if(ToolUtil.isEmpty(endDate)){ + return ResultUtil.error("请填写有效的折扣有效期"); + } + if(ToolUtil.isEmpty(startTime)){ + return ResultUtil.error("请填写有效的折扣时间"); + } + if(ToolUtil.isEmpty(endTime)){ + return ResultUtil.error("请填写有效的折扣时间"); + } + if(null == weeks || weeks.size() == 0){ + return ResultUtil.error("请选择有效的折扣时间星期天"); + } + if(null == cashPayment){ + return ResultUtil.error("请填写有效的折扣金额"); + } + } + break; + case 4: + JSONArray content4 = cpd.getJSONArray("content"); + if(content4.size() == 0){ + return ResultUtil.error("请配置有效的赠送课时"); + } + for (int k = 0; k < content4.size(); k++) { + JSONObject jsonObject1 = content4.getJSONObject(k); + String startDate = jsonObject1.getString("startDate"); + String endDate = jsonObject1.getString("endDate"); + String startTime = jsonObject1.getString("startTime"); + String endTime = jsonObject1.getString("endTime"); + JSONArray weeks = jsonObject1.getJSONArray("weeks"); + Double hour = jsonObject1.getDouble("hour"); + if(ToolUtil.isEmpty(startDate)){ + return ResultUtil.error("请填写有效的赠送有效期"); + } + if(ToolUtil.isEmpty(endDate)){ + return ResultUtil.error("请填写有效的赠送有效期"); + } + if(ToolUtil.isEmpty(startTime)){ + return ResultUtil.error("请填写有效的赠送时间"); + } + if(ToolUtil.isEmpty(endTime)){ + return ResultUtil.error("请填写有效的赠送时间"); + } + if(null == weeks || weeks.size() == 0){ + return ResultUtil.error("请选择有效的赠送时间星期天"); + } + if(null == hour){ + return ResultUtil.error("请填写有效的赠送课时数"); + } + } + break; + } + + TCoursePackageDiscount coursePackageDiscount1 = new TCoursePackageDiscount(); + coursePackageDiscount1.setCoursePackageId(id); + coursePackageDiscount1.setCoursePackagePaymentConfigId(coursePackagePaymentConfigId); + coursePackageDiscount1.setType(type); + coursePackageDiscount1.setContent(cpd.getString("content")); + coursePackageDiscount1.setAuditStatus(2); + coursePackageDiscount1.setInsertTime(new Date()); + list.add(coursePackageDiscount1); + } + } + coursePackageDiscountClient.setCoursePackageDiscount(list); + return ResultUtil.success(); + } + + + /** + * 获取课程报名信息 + * @param id + * @param userName + * @param studentName + * @return + */ + @Override + public Page<Map<String, Object>> queryRegistrationRecord(Integer id, String userName, String studentName) { + QueryRegistrationRecord queryRegistrationRecord = new QueryRegistrationRecord(); + queryRegistrationRecord.setCoursePackageId(id); + queryRegistrationRecord.setUserName(userName); + queryRegistrationRecord.setStudentName(studentName); + HttpServletRequest request = HttpKit.getRequest(); + queryRegistrationRecord.setLimit(Integer.valueOf(request.getParameter("limit"))); + queryRegistrationRecord.setOffset(Integer.valueOf(request.getParameter("offset"))); + queryRegistrationRecord.setSort(request.getParameter("sort")); + queryRegistrationRecord.setOrder(request.getParameter("order")); + Page<Map<String, Object>> mapPage = coursePackagePaymentClient.queryRegistrationRecord(queryRegistrationRecord); + return mapPage; + } + + + /** + * 获取课包上课信息 + * @param id + * @return + */ + @Override + public Page<Map<String, Object>> queryCoursePackageSchedulingList(Integer id) { + QueryCoursePackageSchedulingList queryClassRecord = new QueryCoursePackageSchedulingList(); + queryClassRecord.setCoursePackageId(id); + HttpServletRequest request = HttpKit.getRequest(); + queryClassRecord.setLimit(Integer.valueOf(request.getParameter("limit"))); + queryClassRecord.setOffset(Integer.valueOf(request.getParameter("offset"))); + queryClassRecord.setSort(request.getParameter("sort")); + queryClassRecord.setOrder(request.getParameter("order")); + Page<Map<String, Object>> mapPage = coursePackageSchedulingClient.queryCoursePackageSchedulingList(queryClassRecord); + return mapPage; + } + + + /** + * 获取排课对应学员数据 + * @param id + * @return + */ + @Override + public Page<Map<String, Object>> queryCoursePackageStudentList(Long id, String userName, String studentName) { + QueryCoursePackageStudentList queryCoursePackageStudentList = new QueryCoursePackageStudentList(); + queryCoursePackageStudentList.setCoursePackageSchedulingId(id); + queryCoursePackageStudentList.setUserName(userName); + queryCoursePackageStudentList.setStudentName(studentName); + HttpServletRequest request = HttpKit.getRequest(); + queryCoursePackageStudentList.setLimit(Integer.valueOf(request.getParameter("limit"))); + queryCoursePackageStudentList.setOffset(Integer.valueOf(request.getParameter("offset"))); + queryCoursePackageStudentList.setSort(request.getParameter("sort")); + queryCoursePackageStudentList.setOrder(request.getParameter("order")); + return coursePackageStudentClient.queryCoursePackageStudentList(queryCoursePackageStudentList); + } + + + /** + * 取消预约 + * @param id + * @return + */ + @Override + public ResultUtil cancelReservation(Long id) { + CoursePackageStudent coursePackageStudent = coursePackageStudentClient.queryCoursePackageStudentById(id); + if(coursePackageStudent.getSignInOrNot() == 1){ + return ResultUtil.error("无法取消预约"); + } + coursePackageStudent = new CoursePackageStudent(); + coursePackageStudent.setId(id); + coursePackageStudent.setReservationStatus(0); + coursePackageStudentClient.editCoursePackageStudent(coursePackageStudent); + return ResultUtil.success(); + } + + + /** + * 修改缺席状态 + * @param id + * @return + */ + @Override + public ResultUtil setAbsenceStatus(Long id) { + CoursePackageStudent coursePackageStudent = coursePackageStudentClient.queryCoursePackageStudentById(id); + if(coursePackageStudent.getReservationStatus() == 0){ + return ResultUtil.error("该数据已取消预约"); + } + coursePackageStudent = new CoursePackageStudent(); + coursePackageStudent.setId(id); + coursePackageStudent.setSignInOrNot(0); + coursePackageStudentClient.editCoursePackageStudent(coursePackageStudent); + return ResultUtil.success(); + } + + + /** + * 取消本次排课 + * @param id + * @return + */ + @Override + public ResultUtil cancelClassSchedule(Long id) { + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingClient.queryCoursePackageSchedulingById(id); + if(coursePackageScheduling.getStatus() != 1){ + return ResultUtil.error("不能取消本次"); + } + List<CoursePackageStudent> coursePackageStudents = coursePackageStudentClient.queryByCoursePackageSchedulingId(id); + if(coursePackageStudents.size() > 0){ + return ResultUtil.error("不能取消本次"); + } + coursePackageScheduling = new CoursePackageScheduling(); + coursePackageScheduling.setId(id); + coursePackageScheduling.setStatus(4); + coursePackageSchedulingClient.editCoursePackageScheduling(coursePackageScheduling); + return ResultUtil.success(); + } + + + /** + * 添加课后练习 + * @param id + * @param courseId + * @param integral + * @return + */ + @Override + public ResultUtil afterClassExercises(Long id, Integer courseId, Integer integral) { + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingClient.queryCoursePackageSchedulingById(id); + if(coursePackageScheduling.getStatus() != 3){ + return ResultUtil.error("不能发布课后练习"); + } + coursePackageScheduling.setCourseId(courseId); + coursePackageScheduling.setIntegral(integral); + coursePackageSchedulingClient.editCoursePackageScheduling(coursePackageScheduling); + return ResultUtil.success(); + } + + + /** + * 上传消课凭证 + * @param id + * @param cancelClasses + * @param deductClassHour + * @return + */ + @Override + public ResultUtil cancellationRecord(Long id, String cancelClasses, Integer deductClassHour) { + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingClient.queryCoursePackageSchedulingById(id); + if(coursePackageScheduling.getStatus() == 1 || coursePackageScheduling.getStatus() == 4){ + return ResultUtil.error("不能添加消课凭证"); + } + coursePackageScheduling.setCancelClasses(cancelClasses); + coursePackageScheduling.setDeductClassHour(deductClassHour); + coursePackageSchedulingClient.editCoursePackageScheduling(coursePackageScheduling); + + List<CoursePackageStudent> coursePackageStudents = coursePackageStudentClient.queryByCoursePackageSchedulingId(id); + for (CoursePackageStudent coursePackageStudent : coursePackageStudents) { + if(coursePackageStudent.getReservationStatus() == 0){ + continue; + } + TCoursePackagePayment tCoursePackagePayment = coursePackagePaymentClient.queryCoursePackagePaymentById(coursePackageStudent.getCoursePackagePaymentId()); + tCoursePackagePayment.setLaveClassHours(tCoursePackagePayment.getLaveClassHours() - deductClassHour); + if(coursePackageStudent.getSignInOrNot() == 0){ + tCoursePackagePayment.setAbsencesNumber(tCoursePackagePayment.getAbsencesNumber() + 1); + } + coursePackagePaymentClient.editCoursePackagePayment(tCoursePackagePayment); + + CancelledClasses cancelledClasses = new CancelledClasses(); + cancelledClasses.setType(1); + cancelledClasses.setCoursePackageId(coursePackageStudent.getCoursePackageId()); + cancelledClasses.setCoursePackagePaymentId(coursePackageStudent.getCoursePackagePaymentId()); + cancelledClasses.setCoursePackageSchedulingId(coursePackageStudent.getCoursePackageSchedulingId()); + cancelledClasses.setVoucher(cancelClasses); + cancelledClasses.setCancelledClassesNumber(deductClassHour); + cancelledClasses.setInsertTime(new Date()); + cancelledClassesClient.addCancelledClasses(cancelledClasses); + } + return ResultUtil.success(); + } + + + /** + * 获取未预约排课学员列表 + * @param coursePackageSchedulingId + * @param userName + * @param studentName + * @return + */ + @Override + public Page<Map<String, Object>> queryWalkInStudentList(Long coursePackageSchedulingId, String userName, String studentName) { + QueryWalkInStudentList queryWalkInStudentList = new QueryWalkInStudentList(); + queryWalkInStudentList.setCoursePackageSchedulingId(coursePackageSchedulingId); + queryWalkInStudentList.setUserName(userName); + queryWalkInStudentList.setStudentName(studentName); + HttpServletRequest request = HttpKit.getRequest(); + queryWalkInStudentList.setLimit(Integer.valueOf(request.getParameter("limit"))); + queryWalkInStudentList.setOffset(Integer.valueOf(request.getParameter("offset"))); + queryWalkInStudentList.setSort(request.getParameter("sort")); + queryWalkInStudentList.setOrder(request.getParameter("order")); + return coursePackagePaymentClient.queryWalkInStudentList(queryWalkInStudentList); + } + + + /** + * 手动预约课程 + * @param coursePackagePaymentId + * @param coursePackageSchedulingId + * @return + */ + @Override + public ResultUtil courseReservation(Long coursePackagePaymentId, Long coursePackageSchedulingId) { + QueryCoursePackageStudent queryCoursePackageStudent = new QueryCoursePackageStudent(); + queryCoursePackageStudent.setCoursePackagePaymentId(coursePackagePaymentId); + queryCoursePackageStudent.setCoursePackageSchedulingId(coursePackageSchedulingId); + queryCoursePackageStudent.setReservationStatus(1); + List<CoursePackageStudent> coursePackageStudents = coursePackageStudentClient.queryCoursePackageStudent(queryCoursePackageStudent); + if(coursePackageStudents.size() > 0){ + return ResultUtil.error("不能重复预约"); + } + + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingClient.queryCoursePackageSchedulingById(coursePackageSchedulingId); + TCoursePackage tCoursePackage = coursePackageClient.queryById(coursePackageScheduling.getCoursePackageId()); + queryCoursePackageStudent = new QueryCoursePackageStudent(); + queryCoursePackageStudent.setCoursePackageId(coursePackageScheduling.getCoursePackageId()); + queryCoursePackageStudent.setReservationStatus(1); + List<CoursePackageStudent> coursePackageStudents1 = coursePackageStudentClient.queryCoursePackageStudent(queryCoursePackageStudent); + if(coursePackageStudents1.size() >= tCoursePackage.getMaxSubscribeNumber()){ + return ResultUtil.error("已达到最多预约人数"); + } + + TCoursePackagePayment coursePackagePayment = coursePackagePaymentClient.queryCoursePackagePaymentById(coursePackagePaymentId); + CoursePackageStudent coursePackageStudent = new CoursePackageStudent(); + coursePackageStudent.setAppUserId(coursePackagePayment.getAppUserId()); + coursePackageStudent.setStudentId(coursePackagePayment.getStudentId()); + coursePackageStudent.setCoursePackageId(coursePackagePayment.getCoursePackageId()); + coursePackageStudent.setCoursePackagePaymentId(coursePackagePaymentId); + coursePackageStudent.setCoursePackageSchedulingId(coursePackageSchedulingId); + coursePackageStudent.setSignInOrNot(1); + coursePackageStudent.setReservationStatus(1); + coursePackageStudent.setInsertTime(new Date()); + coursePackageStudentClient.addCoursePackageStudent(coursePackageStudent); + return ResultUtil.success(); + } + + + /** + * 退课操作 + * @param coursePackagePaymentId + * @param certificate + * @return + */ + @Override + public ResultUtil dropTheClass(Long coursePackagePaymentId, String certificate) { + TCoursePackagePayment coursePackagePayment = coursePackagePaymentClient.queryCoursePackagePaymentById(coursePackagePaymentId); + if(coursePackagePayment.getStatus() == 2){ + return ResultUtil.error("不能重复操作"); + } + coursePackagePayment.setStatus(2); + coursePackagePayment.setCertificate(certificate); + coursePackagePayment.setWithdrawalTime(new Date()); + //修改课时,费用线下自己处理不走线上 + Integer laveClassHours = coursePackagePayment.getLaveClassHours(); + if(laveClassHours == 0){ + return ResultUtil.error("无可退数量"); + } + coursePackagePayment.setDropoutsNumber(laveClassHours); + coursePackagePayment.setLaveClassHours(0); + coursePackagePaymentClient.editCoursePackagePayment(coursePackagePayment); + return ResultUtil.success(); + } + + + /** + * 补课操作 + * @param coursePackagePaymentId + * @return + */ + @Override + public ResultUtil makeUpMissedLessons(Long coursePackagePaymentId) { + TCoursePackagePayment coursePackagePayment = coursePackagePaymentClient.queryCoursePackagePaymentById(coursePackagePaymentId); + if(coursePackagePayment.getStatus() == 2){ + return ResultUtil.error("该学员已退课"); + } + if(coursePackagePayment.getAbsencesNumber() == 0){ + return ResultUtil.error("当前不需要补课"); + } + coursePackagePayment.setAbsencesNumber(coursePackagePayment.getAbsencesNumber() - 1); + coursePackagePaymentClient.editCoursePackagePayment(coursePackagePayment); + return ResultUtil.success(); + } + + + /** + * 获取课包审核列表 + * @param provinceCode + * @param cityCode + * @param coursePackageTypeId + * @param name + * @param auditStatus + * @return + */ + @Override + public Page<Map<String, Object>> queryExamineCoursePackageLists(String provinceCode, String cityCode, Integer coursePackageTypeId, String name, Integer auditStatus) { + QueryExamineCoursePackageLists queryExamineCoursePackageLists = new QueryExamineCoursePackageLists(); + queryExamineCoursePackageLists.setProvinceCode(provinceCode); + queryExamineCoursePackageLists.setCityCode(cityCode); + queryExamineCoursePackageLists.setCoursePackageTypeId(coursePackageTypeId); + queryExamineCoursePackageLists.setName(name); + queryExamineCoursePackageLists.setAuditStatus(auditStatus); + HttpServletRequest request = HttpKit.getRequest(); + queryExamineCoursePackageLists.setLimit(Integer.valueOf(request.getParameter("limit"))); + queryExamineCoursePackageLists.setOffset(Integer.valueOf(request.getParameter("offset"))); + queryExamineCoursePackageLists.setSort(request.getParameter("sort")); + queryExamineCoursePackageLists.setOrder(request.getParameter("order")); + Page<Map<String, Object>> mapPage = coursePackageClient.queryExamineCoursePackageLists(queryExamineCoursePackageLists); + List<Map<String, Object>> records = mapPage.getRecords(); + for (Map<String, Object> record : records) { + TStore store = storeService.getById(Integer.valueOf(record.get("storeId").toString())); + record.put("store", store.getName()); + } + return mapPage; + } + + + /** + * 审核课包 + * @param id + * @param auditStatus + * @param authRemark + * @return + */ + @Override + public ResultUtil setCoursePackageAuditStatus(Integer id, Integer auditStatus, String authRemark) { + TCoursePackage tCoursePackage = coursePackageClient.queryById(id); + if(tCoursePackage.getAuditStatus() != 1){ + return ResultUtil.error("不能重复审核"); + } + tCoursePackage.setAuditStatus(auditStatus); + tCoursePackage.setAuditUserId(UserExt.getUser().getId()); + tCoursePackage.setAuthRemark(authRemark); + coursePackageClient.updateCoursePackage(tCoursePackage); + return ResultUtil.success(); + } } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java index 88de32d..0de4017 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java @@ -99,4 +99,15 @@ editCourseState.setState(state); courseClient.editCourseState(editCourseState); } + + + /** + * 根据类型获取数据 + * @param type + * @return + */ + @Override + public List<TCourse> queryCourseByType(Integer type) { + return courseClient.queryCourseByType(type); + } } diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/blackboardBlank.html b/cloud-server-management/src/main/webapp/WEB-INF/view/blackboardBlank.html index e99fcc5..4f758da 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/blackboardBlank.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/blackboardBlank.html @@ -53,7 +53,5 @@ }) }); </script> - -<script type="text/javascript" src="http://tajs.qq.com/stats?sId=9051096" charset="UTF-8"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html index b017d62..5f50669 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html @@ -1,5 +1,5 @@ @layout("/common/_container.html"){ -<link rel="stylesheet" href="${ctxPath}/static/js/layui/css/layui.css" media="all"> +<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css" media="all"> <div class="row"> <div class="col-sm-12"> <div class="ibox float-e-margins"> @@ -62,7 +62,7 @@ </div> </div> <script src="${ctxPath}/modular/system/course/course.js"></script> -<script src="${ctxPath}/js/layui/layui.js" charset="utf-8"></script> +<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script> <script> laydate.render({ elem: '#beginTime' diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html new file mode 100644 index 0000000..36e6cfb --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html @@ -0,0 +1,58 @@ +@layout("/common/_container.html"){ +<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css" media="all"> +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <div class="row"> + <h3>课包信息</h3> + <input type="hidden" id="id" value="${item.id}"> + <div class="form-group" style="height: 10px;"> + <label class="col-sm-1 control-label" style="text-align: right;">所属门店:</label> + <span class="col-sm-2" style="text-align: left;">${store.name}</span> + </div> + <div class="form-group" style="height: 10px;"> + <label class="col-sm-1 control-label" style="text-align: right;">课包名称:</label> + <span class="col-sm-1" style="text-align: left;" id="name">${item.name}</span> + </div> + <div class="form-group" style="height: 10px;"> + <label class="col-sm-1 control-label" style="text-align: right;">授课教师:</label> + <span class="col-sm-2" style="text-align: left;">${coach.name}</span> + </div> + <div class="form-group" style="height: 10px;"> + <label class="col-sm-1 control-label" style="text-align: right;">上课时间:</label> + <span class="col-sm-2" style="text-align: left;">${item.classWeeks}</span> + </div> + <div class="form-group" style="height: 10px;"> + <label class="col-sm-1 control-label" style="text-align: right;"></label> + <span class="col-sm-2" style="text-align: left;">${item.classStartTime + ' - ' + item.classEndTime}</span> + </div> + </div> + <div class="hidden-xs" id="managerTableToolbar" role="group"> + <#button name="查看学员" icon="fa-plus" clickFun="ClassRecord.classRecord()"/> + <#button name="取消本次" icon="fa-edit" clickFun="ClassRecord.cancelClassSchedule()" space="true"/> + <#button name="发布课后练习" icon="fa-refresh" clickFun="ClassRecord.afterClassExercises()" space="true"/> + <#button name="上传消课记录" icon="fa-refresh" clickFun="ClassRecord.cancellationRecord()" space="true"/> + <#button name="查看消课记录" icon="fa-refresh" clickFun="ClassRecord.lookCancellationRecord()" space="true"/> + <#button name="手动预约" icon="fa-refresh" clickFun="ClassRecord.manualReservation()" space="true"/> + </div> + <#table id="managerTable"/> + </div> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/classRecord.js"></script> +<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script> +<script> + laydate.render({ + elem: '#beginTime' + }); + laydate.render({ + elem: '#endTime' + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html index ed531c2..7d082e6 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html @@ -1,5 +1,5 @@ @layout("/common/_container.html"){ -<link rel="stylesheet" href="${ctxPath}/static/js/layui/css/layui.css" media="all"> +<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css" media="all"> <div class="row"> <div class="col-sm-12"> <div class="ibox float-e-margins"> @@ -76,13 +76,13 @@ <#button name="下架" icon="fa-warning" clickFun="CoursePackage.editCoursePackageState(2)" space="true"/> @} @if(shiro.hasPermission("/coursePackage/coursePackageDiscount")){ - <#button name="折扣管理" icon="fa-check-circle" clickFun="CoursePackage.detailsCoursePackage()" space="true"/> + <#button name="折扣管理" icon="fa-check-circle" clickFun="CoursePackage.coursePackageDiscount()" space="true"/> @} @if(shiro.hasPermission("/coursePackage/detailsCoursePackage")){ <#button name="详情" icon="fa-check-circle" clickFun="CoursePackage.detailsCoursePackage()" space="true"/> @} @if(shiro.hasPermission("/coursePackage/registrationRecord")){ - <#button name="报名信息" icon="fa-check-circle" clickFun="CoursePackage.detailsCoursePackage()" space="true"/> + <#button name="报名信息" icon="fa-check-circle" clickFun="CoursePackage.registrationRecord()" space="true"/> @} </div> <#table id="managerTable"/> @@ -93,7 +93,7 @@ </div> </div> <script src="${ctxPath}/modular/system/coursePackage/coursePackage.js"></script> -<script src="${ctxPath}/js/layui/layui.js" charset="utf-8"></script> +<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script> <script> laydate.render({ elem: '#beginTime' diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageDiscount.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageDiscount.html new file mode 100644 index 0000000..e108ca7 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageDiscount.html @@ -0,0 +1,86 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal"> + <div class="row"> + <input type="hidden" id="id" value="${item.id}"> + <input type="hidden" id="coursePackagePaymentConfig" value='${coursePackagePaymentConfig}'> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">课包名称:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span>${item.name}</span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <div class="col-sm-2"> + </div> + <div class="col-sm-6" id="classHours" style="margin-top: 6px;"> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">支付方式:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span id="payment"></span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">现金支付:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span id="cashPayment"></span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">*折扣类型:</label> + <div class="col-sm-6" id="types" style="margin-top: 6px;"> + <input type="checkbox" name="type" value="1"> 会员折扣 + <input type="checkbox" name="type" value="2"> 续课优惠 + <input type="checkbox" name="type" value="3"> 限时折扣 + <input type="checkbox" name="type" value="4"> 赠送课时 + </div> + </div> + </div> + <div id="memberDiscount"> + + </div> + <div id="renewalOffer"> + + </div> + <div id="limitedTimeDiscount"> + + </div> + <div id="complimentaryClass"> + + </div> + </div> + <div class="row btn-group-m-t"> + <div class="col-sm-10"> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="CoursePackageDiscount.editSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="CoursePackageDiscount.close()"/> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/coursePackageDiscount.js"></script> +<script type="text/javascript"> + laydate.render({ + elem: '#classStartTime' + ,type: 'time' + ,range: true + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html new file mode 100644 index 0000000..5dbed35 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html @@ -0,0 +1,43 @@ +@layout("/common/_container.html"){ +<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css" media="all"> +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <input type="hidden" id="id" value="${id}"> + <div class="row"> + <div class="col-lg-10 col-sm-9"> + <div class="row"> + <div class="col-lg-4 col-sm-12"> + <#NameCon id="userName" name="所属用户"/> + </div> + <div class="col-lg-4 col-sm-12"> + <#NameCon id="studentName" name="姓名"/> + </div> + </div> + </div> + <div class="col-lg-2 col-sm-3"> + <div class="row"> + <div class="col-lg-12 col-sm-12"> + <#button name="搜索" icon="fa-search" clickFun="CoursePackageStudent.search()"/> + <#button name="重置" icon="fa-trash" clickFun="CoursePackageStudent.resetSearch()" space="true"/> + </div> + </div> + </div> + </div> + <div class="hidden-xs" id="managerTableToolbar" role="group"> + <#button name="取消预约" icon="fa-plus" clickFun="CoursePackageStudent.cancelReservation()"/> + <#button name="未到" icon="fa-edit" clickFun="CoursePackageStudent.absence()" space="true"/> + </div> + <#table id="managerTable"/> + </div> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/coursePackageStudent.js"></script> +<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script> +@} 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 12ab2ab..c0f1ae6 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 @@ -63,6 +63,7 @@ <label class="col-sm-3 control-label">*授课教师:</label> <div class="col-sm-4"> <select class="form-control" id="coachId" name="coachId"> + <option value="">请选择</option> @for(obj in coach){ <option value="${obj.id}">${obj.name}</option> @} @@ -72,17 +73,34 @@ <div class="form-group"> <label class="col-sm-3 control-label">*最多预约人数:</label> <div class="col-sm-4"> - <input class="form-control" id="maxSubscribeNumber" name="maxSubscribeNumber" type="number" min="0"> + <input class="form-control" id="maxSubscribeNumber" name="maxSubscribeNumber" type="number" min="0" placeholder="请输入最多预约人数"> </div> </div> <div class="form-group"> - <label class="col-sm-3 control-label">课程简介:</label> + <label class="col-sm-3 control-label">*上课时间:</label> <div class="col-sm-4"> - <textarea class="form-control" id="introduce" name="introduce" style="height: 200px;"></textarea> + <input class="form-control" id="classStartTime" name="classStartTime" placeholder="请选择"> </div> </div> <div class="form-group"> - <label class="col-sm-3 control-label head-scu-label">*课程封面</label> + <label class="col-sm-3 control-label"></label> + <div class="col-sm-8"> + <input type="checkbox" name="classWeeks" value="周一"> 周一 + <input type="checkbox" name="classWeeks" value="周二"> 周二 + <input type="checkbox" name="classWeeks" value="周三"> 周三 + <input type="checkbox" name="classWeeks" value="周四"> 周四 + <input type="checkbox" name="classWeeks" value="周五"> 周五 + <input type="checkbox" name="classWeeks" value="周六"> 周六 + <input type="checkbox" name="classWeeks" value="周日"> 周日 + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课包封面:</label> + <div class="col-sm-4"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*列表页</label> <div class="col-sm-2"> <div id="coverDrawingPreId"> <div><img width="100px" height="100px" src="${ctxPath}/img/NoPIC.png"></div> @@ -97,56 +115,103 @@ </div> <div class="form-group"> <label class="col-sm-3 control-label head-scu-label"></label> - <label>推荐像素:340 x 254px</label> + <label>推荐像素:210x280px</label> </div> <div class="form-group"> - <label class="col-sm-3 control-label head-scu-label">*课程介绍</label> + <label class="col-sm-3 control-label head-scu-label">*详情页</label> <div class="col-sm-2"> - <div id="introductionDrawingPreId"> + <div id="detailDrawingPreId"> <div><img width="100px" height="100px" src="${ctxPath}/img/NoPIC.png"></div> </div> </div> <div class="col-sm-2"> - <div class="head-scu-btn upload-btn" id="introductionDrawingBtnId"> + <div class="head-scu-btn upload-btn" id="detailDrawingBtnId"> <i class="fa fa-upload"></i> 上传 </div> </div> - <input type="hidden" id="introductionDrawing" value=""/> + <input type="hidden" id="detailDrawing" value=""/> </div> <div class="form-group"> <label class="col-sm-3 control-label head-scu-label"></label> - <label>推荐像素:宽780px</label> + <label>推荐像素:780x440px</label> </div> <div class="form-group"> - <label class="col-sm-3 control-label head-scu-label">*课程内容</label> - <div class="col-sm-2" style="padding-top: 30px;"> - <input type="file" id="upFile" name="upFile" style="display: none"> - <input class="form-control" id="courseVideo" readonly/> + <label class="col-sm-3 control-label head-scu-label">*课包介绍</label> + <div class="col-sm-2"> + <div id="introduceDrawingPreId"> + <div><img width="100px" height="100px" src="${ctxPath}/img/NoPIC.png"></div> + </div> </div> - <div class="col-sm-2" style="padding-top: 30px;"> - <button class="btn btn-outline btn-success" type="file" onclick="UploadFileFn()"><i class="fa fa-upload"></i>上传视频</button> + <div class="col-sm-2"> + <div class="head-scu-btn upload-btn" id="introduceDrawingBtnId"> + <i class="fa fa-upload"></i> 上传 + </div> + </div> + <input type="hidden" id="introduceDrawing" value=""/> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:宽780x</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">排序:</label> + <div class="col-sm-4"> + <input class="form-control" id="sort" name="sort" type="number" placeholder="请输入排序"> + </div> + </div> + <div class="hr-line-dashed"></div> + <h3>课时设置</h3> + <div class="form-group"> + <label class="col-sm-3 control-label">*支付方式:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <input type="checkbox" name="payType" value="1"> 现金 + <input type="checkbox" name="payType" value="2"> 玩湃币 + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课时有效期:</label> + <div class="col-sm-4"> + 购买后 <input id="validDays" name="validDays" type="number" min="0" placeholder="天数" style="width: 80px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> 天内有效 + </div> + </div> + <div id="price"> + <div class="form-group"> + <label class="col-sm-3 control-label">*课时数:</label> + <div class="col-sm-8"> + <span class="classNumber_span"><input class="classNumber" type="number" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> </span> + <span class="cash_span"></span> + <span class="paiCoin_span"></span> + <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice()"></i> + </div> </div> </div> </div> <div class="row btn-group-m-t"> <div class="col-sm-10"> - <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="CourseInfo.addSubmit()"/> - <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="CourseInfo.close()"/> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.addSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="CoursePackageInfo.close()"/> </div> </div> </div> - </div> </div> -<script src="${ctxPath}/modular/system/course/course_info.js"></script> +<script src="${ctxPath}/modular/system/coursePackage/coursePackage_info.js"></script> <script type="text/javascript"> + laydate.render({ + elem: '#classStartTime' + ,type: 'time' + ,range: true + }); var avatarUp = new $WebUpload("coverDrawing"); avatarUp.setUploadBarId("progressBar"); avatarUp.init(); - var avatarUp1 = new $WebUpload("introductionDrawing"); + var avatarUp1 = new $WebUpload("detailDrawing"); avatarUp1.setUploadBarId("progressBar"); avatarUp1.init(); + var avatarUp1 = new $WebUpload("introduceDrawing"); + avatarUp1.setUploadBarId("progressBar"); + avatarUp1.init(); </script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html new file mode 100644 index 0000000..aab2577 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html @@ -0,0 +1,241 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal"> + <div class="row"> + <input type="hidden" id="id" value="${item.id}"> + <div class="form-group"> + <label class="col-sm-3 control-label">*所在省:</label> + <div class="col-sm-4"> + <select class="form-control" id="provinceCode" name="provinceCode"> + @for(obj in province){ + <option value="${obj.code}" ${item.provinceCode == obj.code ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*所在市:</label> + <div class="col-sm-4"> + <select class="form-control" id="cityCode" name="cityCode"> + @for(obj in city){ + <option value="${obj.code}" ${item.cityCode == obj.code ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*所属门店:</label> + <div class="col-sm-4"> + <select class="form-control" id="storeId" name="storeId"> + @for(obj in store){ + <option value="${obj.id}" ${item.storeId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课程类型:</label> + <div class="col-sm-4"> + <select class="form-control" id="coursePackageTypeId" name="coursePackageTypeId"> + @for(obj in coursePackageType){ + <option value="${obj.id}" ${item.coursePackageTypeId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课包名称:</label> + <div class="col-sm-4"> + <input class="form-control" id="name" name="name" value="${item.name}"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*上课场地:</label> + <div class="col-sm-4"> + <select class="form-control" id="siteId" name="siteId"> + @for(obj in site){ + <option value="${obj.id}" ${item.siteId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*授课教师:</label> + <div class="col-sm-4"> + <select class="form-control" id="coachId" name="coachId"> + <option value="">请选择</option> + @for(obj in coach){ + <option value="${obj.id}" ${item.coachId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*最多预约人数:</label> + <div class="col-sm-4"> + <input class="form-control" id="maxSubscribeNumber" name="maxSubscribeNumber" value="${item.maxSubscribeNumber}" type="number" min="0" placeholder="请输入最多预约人数"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*上课时间:</label> + <div class="col-sm-4"> + <input class="form-control" id="classStartTime" name="classStartTime" value="${classTime}" placeholder="请选择"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label"></label> + <div class="col-sm-8"> + @for(obj in classWeeks){ + <input type="checkbox" name="classWeeks" value="${obj.value}" ${obj.checked ? 'checked' : ''}> ${obj.value} + @} + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课包封面:</label> + <div class="col-sm-4"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*列表页</label> + <div class="col-sm-2"> + <div id="coverDrawingPreId"> + <div><img width="100px" height="100px" src="${item.coverDrawing}"></div> + </div> + </div> + <div class="col-sm-2"> + <div class="head-scu-btn upload-btn" id="coverDrawingBtnId"> + <i class="fa fa-upload"></i> 上传 + </div> + </div> + <input type="hidden" id="coverDrawing" value="${item.coverDrawing}"/> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:210x280px</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*详情页</label> + <div class="col-sm-2"> + <div id="detailDrawingPreId"> + <div><img width="100px" height="100px" src="${item.detailDrawing}"></div> + </div> + </div> + <div class="col-sm-2"> + <div class="head-scu-btn upload-btn" id="detailDrawingBtnId"> + <i class="fa fa-upload"></i> 上传 + </div> + </div> + <input type="hidden" id="detailDrawing" value="${item.detailDrawing}"/> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:780x440px</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*课包介绍</label> + <div class="col-sm-2"> + <div id="introduceDrawingPreId"> + <div><img width="100px" height="100px" src="${item.introduceDrawing}"></div> + </div> + </div> + <div class="col-sm-2"> + <div class="head-scu-btn upload-btn" id="introduceDrawingBtnId"> + <i class="fa fa-upload"></i> 上传 + </div> + </div> + <input type="hidden" id="introduceDrawing" value="${item.introduceDrawing}"/> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:宽780x</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">排序:</label> + <div class="col-sm-4"> + <input class="form-control" id="sort" name="sort" value="${item.sort}" type="number" placeholder="请输入排序"> + </div> + </div> + <div class="hr-line-dashed"></div> + <h3>课时设置</h3> + <div class="form-group"> + <label class="col-sm-3 control-label">*支付方式:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <input type="checkbox" name="payType" value="1" ${cashPayment ? 'checked' : ''}> 现金 + <input type="checkbox" name="payType" value="2" ${playPaiCoin ? 'checked' : ''}> 玩湃币 + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课时有效期:</label> + <div class="col-sm-4"> + 购买后 <input id="validDays" name="validDays" type="number" value="${item.validDays}" min="0" placeholder="天数" style="width: 80px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> 天内有效 + </div> + </div> + <div id="price"> + <div class="form-group"> + <label class="col-sm-3 control-label">*课时数:</label> + <div class="col-sm-8"> + <span class="classNumber_span"><input class="classNumber" type="number" value="${coursePackagePaymentConfig.classHours}" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> </span> + <span class="cash_span"> + @if(cashPayment){ + 现金支付:<input class="cash" type="number" value="${coursePackagePaymentConfig.cashPayment}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> ¥ + @} + </span> + <span class="paiCoin_span"> + @if(playPaiCoin){ + 玩湃币支付:<input class="paiCoin" type="number" value="${coursePackagePaymentConfig.playPaiCoin}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> 币 + @} + </span> + <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice()"></i> + </div> + </div> + @for(obj in coursePackagePaymentConfigs){ + <div class="form-group"> + <label class="col-sm-3 control-label">*课时数:</label> + <div class="col-sm-8"> + <span class="classNumber_span"><input class="classNumber" type="number" value="${obj.classHours}" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> </span> + <span class="cash_span"> + @if(cashPayment){ + 现金支付:<input class="cash" type="number" value="${obj.cashPayment}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> ¥ + @} + </span> + <span class="paiCoin_span"> + @if(playPaiCoin){ + 玩湃币支付:<input class="paiCoin" type="number" value="${obj.playPaiCoin}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> 币 + @} + </span> + <i class="fa fa-trash-o" style="font-size:24px" onclick="removePrice(4, this)"></i> + </div> + </div> + @} + </div> + </div> + <div class="row btn-group-m-t"> + <div class="col-sm-10"> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.editSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="CoursePackageInfo.close()"/> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/coursePackage_info.js"></script> +<script type="text/javascript"> + laydate.render({ + elem: '#classStartTime' + ,type: 'time' + ,range: true + }); + var avatarUp = new $WebUpload("coverDrawing"); + avatarUp.setUploadBarId("progressBar"); + avatarUp.init(); + + var avatarUp1 = new $WebUpload("detailDrawing"); + avatarUp1.setUploadBarId("progressBar"); + avatarUp1.init(); + + var avatarUp1 = new $WebUpload("introduceDrawing"); + avatarUp1.setUploadBarId("progressBar"); + avatarUp1.init(); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_info.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_info.html new file mode 100644 index 0000000..6cc25f2 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_info.html @@ -0,0 +1,202 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal"> + <div class="row"> + <input type="hidden" id="id" value="${item.id}"> + <div class="form-group"> + <label class="col-sm-3 control-label">*所在省:</label> + <div class="col-sm-4"> + <select class="form-control" id="provinceCode" name="provinceCode" disabled> + @for(obj in province){ + <option value="${obj.code}" ${item.provinceCode == obj.code ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*所在市:</label> + <div class="col-sm-4"> + <select class="form-control" id="cityCode" name="cityCode" disabled> + @for(obj in city){ + <option value="${obj.code}" ${item.cityCode == obj.code ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*所属门店:</label> + <div class="col-sm-4"> + <select class="form-control" id="storeId" name="storeId" disabled> + @for(obj in store){ + <option value="${obj.id}" ${item.storeId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课程类型:</label> + <div class="col-sm-4"> + <select class="form-control" id="coursePackageTypeId" name="coursePackageTypeId" disabled> + @for(obj in coursePackageType){ + <option value="${obj.id}" ${item.coursePackageTypeId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课包名称:</label> + <div class="col-sm-4"> + <input class="form-control" id="name" name="name" value="${item.name}" readonly> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*上课场地:</label> + <div class="col-sm-4"> + <select class="form-control" id="siteId" name="siteId" disabled> + @for(obj in site){ + <option value="${obj.id}" ${item.siteId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*授课教师:</label> + <div class="col-sm-4"> + <select class="form-control" id="coachId" name="coachId" disabled> + <option value="">请选择</option> + @for(obj in coach){ + <option value="${obj.id}" ${item.coachId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*最多预约人数:</label> + <div class="col-sm-4"> + <input class="form-control" id="maxSubscribeNumber" name="maxSubscribeNumber" value="${item.maxSubscribeNumber}" type="number" min="0" placeholder="请输入最多预约人数" readonly> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*上课时间:</label> + <div class="col-sm-4"> + <input class="form-control" id="classStartTime" name="classStartTime" value="${classTime}" placeholder="请选择" readonly> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label"></label> + <div class="col-sm-8"> + @for(obj in classWeeks){ + <input type="checkbox" name="classWeeks" value="${obj.value}" ${obj.checked ? 'checked' : ''}> ${obj.value} + @} + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课包封面:</label> + <div class="col-sm-4"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*列表页</label> + <div class="col-sm-2"> + <div id="coverDrawingPreId"> + <div><img width="100px" height="100px" src="${item.coverDrawing}"></div> + </div> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:210x280px</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*详情页</label> + <div class="col-sm-2"> + <div id="detailDrawingPreId"> + <div><img width="100px" height="100px" src="${item.detailDrawing}"></div> + </div> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:780x440px</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*课包介绍</label> + <div class="col-sm-2"> + <div id="introduceDrawingPreId"> + <div><img width="100px" height="100px" src="${item.introduceDrawing}"></div> + </div> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:宽780x</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">排序:</label> + <div class="col-sm-4"> + <input class="form-control" id="sort" name="sort" value="${item.sort}" type="number" placeholder="请输入排序"> + </div> + </div> + <div class="hr-line-dashed"></div> + <h3>课时设置</h3> + <div class="form-group"> + <label class="col-sm-3 control-label">*支付方式:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <input type="checkbox" name="payType" value="1" ${cashPayment ? 'checked' : ''}> 现金 + <input type="checkbox" name="payType" value="2" ${playPaiCoin ? 'checked' : ''}> 玩湃币 + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课时有效期:</label> + <div class="col-sm-4"> + 购买后 <input id="validDays" name="validDays" type="number" value="${item.validDays}" min="0" placeholder="天数" style="width: 80px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> 天内有效 + </div> + </div> + <div id="price"> + <div class="form-group"> + <label class="col-sm-3 control-label">*课时数:</label> + <div class="col-sm-8"> + <span class="classNumber_span"><input class="classNumber" type="number" value="${coursePackagePaymentConfig.classHours}" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> </span> + <span class="cash_span"> + @if(cashPayment){ + 现金支付:<input class="cash" type="number" value="${coursePackagePaymentConfig.cashPayment}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> ¥ + @} + </span> + <span class="paiCoin_span"> + @if(playPaiCoin){ + 玩湃币支付:<input class="paiCoin" type="number" value="${coursePackagePaymentConfig.playPaiCoin}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> 币 + @} + </span> + </div> + </div> + @for(obj in coursePackagePaymentConfigs){ + <div class="form-group"> + <label class="col-sm-3 control-label">*课时数:</label> + <div class="col-sm-8"> + <span class="classNumber_span"><input class="classNumber" type="number" value="${obj.classHours}" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> </span> + <span class="cash_span"> + @if(cashPayment){ + 现金支付:<input class="cash" type="number" value="${obj.cashPayment}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> ¥ + @} + </span> + <span class="paiCoin_span"> + @if(playPaiCoin){ + 玩湃币支付:<input class="paiCoin" type="number" value="${obj.playPaiCoin}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> 币 + @} + </span> + </div> + </div> + @} + </div> + </div> + <div class="row btn-group-m-t"> + <div class="col-sm-10"> + <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="CoursePackageInfo.close()"/> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/coursePackage_info.js"></script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/examineCoursePackage.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/examineCoursePackage.html new file mode 100644 index 0000000..b490e0e --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/examineCoursePackage.html @@ -0,0 +1,82 @@ +@layout("/common/_container.html"){ +<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css" media="all"> +<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-lg-10 col-sm-9"> + <div class="row"> + <div class="col-lg-4 col-sm-12"> + <#SelectCon id="provinceCode" name="所在省"> + <option value="">全部</option> + @for(obj in province){ + <option value="${obj.code}">${obj.name}</option> + @} + </#SelectCon> + </div> + <div class="col-lg-4 col-sm-12"> + <#SelectCon id="cityCode" name="所在市"> + <option value="">全部</option> + </#SelectCon> + </div> + <div class="col-lg-4 col-sm-12"> + <#SelectCon id="coursePackageTypeId" name="课包类型"> + <option value="">全部</option> + @for(obj in coursePackageType){ + <option value="${obj.id}">${obj.name}</option> + @} + </#SelectCon> + </div> + <div class="col-lg-4 col-sm-12"> + <#NameCon id="name" name="课包名称"/> + </div> + <div class="col-lg-4 col-sm-12"> + <#SelectCon id="auditStatus" name="审核状态"> + <option value="">全部</option> + <option value="1">待审核</option> + <option value="3">未通过</option> + </#SelectCon> + </div> + </div> + </div> + <div class="col-lg-2 col-sm-3"> + <div class="row"> + <div class="col-lg-12 col-sm-12"> + <#button name="搜索" icon="fa-search" clickFun="ExamineCoursePackage.search()"/> + <#button name="重置" icon="fa-trash" clickFun="ExamineCoursePackage.resetSearch()" space="true"/> + </div> + </div> + </div> + </div> + <div class="hidden-xs" id="managerTableToolbar" role="group"> + @if(shiro.hasPermission("/coursePackage/examineCoursePackage")){ + <#button name="审核" icon="fa-plus" clickFun="ExamineCoursePackage.examineCoursePackage()"/> + @} + @if(shiro.hasPermission("/coursePackage/detailsExamineCoursePackage")){ + <#button name="详情" icon="fa-check-circle" clickFun="ExamineCoursePackage.detailsExamineCoursePackage()" space="true"/> + @} + </div> + <#table id="managerTable"/> + </div> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/examineCoursePackage.js"></script> +<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script> +<script> + laydate.render({ + elem: '#beginTime' + }); + laydate.render({ + elem: '#endTime' + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/examineCoursePackage_info.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/examineCoursePackage_info.html new file mode 100644 index 0000000..9fe4f92 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/examineCoursePackage_info.html @@ -0,0 +1,229 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal"> + <div class="row"> + <input type="hidden" id="id" value="${item.id}"> + <div class="form-group"> + <label class="col-sm-3 control-label">当前状态:</label> + <div class="col-sm-4"> + @if(item.auditStatus == 1){ + <span style="color: #D99A0D;">待审核</span> + @} + @if(item.auditStatus == 3){ + <span style="color: #F11B1B;">未通过</span> + @} + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*所在省:</label> + <div class="col-sm-4"> + <select class="form-control" id="provinceCode" name="provinceCode" disabled> + @for(obj in province){ + <option value="${obj.code}" ${item.provinceCode == obj.code ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*所在市:</label> + <div class="col-sm-4"> + <select class="form-control" id="cityCode" name="cityCode" disabled> + @for(obj in city){ + <option value="${obj.code}" ${item.cityCode == obj.code ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*所属门店:</label> + <div class="col-sm-4"> + <select class="form-control" id="storeId" name="storeId" disabled> + @for(obj in store){ + <option value="${obj.id}" ${item.storeId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课程类型:</label> + <div class="col-sm-4"> + <select class="form-control" id="coursePackageTypeId" name="coursePackageTypeId" disabled> + @for(obj in coursePackageType){ + <option value="${obj.id}" ${item.coursePackageTypeId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课包名称:</label> + <div class="col-sm-4"> + <input class="form-control" id="name" name="name" value="${item.name}" readonly> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*上课场地:</label> + <div class="col-sm-4"> + <select class="form-control" id="siteId" name="siteId" disabled> + @for(obj in site){ + <option value="${obj.id}" ${item.siteId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*授课教师:</label> + <div class="col-sm-4"> + <select class="form-control" id="coachId" name="coachId" disabled> + <option value="">请选择</option> + @for(obj in coach){ + <option value="${obj.id}" ${item.coachId == obj.id ? 'selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*最多预约人数:</label> + <div class="col-sm-4"> + <input class="form-control" id="maxSubscribeNumber" name="maxSubscribeNumber" value="${item.maxSubscribeNumber}" type="number" min="0" placeholder="请输入最多预约人数" readonly> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*上课时间:</label> + <div class="col-sm-4"> + <input class="form-control" id="classStartTime" name="classStartTime" value="${classTime}" placeholder="请选择" readonly> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label"></label> + <div class="col-sm-8"> + @for(obj in classWeeks){ + <input type="checkbox" name="classWeeks" value="${obj.value}" ${obj.checked ? 'checked' : ''}> ${obj.value} + @} + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课包封面:</label> + <div class="col-sm-4"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*列表页</label> + <div class="col-sm-2"> + <div id="coverDrawingPreId"> + <div><img width="100px" height="100px" src="${item.coverDrawing}"></div> + </div> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:210x280px</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*详情页</label> + <div class="col-sm-2"> + <div id="detailDrawingPreId"> + <div><img width="100px" height="100px" src="${item.detailDrawing}"></div> + </div> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:780x440px</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label">*课包介绍</label> + <div class="col-sm-2"> + <div id="introduceDrawingPreId"> + <div><img width="100px" height="100px" src="${item.introduceDrawing}"></div> + </div> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label head-scu-label"></label> + <label>推荐像素:宽780x</label> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">排序:</label> + <div class="col-sm-4"> + <input class="form-control" id="sort" name="sort" value="${item.sort}" type="number" placeholder="请输入排序"> + </div> + </div> + <div class="hr-line-dashed"></div> + <h3>课时设置</h3> + <div class="form-group"> + <label class="col-sm-3 control-label">*支付方式:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <input type="checkbox" name="payType" value="1" ${cashPayment ? 'checked' : ''}> 现金 + <input type="checkbox" name="payType" value="2" ${playPaiCoin ? 'checked' : ''}> 玩湃币 + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*课时有效期:</label> + <div class="col-sm-4"> + 购买后 <input id="validDays" name="validDays" type="number" value="${item.validDays}" min="0" placeholder="天数" style="width: 80px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> 天内有效 + </div> + </div> + <div id="price"> + <div class="form-group"> + <label class="col-sm-3 control-label">*课时数:</label> + <div class="col-sm-8"> + <span class="classNumber_span"><input class="classNumber" type="number" value="${coursePackagePaymentConfig.classHours}" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> </span> + <span class="cash_span"> + @if(cashPayment){ + 现金支付:<input class="cash" type="number" value="${coursePackagePaymentConfig.cashPayment}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> ¥ + @} + </span> + <span class="paiCoin_span"> + @if(playPaiCoin){ + 玩湃币支付:<input class="paiCoin" type="number" value="${coursePackagePaymentConfig.playPaiCoin}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> 币 + @} + </span> + </div> + </div> + @for(obj in coursePackagePaymentConfigs){ + <div class="form-group"> + <label class="col-sm-3 control-label">*课时数:</label> + <div class="col-sm-8"> + <span class="classNumber_span"><input class="classNumber" type="number" value="${obj.classHours}" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> </span> + <span class="cash_span"> + @if(cashPayment){ + 现金支付:<input class="cash" type="number" value="${obj.cashPayment}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> ¥ + @} + </span> + <span class="paiCoin_span"> + @if(playPaiCoin){ + 玩湃币支付:<input class="paiCoin" type="number" value="${obj.playPaiCoin}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;" readonly> 币 + @} + </span> + </div> + </div> + @} + </div> + <div class="hr-line-dashed"></div> + <div class="form-group"> + <label class="col-sm-3 control-label">*审核状态:</label> + <div class="col-sm-8" style="margin-top: 6px;"> + <input name="auditStatus" type="radio" value="2"/> 通过 + <input name="auditStatus" type="radio" value="3"/> 拒绝 + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">*拒绝理由:</label> + <div class="col-sm-8" style="margin-top: 6px;"> + <textarea id="authRemark" style="width: 100%;height: 200px;" placeholder="请输入拒绝理由"></textarea> + </div> + </div> + + </div> + <div class="row btn-group-m-t"> + <div class="col-sm-10"> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.addSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="CoursePackageInfo.close()"/> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/examineCoursePackage_info.js"></script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/manualReservation.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/manualReservation.html new file mode 100644 index 0000000..0fb01fc --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/manualReservation.html @@ -0,0 +1,42 @@ +@layout("/common/_container.html"){ +<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css" media="all"> +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <input type="hidden" id="id" value="${id}"> + <div class="row"> + <div class="col-lg-10 col-sm-9"> + <div class="row"> + <div class="col-lg-4 col-sm-12"> + <#NameCon id="userName" name="所属用户"/> + </div> + <div class="col-lg-4 col-sm-12"> + <#NameCon id="studentName" name="姓名"/> + </div> + </div> + </div> + <div class="col-lg-2 col-sm-3"> + <div class="row"> + <div class="col-lg-12 col-sm-12"> + <#button name="搜索" icon="fa-search" clickFun="ManualReservation.search()"/> + <#button name="重置" icon="fa-trash" clickFun="ManualReservation.resetSearch()" space="true"/> + </div> + </div> + </div> + </div> + <div class="hidden-xs" id="managerTableToolbar" role="group"> + <#button name="保存" icon="fa-plus" clickFun="ManualReservation.submit()"/> + </div> + <#table id="managerTable"/> + </div> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/manualReservation.js"></script> +<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html new file mode 100644 index 0000000..c193dc6 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html @@ -0,0 +1,53 @@ +@layout("/common/_container.html"){ +<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css" media="all"> +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <div class="row"> + <input type="hidden" id="id" value="${item.id}"> + <input type="hidden" id="name" value="${item.name}"> + <div class="col-lg-10 col-sm-9"> + <div class="row"> + <div class="col-lg-4 col-sm-12"> + <#NameCon id="userName" name="购买用户"/> + </div> + <div class="col-lg-4 col-sm-12"> + <#NameCon id="studentName" name="购买学员"/> + </div> + </div> + </div> + <div class="col-lg-2 col-sm-3"> + <div class="row"> + <div class="col-lg-12 col-sm-12"> + <#button name="搜索" icon="fa-search" clickFun="RegistrationRecord.search()"/> + <#button name="重置" icon="fa-trash" clickFun="RegistrationRecord.resetSearch()" space="true"/> + </div> + </div> + </div> + </div> + <div class="hidden-xs" id="managerTableToolbar" role="group"> + <#button name="上课记录" icon="fa-plus" clickFun="RegistrationRecord.classRecord()"/> + <#button name="退课" icon="fa-edit" clickFun="RegistrationRecord.dropClass()" space="true"/> + <#button name="补课" icon="fa-refresh" clickFun="RegistrationRecord.makeUpMissedLessons()" space="true"/> + </div> + <#table id="managerTable"/> + </div> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/registrationRecord.js"></script> +<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script> +<script> + laydate.render({ + elem: '#beginTime' + }); + laydate.render({ + elem: '#endTime' + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_add.html index f19f8e6..2463845 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_add.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_add.html @@ -38,5 +38,5 @@ </div> </div> -<script src="${ctxPath}/static/modular/system/dept/dept_info.js"></script> +<script src="${ctxPath}/modular/system/dept/dept_info.js"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_edit.html index 76375ed..e99d2fd 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dept/dept_edit.html @@ -39,5 +39,5 @@ </div> </div> -<script src="${ctxPath}/static/modular/system/dept/dept_info.js"></script> +<script src="${ctxPath}/modular/system/dept/dept_info.js"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/menu/menu_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/menu/menu_edit.html index be64dd1..574b78c 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/menu/menu_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/menu/menu_edit.html @@ -38,5 +38,5 @@ </div> </div> -<script src="${ctxPath}/static/modular/system/menu/menu_info.js"></script> +<script src="${ctxPath}/modular/system/menu/menu_info.js"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord.html index 2913f18..cfb046f 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord.html @@ -34,5 +34,5 @@ </div> </div> </div> -<script src="${ctxPath}/static/modular/system/tAuditRecord/tAuditRecord.js"></script> +<script src="${ctxPath}/modular/system/tAuditRecord/tAuditRecord.js"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_add.html index 03b81ad..9d15965 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_add.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_add.html @@ -29,5 +29,5 @@ </div> </div> -<script src="${ctxPath}/static/modular/system/tAuditRecord/tAuditRecord_info.js"></script> +<script src="${ctxPath}/modular/system/tAuditRecord/tAuditRecord_info.js"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_edit.html index 8ff5814..dc95986 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tAuditRecord/tAuditRecord_edit.html @@ -29,5 +29,5 @@ </div> </div> -<script src="${ctxPath}/static/modular/system/tAuditRecord/tAuditRecord_info.js"></script> +<script src="${ctxPath}/modular/system/tAuditRecord/tAuditRecord_info.js"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity_edit.html index 1d8f66c..8bb70f5 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity_edit.html @@ -27,7 +27,7 @@ </select> </div> </div> - <#input id="name" name="管理员姓名" type="text" value="${item.name}"/> + <#input id="name" name="发放数量" type="text" value="${item.name}"/> <#input id="phone" name="管理员手机号" type="text" value="${item.phone}"/> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCoupon.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCoupon.html index 84e028e..d394b6d 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCoupon.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCoupon.html @@ -6,6 +6,7 @@ <h5>优惠券管理</h5> </div> <div class="ibox-content"> + <div class="row row-lg"> <div class="col-sm-12"> <div class="row"> @@ -59,8 +60,8 @@ <div class="hidden-xs" id="TCouponTableToolbar" role="group"> <#button name="添加" icon="fa-plus" clickFun="TCoupon.openAdd()"/> <#button name="编辑" icon="fa-edit" clickFun="TCoupon.openChange()" space="true"/> - <#button name="上架" icon="fa-remove" clickFun="TCoupon.onShelf()" space="true"/> - <#button name="下架" icon="fa-remove" clickFun="TCoupon.offShelf()" space="true"/> + <#button name="上架" icon="fa-remove" clickFun="TCoupon.onShelf(1)" space="true"/> + <#button name="下架" icon="fa-remove" clickFun="TCoupon.onShelf(2)" space="true"/> <#button name="查看详情" icon="fa-remove" clickFun="TCoupon.openDetail()" space="true"/> <#button name="领取记录" icon="fa-remove" clickFun="TCoupon.openCollectionRecord()" space="true"/> </div> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html index 5cd9c43..6834772 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html @@ -270,17 +270,17 @@ <label class="col-sm-3">*适用范围: </label> <div class="col-sm-3" id="belongsNationwide" hidden="hidden"> <input class="col-sm-1" onclick="scopeOfApplication1()" name="company" type="radio" - value="0" checked style="margin-top: 10px"/> + value="1" checked style="margin-top: 10px"/> <label class="col-sm-2" style="width: 68%;margin-top: 7px">全国通用</label> </div> <div class="col-sm-3" id="belongsCity" hidden="hidden"> <input class="col-sm-1" name="company" onclick="scopeOfApplication2()" type="radio" - value="1" style="margin-top: 10px"/> + value="2" style="margin-top: 10px"/> <label class="col-sm-2" style="width: 64%;margin-top: 7px">指定城市</label> </div> <div class="col-sm-3" id="belongsStore" hidden="hidden"> <input class="col-sm-1" name="company" onclick="scopeOfApplication3()" type="radio" - value="1" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px"/> + value="3" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px"/> <label class="col-sm-2" style="width: 64%;margin-top: 6px;">指定门店</label> </div> </div> @@ -402,7 +402,7 @@ }, methods: { handleAvatarSuccess(res, file) { - couponInfoDlg.goodsPicArray.push(file); + couponInfoDlg.goodsPicArray.push(file.response); }, beforeAvatarUpload(file) { const isLt2M = file.size / 1024 / 1024 < 10; diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponInfo.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponInfo.html new file mode 100644 index 0000000..2c032f4 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponInfo.html @@ -0,0 +1,415 @@ +@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 hidden id="t1" value="${item.type}"> + <input hidden id="t2" value="${item.distributionMethod}"> + <input hidden id="t3" value="${item.redemptionMethod}"> + <input hidden id="t4" value="${item.userPopulation}"> + <input hidden id="t5" value="${item.useScope}"> + <input hidden id="one" value="${one}"> + <input hidden id="two" value="${two}"> + <input hidden id="three" value="${three}"> + <input hidden id="city" value="${city}"> + <div class="form-horizontal"> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*优惠券名称: </label> + <div class="col-sm-9"> + <input class="form-control" id="name" name="name" autocomplete="off" placeholder="请输入优惠券名称" value="${item.name}" readonly> + </div> + </div> + + </div> + </div> + + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*优惠券类型: </label> + <input class="col-sm-1" style="margin-left: 2.7%;width: 13px;height: 13px;" + name="prescription" onclick="radio1()" checked disabled + value="1" type="radio"> + <label class="col-sm-1" style="margin-left: 10px;width: 17%">满减券: 满</label> + <input type="text" class="col-sm-1" id="conditionalAmount" readonly + onkeyup="value=value.replace(/\D/g,'')"/> + <label class="col-sm-1" style="margin-left: -1.5%;width: 14%"> 元 , 减 </label> + <input type="text" class="col-sm-1" id="deductionAmount" readonly + onkeyup="value=value.replace(/\D/g,'')"/> + <label class="col-sm-1" style="margin-left: -1.5%"> 元</label> + </div> + <div class="form-group"> + <input class="col-sm-1" name="prescription" type="radio" value="2" disabled + onclick="radio2()" + style="margin-left: 24.7%;"> + <label class="col-sm-1" style="margin-left: -17px;width: 20%;">代金券: 可抵</label> + <input class="col-sm-1" id="voucherAmount" readonly /> + <label class="col-sm-1">元</label> + </div> + <div class="form-group"> + <input class="col-sm-1" name="prescription" type="radio" value="3" disabled + onclick="radio3()" + style="margin-left: 24.7%;"> + <label class="col-sm-1 control-label" style="margin-left: -1%;width: 14%;margin-top: -5px">体验券: </label> + <input class="col-sm-1" style="width: 35%" id="experienceName" name="name" + autocomplete="off" placeholder="请输入体验券名称" readonly> + </div> + + </div> + </div> + + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*优惠券说明: </label> + <div class="col-sm-9"> + <textarea type="checkbox" id="illustrate" style="margin-left: 1%;width: 75%;height: 120px" + placeholder="请输入优惠券说明" disabled>${item.illustrate}</textarea> + </div> + </div> + + </div> + </div> + + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <div class="initialLevel col-sm-12 control-label form-group"> + <label class="col-sm-3 control-label">*发放方式: </label> + <input class="col-sm-1 control-label" name="distributionMethod" type="radio" disabled + value="1" checked style="margin-top: 10px"/> + <label class="col-sm-1" style="margin-left: -15px;width: 16%;margin-top: 7px">积分购买</label> + <input class="col-sm-1 control-label" name="distributionMethod" type="radio" disabled + value="2" style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px"/> + <label class="col-sm-1" style="width: 16%;margin-top: 7px">注册赠送</label> + <input class="col-sm-1 control-label" name="distributionMethod" type="radio" disabled + value="3" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px"/> + <label class="col-sm-1" style="width: 16%;margin-top: 7px">自动发券</label> + </div> + </div> + + </div> + </div> + + <div class="row" id="exchangeType" > + <div class="col-sm-6"> + <div class="form-group"> + <div class="initialLevel col-sm-12 control-label form-group"> + <label class="col-sm-3 control-label">*兑换方式: </label> + <input class="col-sm-1 control-label" onclick="exchangeMethod1()" name="exchangeMethod" type="radio" disabled + value="1" style="margin-top: 10px"/> + <label class="col-sm-1" style="margin-left: -15px;width: 16%;margin-top: 7px">积分</label> + <input class="col-sm-1 control-label" name="exchangeMethod" onclick="exchangeMethod2()" type="radio" disabled + value="2" style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px"/> + <label class="col-sm-1" style="width: 20%;margin-top: 7px">现金+积分</label> + <input class="col-sm-1 control-label" name="exchangeMethod" onclick="exchangeMethod3()" type="radio" disabled + value="3" style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px"/> + <label class="col-sm-1" style="width: 9%;margin-top: 7px">现金</label> + </div> + </div> + + </div> + </div> + + <div class="row" id="needAmount" > + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*所需现金</label> + <div class="col-sm-9"> + <input class="form-control" id="requiredCash" placeholder="请输入所需现金" name="requiredCash" autocomplete="off" type="text" value="${item.cash}" readonly + onkeyup="this.value=this.value.replace(/\D/g,'')"> + </div> + </div> + + </div> + </div> + + <div class="row" id="needIntegral" > + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*所需积分</label> + <div class="col-sm-9"> + <input class="form-control" id="requiredPoints" placeholder="请输入所需积分" name="requiredPoints" autocomplete="off" type="text" value="${item.integral}" readonly + onkeyup="this.value=this.value.replace(/\D/g,'')"> + </div> + </div> + + </div> + </div> + + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <div class="initialLevel col-sm-12 control-label form-group"> + <label class="col-sm-3 control-label">*用户人群: </label> + <input class="col-sm-1 control-label" name="userGroup" type="radio" disabled + value="1" checked style="margin-top: 10px"/> + <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" disabled + value="2" style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px"/> + <label class="col-sm-1" style="width: 16%;margin-top: 7px">年度会员</label> + <input class="col-sm-1 control-label" name="userGroup" type="radio" disabled + value="3" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px"/> + <label class="col-sm-1" style="width: 18%;margin-top: 5px">已有学员用户</label> + </div> + </div> + + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*发放数量</label> + <div class="col-sm-9"> + <input class="form-control" id="quantityIssued" placeholder="请输入发放数量" name="quantityIssued" autocomplete="off" type="text" value="${item.quantityIssued}" readonly + onkeyup="this.value=this.value.replace(/\D/g,'')"> + </div> + </div> + + </div> + </div> + + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*限领数量</label> + <div class="col-sm-9"> + <input class="form-control" id="pickUpQuantity" placeholder="请输入限领数量" name="pickUpQuantity" autocomplete="off" type="text" value="${item.pickUpQuantity}" readonly + onkeyup="this.value=this.value.replace(/\D/g,'')"> + </div> + </div> + + </div> + </div> + + <div class="row"> + <div class="col-sm-6"> + <label class="col-sm-3 control-label">*有效期: </label> + <input type="text" style="width: 30%;margin-left: 1%" class="col-sm-3" id="periodOfValidity" value="${s} - ${e}" disabled + placeholder="请选择"/> + </div> + </div> + + <div class="row" id="app" > + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*商品封面: </label> + <div class="col-sm-2" style="margin-top: 2%"> + <img src=${item.cover}> + </div> + </div> + + </div> + </div> + + <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%"> + @for(i in img){ + <img src=${i} style="width: 150px"> + @} + </div> + </div> + + </div> + </div> + + <div class="row" id="belongsCon" > + <div class="col-sm-6"> + <div class="form-group"> + <div class="initialLevel col-sm-12 control-label form-group"> + <label class="col-sm-3">*适用范围: </label> + <div class="col-sm-3" id="belongsNationwide" > + <input class="col-sm-1" onclick="scopeOfApplication1()" name="company" type="radio" disabled + value="1" style="margin-top: 10px"/> + <label class="col-sm-2" style="width: 68%;margin-top: 7px">全国通用</label> + </div> + <div class="col-sm-3" id="belongsCity" > + <input class="col-sm-1" name="company" onclick="scopeOfApplication2()" type="radio" disabled + value="2" style="margin-top: 10px"/> + <label class="col-sm-2" style="width: 64%;margin-top: 7px">指定城市</label> + </div> + <div class="col-sm-3" id="belongsStore" > + <input class="col-sm-1" name="company" onclick="scopeOfApplication3()" type="radio" disabled + value="3" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px"/> + <label class="col-sm-2" style="width: 64%;margin-top: 6px;">指定门店</label> + </div> + </div> + </div> + + </div> + </div> + + <div class="row" id="citySelect" hidden="hidden"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-3 control-label">*指定城市: </label> + <table class="table table-bordered" style="width: 70%;margin-left: 228px;" id=""> + <thead> + <tr> + <td>省</td> + <td>市</td> + </tr> + @for(c in city){ + <td>${c.province}</td> + <td>${c.city}</td> + @} + </thead> + </table> + </div> + + </div> + </div> + + <div class="row" id="storeSelect" hidden="hidden"> + <div class="col-sm-6"> + <div class="form-group"> + <div class="col-sm-12"> + <label class="col-sm-3 control-label">*指定门店: </label> + </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> + </tr> + @for(s in store){ + <td>${s.province}</td> + <td>${s.phone}</td> + <td>${s.name}</td> + @} + </thead> + </table> + </div> + </div> + + </div> + </div> + + <div class="row"> + <div class="row btn-group-m-t"> + <div class="col-sm-10" style="margin-left: 20%;"> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" + clickFun="couponInfoDlg.close()"/> + </div> + </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/tCoupon/TCouponInfo.js"></script> +<script src="${ctxPath}/modular/system/tCoupon/TStoreInfo.js"></script> +<script type="text/javascript"> + window.onload = function() { + console.log(12312) + } + laydate.render({ + elem: '#periodOfValidity', + type: 'date', + range: true + }); + var vue1 = new Vue({ + el: '#app', + data: { + autoUpload: true,//自动上传 + imageUrl: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + this.imageUrl = URL.createObjectURL(file.raw); + couponInfoDlg.goodsCover = file.response; + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + couponInfoDlg.goodsCover = ''; + console.log(couponInfoDlg.goodsCover) + }, + }, + created() { + }, + }); + + var vue2 = new Vue({ + el: '#app1', + data: { + autoUpload: true,//自动上传 + imageUrl1: '',//模型数据,用于上传图片完成后图片预览 + dialogVisible: false + }, + methods: { + handleAvatarSuccess(res, file) { + couponInfoDlg.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() { + }, + }); + + + +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponRecord.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponRecord.html new file mode 100644 index 0000000..36db409 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponRecord.html @@ -0,0 +1,45 @@ +@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"> + <input hidden id="id" value="${id}"> + <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="type" name="状态" > + <option value="">全部</option> + <option value="2">已使用</option> + <option value="1">未使用</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#button name="搜索" icon="fa-search" clickFun="TCoupon.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TCoupon.resetSearch()"/> + </div> + </div> + <div class="hidden-xs" id="TCouponTableToolbar" role="group"> + @if(type==3){ + <#button name="核销" icon="fa-plus" clickFun="TCoupon.updateType()"/> + @} + </div> + <#table id="TCouponTable"/> + </div> + </div> + </div> + + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/tCoupon/TCouponRecord.js"></script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tEnsureIncomeRule/tEnsureIncomeRule_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tEnsureIncomeRule/tEnsureIncomeRule_edit.html index 0366fb0..edf9f97 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tEnsureIncomeRule/tEnsureIncomeRule_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tEnsureIncomeRule/tEnsureIncomeRule_edit.html @@ -31,5 +31,5 @@ </div> </div> -<script src="${ctxPath}/static/modular/system/tEnsureIncomeRule/tEnsureIncomeRule_info.js"></script> +<script src="${ctxPath}/modular/system/tEnsureIncomeRule/tEnsureIncomeRule_info.js"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TCity_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TCity_edit.html new file mode 100644 index 0000000..1d8f66c --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/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/tGoods/TGoods.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods.html new file mode 100644 index 0000000..d3d1667 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods.html @@ -0,0 +1,78 @@ +@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="1">未开始</option> + <option value="2">已开始</option> + <option value="3">已结束</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#SelectCon id="state" 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="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-plus" clickFun="TPointProducts.openAddTPointProducts()"/> + <#button name="编辑" icon="fa-edit" clickFun="TPointProducts.openEditPage()" space="true"/> + <#button name="上架" icon="fa-remove" clickFun="TPointProducts.grounding(1)" space="true"/> + <#button name="下架" icon="fa-remove" clickFun="TPointProducts.grounding(2)" space="true"/> + <#button name="查看详情" icon="fa-remove" clickFun="TPointProducts.detail()" space="true"/> + <#button name="购买详情" icon="fa-remove" clickFun="TPointProducts.payDetail()" space="true"/> + </div> + <#table id="TPointProductsTable"/> + </div> + </div> + </div> +</div> +</div> +</div> +<script src="${ctxPath}/modular/system/tGoods/tGoods.js"></script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_add.html new file mode 100644 index 0000000..2a03a9d --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_add.html @@ -0,0 +1,363 @@ +@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"/> + <#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" checked> 积分 + <input type="radio" name="redemptionMethod" value="2" > 现金+积分 + <input type="radio" name="redemptionMethod" value="3" > 现金 + </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" 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="margin-top: 2%"> + <el-upload + class="avatar-uploader" + action="/tCouponManage/uploadPic" + :on-success="handleAvatarSuccess" + accept=".jpg,.jpeg,.png,.JPG,.JPEG" + :on-remove="handleRemove" + :before-upload="beforeAvatarUpload"> + <img v-if="imageUrl" :src="imageUrl" class="avatar"> + <i v-else class="el-icon-plus avatar-uploader-icon"></i> + </el-upload> + </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="0" 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="1" 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="1" 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="TCarInfoDlg.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="TCarInfoDlg.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"> + <option value="">选择市</option> + </select> + </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="TCarInfoDlg.addSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.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 src="${ctxPath}/modular/system/tGoods/TStoreInfo.js"></script> +<script> + + function updateType(e) { + if(e==2){ + $("#b1").hide() + $("#b2").show() + }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) { + TCarInfoDlg.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() { + }, + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_edit.html new file mode 100644 index 0000000..59b18fe --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_edit.html @@ -0,0 +1,154 @@ +@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: 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" /> + + <#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: 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="">--> + @for(im in pictures){ + <img width="100%" src="${im}"> + @} + </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="TCarInfoDlg.editSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.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) { + TCarInfoDlg.goodsPicArray.push(file); + }, + beforeAvatarUpload(file) { + const isLt2M = file.size / 1024 / 1024 < 10; + if (!isLt2M) { + this.$message.error('上传图片大小不能超过 10MB!'); + } + return isLt2M; + }, + handleRemove(file, fileList) { + TCarInfoDlg.goodsPicArray = TCarInfoDlg.goodsPicArray.filter(item => { + return item.uid != file.uid; + }); + }, + }, + created() { + }, + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_pay.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_pay.html new file mode 100644 index 0000000..0f1e6ef --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/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/tGoods/TStoreList.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TStoreList.html new file mode 100644 index 0000000..7c6e1a5 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/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/WEB-INF/view/system/tIntegral/TIntegral.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TIntegral.html index 46602af..8c91b71 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TIntegral.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TIntegral.html @@ -36,12 +36,12 @@ <#NameCon id="time" name="变动时间" /> </div> <div class="col-sm-3"> - <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/> - <#button name="重置" icon="fa-trash" clickFun="TCompetition.resetSearch()" space="true"/> + <#button name="搜索" icon="fa-search" clickFun="TSite.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TSite.resetSearch()" space="true"/> </div> </div> <div class="hidden-xs" id="TCompetitionTableToolbar" role="group"> - <#button name="赠送积分" icon="fa-plus" clickFun="TCompetition.openAddTCompetition()"/> + <#button name="赠送积分" icon="fa-plus" clickFun="TSite.openAdd()"/> </div> <#table id="TSiteTable"/> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TIntegral_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TIntegral_add.html new file mode 100644 index 0000000..fd52d35 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TIntegral_add.html @@ -0,0 +1,27 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal" id="carInfoForm"> + <div class="row" id="app1"> + <#input id="phone" name="用户手机号" type="text" /> + <#input id="number" name="赠送数量" type="text" /> + + + + </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="TCarInfoDlg.addSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> + </div> +</div> + + </div> + + </div> +</div> +<script src="${ctxPath}/modular/system/tIntegral/tIntegral.js"></script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TShop_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TShop_add.html deleted file mode 100644 index 5677e41..0000000 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tIntegral/TShop_add.html +++ /dev/null @@ -1,181 +0,0 @@ -@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: 32px; - text-align: center; - } - .avatar { - width: 100px; - height: 100px; - display: block; - } - - .col-sm-12 { - margin-top: 20px; - } - - .col-sm-12 select { - height: 33px; - } -</style> -<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"> - - - <div class="form-horizontal" id="carInfoForm"> - <input hidden id="role" value="${role}"> - @if(role=='1'){ - <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.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="TCarInfoDlg.oneChangeNext(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="account" name="account"> - <option value="">选择账号</option> - </select> - </div> - </div> - @} - <#input id="name" name="门店名称" type="text"/> - <#input id="phone" name="联系电话" type="text"/> - <div class="form-group"> - <label class="col-sm-3 control-label">门店地址:</label> - <div class="col-sm-9"> - <input class="form-control" id="address" name="address" type="text" onchange="TCarInfoDlg.searchByStationName(this,1)"> - - </div> - </div> - <div class="col-sm-10" style="margin-left: 397px;width: 70%;" > - <!-- 创建地图容器--> - <div id="container" style="height: 500px;" ></div> - </div> - <#input id="time" name="营业时间" type="text"/> - <div class="form-group"> - <label class="col-sm-3 control-label">门店介绍:</label> - <div class="col-sm-9"> - <textarea id="introduce" style="width: 617px; height: 180px;"></textarea> - </div> - </div> - <#input id="userName" name="店长姓名" type="text"/> - <#input id="userPhone" name="店长手机号" type="text"/> - <#avatar id="img" name="门店封面(推荐像素722*360px)" /> - <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: 5%">*实景图片(请上传不超过五张图片): </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=""> - </div> - </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="TCarInfoDlg.addSubmit()"/> - <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> - </div> -</div> - - </div> - - </div> -</div> -<script src="${ctxPath}/modular/system/tShop/tShop_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> - laydate.render({ - elem: '#time', - range:true - }); - - var vue2 = new Vue({ - el: '#app1', - props: { - // 数量限制 - limit: { - type: Number, - default: 2 - }, - }, - data: { - autoUpload: true,//自动上传 - imageUrl1: '',//模型数据,用于上传图片完成后图片预览 - dialogVisible: false - }, - methods: { - handleAvatarSuccess(res, file) { - couponInfoDlg.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() { - }, - }); -</script> -@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user.html index 53eee27..1346bd3 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user.html @@ -1,5 +1,5 @@ @layout("/common/_container.html"){ -<link rel="stylesheet" href="${ctxPath}/static/js/layui/css/layui.css" media="all"> +<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css" media="all"> <div class="row"> <div class="col-sm-12"> <div class="ibox float-e-margins"> @@ -59,8 +59,8 @@ </div> </div> </div> -<script src="${ctxPath}/static/modular/system/user/user.js"></script> -<script src="${ctxPath}/static/js/layui/layui.js" charset="utf-8"></script> +<script src="${ctxPath}/modular/system/user/user.js"></script> +<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script> <script> laydate.render({ elem: '#beginTime' diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html index b0ff5b8..84673fc 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html @@ -57,7 +57,7 @@ </div> </div> </div> -<script src="${ctxPath}/static/modular/system/user/user_info.js"></script> +<script src="${ctxPath}/modular/system/user/user_info.js"></script> <script> laydate.render({ elem: '#birthday' diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_chpwd.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_chpwd.html index a376cc2..2b16ce3 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_chpwd.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_chpwd.html @@ -30,5 +30,5 @@ </div> </div> </div> -<script src="${ctxPath}/static/modular/system/user/user_info.js"></script> +<script src="${ctxPath}/modular/system/user/user_info.js"></script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_edit.html index 6f68f95..1528104 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_edit.html @@ -65,7 +65,7 @@ </div> </div> -<script src="${ctxPath}/static/modular/system/user/user_info.js"></script> +<script src="${ctxPath}/modular/system/user/user_info.js"></script> <script> laydate.render({ elem: '#birthday' diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_view.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_view.html index df6193c..45d82c6 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_view.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_view.html @@ -66,7 +66,7 @@ </div> </div> </div> -<script src="${ctxPath}/static/modular/system/user/user_info.js"></script> +<script src="${ctxPath}/modular/system/user/user_info.js"></script> <script> laydate.render({ elem: '#birthday' diff --git a/cloud-server-management/src/main/webapp/static/modular/system/course/course_info.js b/cloud-server-management/src/main/webapp/static/modular/system/course/course_info.js index 75f45e4..a659869 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/course/course_info.js +++ b/cloud-server-management/src/main/webapp/static/modular/system/course/course_info.js @@ -117,32 +117,7 @@ ajax.start(); }; -/** - * 修改密码 - */ -CourseInfo.chPwd = function () { - let oldPwd = $('#oldPwd').val(); - let newPwd = $('#newPwd').val(); - if(oldPwd == newPwd){ - Feng.error("新密码不能和原始密码相同"); - return - } - let patt = /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,30}/; - if(!patt.test(newPwd)){ - Feng.error("密码中必须包含大小字母、数字、特称字符,至少8个字符,最多30个字符"); - return - } - var ajax = new $ax(Feng.ctxPath + "/mgr/changePwd", function (data) { - Feng.success("修改成功!"); - }, function (data) { - Feng.error("修改失败!" + data.responseJSON.message + "!"); - }); - ajax.set("oldPwd"); - ajax.set("newPwd"); - ajax.set("rePwd"); - ajax.start(); -}; function onBodyDown(event) { if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $( diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js new file mode 100644 index 0000000..f3dfaa7 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js @@ -0,0 +1,428 @@ +/** + * 系统管理--用户管理的单例对象 + */ +let ClassRecord = { + id: "managerTable",//表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1, + courseList: null +}; +/** + * 初始化表格的列 + */ +ClassRecord.initColumn = function () { + let columns = [ + {field: 'selectItem', radio: true}, + {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '日期', field: 'classDate', align: 'center', valign: 'middle'}, + {title: '报名学员', field: 'registered', align: 'center', valign: 'middle'}, + {title: '实到学员', field: 'actualArrival', align: 'center', valign: 'middle'}, + {title: '未到学员', field: 'nonArrival', align: 'center', valign: 'middle'}, + {title: '课后练习', field: 'courseId', align: 'center', valign: 'middle', + formatter: function (v) { + if(typeof v == "undefined"){ + return '未布置'; + }else{ + return '已布置'; + } + } + }, + {title: '状态', field: 'status', align: 'center', valign: 'middle', + formatter: function (v) { + switch (v) { + case 1: + return '未开始'; + case 2: + return '已开始'; + case 3: + return '已结束'; + case 4: + return '已取消'; + } + } + }, + {title: '扣除课时', field: 'deductClassHour', align: 'center', valign: 'middle'}, + {title: '取消记录', field: 'absencesNumber', align: 'center', valign: 'middle', + formatter: function (v) { + if(typeof v == "undefined"){ + return '未上传'; + }else{ + return '已上传'; + } + } + }, + ]; + return columns; +}; + +/** + * 检查是否选中 + */ +ClassRecord.check = function () { + let selected = $('#' + this.id).bootstrapTable('getSelections'); + if (selected.length == 0) { + Feng.info("请先选中表格中的某一记录!"); + return false; + } else { + ClassRecord.seItem = selected[0]; + return true; + } +}; + + + +/** + * 点击修改按钮时 + * @param userId 管理员id + */ +ClassRecord.classRecord = function () { + if (this.check()) { + let index = layer.open({ + type: 2, + title: '查看学员', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/coursePackage/openCoursePackageStudent?id=' + this.seItem.id + }); + this.layerIndex = index; + } +}; + + + +/** + * 删除用户 + */ +ClassRecord.cancelClassSchedule = function () { + if (this.check()) { + let operation = function(){ + let ajax = new $ax(Feng.ctxPath + "/coursePackage/cancelClassSchedule", function (res) { + if(res.code == 200){ + Feng.success("取消成功!"); + ClassRecord.table.refresh(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("取消失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id", ClassRecord.seItem.id); + ajax.start(); + }; + + Feng.confirm("确定取消本次",operation); + } +}; + + + +ClassRecord.afterClassExercises = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/course/queryCourseByType", function (data) { + ClassRecord.courseList = data; + let htmlStr = + '<div class="form-horizontal">' + + ' <div class="col-sm-11" style="padding: 20px;">' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">视频类型:</label>\n' + + ' <div class="col-sm-9" style="margin-top: 6px;">\n' + + ' <span>课后练习</span>' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">视频名称:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <select class="form-control" id="courseId">' + + ' <option value="">请选择</option>'; + for (let i = 0; i < data.length; i++) { + htmlStr += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; + } + htmlStr += ' </select>' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">视频封面:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <img src="" style="height: 150px;" id="coverDrawing"/>' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">视频简介:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <textarea class="form-control" id="introduce" style="height: 200px;"></textarea>' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">可获得积分:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="form-control" id="integral" type="number" min="0">' + + ' </div>\n' + + ' </div>' + + ' </div>' + + '</div>'; + layer.open({ + type: 1 + , title: '选择课程' + , area: ['50%', '90%'] + , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset + , id: 'layerDemo' //防止重复弹出cge + , content: htmlStr + , btn: ['保存', '关闭'] + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + , yes: function () { + let courseId = $('#courseId').val(); + let integral = $('#integral').val(); + if(null == courseId || '' == courseId){ + Feng.error("请选择有效的课程"); + return + } + if(null == integral || '' == integral){ + Feng.error("请输入有效的积分"); + return + } + let ajax = new $ax(Feng.ctxPath + "/coursePackage/afterClassExercises", function (res) { + if(res.code == 200){ + Feng.success("保存成功!"); + layer.closeAll(); + RegistrationRecord.table.refresh(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("保存失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id", ClassRecord.seItem.id); + ajax.set("courseId", courseId); + ajax.set("integral", integral); + ajax.start(); + }, + }); + + $('#courseId').change(function () { + let id = $(this).val(); + for (let i = 0; i < ClassRecord.courseList.length; i++) { + if(ClassRecord.courseList[i].id == id){ + $('#coverDrawing').attr("src", ClassRecord.courseList[i].coverDrawing); + $('#introduce').text(ClassRecord.courseList[i].introduce); + } + } + }) + + $('#courseId').val(ClassRecord.seItem.courseId); + $('#integral').val(ClassRecord.seItem.integral); + + }, function (data) { + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set('type', 1); + ajax.start(); + } +}; + + +ClassRecord.cancellationRecord = function(){ + if(this.check()){ + let htmlStr = + '<div class="form-horizontal">' + + ' <div class="col-sm-11" style="padding: 20px;">' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2"></label>'+ + ' <label class="col-sm-8 control-label" style="text-align: left;">课程名称:' + $("#name").text() + '</label>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2"></label>'+ + ' <label class="col-sm-8 control-label" style="text-align: left;">*上传凭证(请上传小于5张图片):</label>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2"></label>'+ + ' <div class="col-sm-8" style="min-height: 200px;">\n' + + ' <div id="cancelClasses"></div>' + + ' <input type="file" id="file" style="display: none;"/>' + + ' <button onclick="uploadImgs()" style="width: 60px;padding: 10px; color: white;background-color: #0d8ddb;border-radius: 5px;border: none;bottom: 50%;position: absolute;"> 上传 </button>' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2"></label>'+ + ' <label class="control-label" style="text-align: left;">扣除课时数:</label>\n' + + ' <input id="deductClassHour" type="number" min="0" style="background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;">' + + ' </div>' + + ' </div>' + + '</div>'; + layer.open({ + type: 1 + , title: '上传消课记录' + , area: ['80%', '90%'] + , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset + , id: 'layerDemo' //防止重复弹出cge + , content: htmlStr + , btn: ['保存', '关闭'] + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + , yes: function () { + let cancelClasses = $('#cancelClasses').html(); + let deductClassHour = $('#deductClassHour').val(); + if(null == cancelClasses || '' == cancelClasses){ + Feng.error("请上传凭证图片"); + return + } + if(null == deductClassHour || '' == deductClassHour){ + Feng.error("请输入有效的扣除课时数"); + return + } + let div_array = $('#cancelClasses').find('div'); + let str = ''; + for (let i = 0; i < div_array.length; i++) { + let v = $($(div_array[i]).find('img')[0]).attr('src'); + str += v + ";"; + } + + let ajax = new $ax(Feng.ctxPath + "/coursePackage/cancellationRecord", function (res) { + if(res.code == 200){ + Feng.success("保存成功!"); + layer.closeAll(); + RegistrationRecord.table.refresh(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("保存失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id", ClassRecord.seItem.id); + ajax.set("cancelClasses", str.substring(0, str.length - 1)); + ajax.set("deductClassHour", deductClassHour); + ajax.start(); + }, + }); + + $('#file').on('change', function () { + var formData = new FormData() //创建一个forData + formData.append('file', $('#file')[0].files[0]) //把file添加进去 name命名为img + layer.load(); //上传loading + $.ajax({ + url: Feng.ctxPath + '/mgr/uploadImg', + data: formData, + type: "POST", + async: true, + cache: false, + contentType: false, + processData: false, + success: function(res) { + layer.closeAll('loading'); //关闭loading + $('#file').val(''); + $('#cancelClasses').append('' + + '<div style="float: left; margin: 10px; width: 200px;">' + + ' <i class="fa fa-close" style="font-size:24px;color: red;position: relative;top: 10px;right: -190px" onclick="removeImg(this)"></i>' + + ' <div style="width: 100%;"><img src="' + res + '" style="width: 100%;"/></div>' + + '</div>') + } + }) + }) + } +} + + +ClassRecord.lookCancellationRecord = function(){ + if(this.check()){ + if(ClassRecord.seItem.cancelClasses == '' || ClassRecord.seItem.cancelClasses == null){ + Feng.error("请先上传消课凭证"); + return + } + let imgs = ClassRecord.seItem.cancelClasses.split(";"); + let htmlStr = + '<div class="form-horizontal">' + + ' <div class="col-sm-11" style="padding: 20px;">' + + ' <div class="form-group">\n' + + ' <label class="col-sm-8 control-label">课程名称:' + $("#name").text() + '</label>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-8 control-label">*上传凭证(请上传小于5张图片):</label>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <div class="col-sm-8" style="min-height: 200px;">\n' + + ' <div id="cancelClasses">'; + + for (let i = 0; i < imgs.length; i++) { + htmlStr += '<div><img src="' + imgs[i] + '" style="height: 150px;"/></div> '; + } + + htmlStr += '</div>' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">扣除课时数:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="form-control" id="deductClassHour" value="' + ClassRecord.seItem.deductClassHour + '" type="number" min="0">' + + ' </div>\n' + + ' </div>' + + ' </div>' + + '</div>'; + layer.open({ + type: 1 + , title: '查看消课记录' + , area: ['50%', '90%'] + , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset + , id: 'layerDemo' //防止重复弹出cge + , content: htmlStr + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + , yes: function () { + }, + }); + } +} + +ClassRecord.manualReservation = function(){ + if(this.check()){ + let index = layer.open({ + type: 2, + title: '手动预约', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/coursePackage/openManualReservation?id=' + this.seItem.id + }); + this.layerIndex = index; + } +} + +function uploadImgs(){ + let num = $('#cancelClasses>div').length; + if(num >= 5){ + Feng.error("最多只能上传5张图片"); + return; + } + $('#file').click(); +} + + +function removeImg(e){ + $(e).parent('div').remove(); +} + + + + +ClassRecord.resetSearch = function () { + ClassRecord.search(); +} + +ClassRecord.search = function () { + let queryData = {}; + queryData['id'] = $('#id').val(); + ClassRecord.table.refresh({query: queryData}); +} + + +$(function () { + let defaultColunms = ClassRecord.initColumn(); + let table = new BSTable(ClassRecord.id, "/coursePackage/queryClassRecord", defaultColunms); + // 设置物理分页server(逻辑分页client) + table.setPaginationType("server"); + table.setQueryParams({ + id: $('#id').val() + }) + ClassRecord.table = table.init(); +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js index f0e372d..1e461a3 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js @@ -5,10 +5,10 @@ id: "managerTable",//表格id seItem: null, //选中的条目 table: null, - layerIndex: -1, - deptid:0 + layerIndex: -1 }; -let language =$("#language").val() + + /** * 初始化表格的列 */ @@ -25,7 +25,7 @@ {title: '课程有效期', field: 'validDays', align: 'center', valign: 'middle'}, {title: '支付方式', field: 'payType', align: 'center', valign: 'middle'}, {title: '排序', field: 'sort', align: 'center', valign: 'middle'}, - {title: '课程封面', field: 'status', align: 'center', valign: 'middle', + {title: '课包状态', field: 'status', align: 'center', valign: 'middle', formatter: function (v) { switch (v) { case 1: @@ -88,13 +88,17 @@ */ CoursePackage.editCoursePackage = function () { if (this.check()) { + if(CoursePackage.seItem.status != 1){ + Feng.error("该状态不能编辑"); + return + } let index = layer.open({ type: 2, title: '编辑', area: ['100%', '100%'], //宽高 fix: false, //不固定 maxmin: true, - content: Feng.ctxPath + '/course/showEditCoursePackage?id=' + this.seItem.id + content: Feng.ctxPath + '/coursePackage/openEditCoursePackage?id=' + this.seItem.id }); this.layerIndex = index; } @@ -108,7 +112,7 @@ CoursePackage.delCoursePackage = function () { if (this.check()) { let operation = function(){ - let ajax = new $ax(Feng.ctxPath + "/course/delCoursePackage", function () { + let ajax = new $ax(Feng.ctxPath + "/coursePackage/delCoursePackage", function () { Feng.success("删除成功!"); CoursePackage.table.refresh(); }, function (data) { @@ -132,11 +136,11 @@ Feng.error("不能重复操作"); return } - let ajax = new $ax(Feng.ctxPath + "/course/editCoursePackageState", function (data) { - Feng.success("下架成功!"); + let ajax = new $ax(Feng.ctxPath + "/coursePackage/editCoursePackageState", function (data) { + Feng.success(state == 1 ? '上架' : "下架" + "成功!"); CoursePackage.table.refresh(); }, function (data) { - Feng.error("下架失败!" + data.responseJSON.message + "!"); + Feng.error(state == 1 ? '上架' : "下架" + "失败!" + data.responseJSON.message + "!"); }); ajax.set("id", CoursePackage.seItem.id); ajax.set("state", state); @@ -153,7 +157,43 @@ area: ['100%', '100%'], //宽高 fix: false, //不固定 maxmin: true, - content: Feng.ctxPath + '/course/showCoursePackageDetails?id=' + this.seItem.id + content: Feng.ctxPath + '/coursePackage/showCoursePackageDetails?id=' + this.seItem.id + }); + this.layerIndex = index; + } +}; + + +CoursePackage.coursePackageDiscount = function () { + if (this.check()) { + let payType = CoursePackage.seItem.payType; + if(payType.indexOf("现金支付") < 0){ + Feng.error("该课程不能配置折扣"); + return + } + let index = layer.open({ + type: 2, + title: '折扣管理', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/coursePackage/showCoursePackageDiscount?id=' + this.seItem.id + }); + this.layerIndex = index; + } +}; + + + +CoursePackage.registrationRecord = function () { + if (this.check()) { + let index = layer.open({ + type: 2, + title: '报名信息', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/coursePackage/registrationRecord?id=' + this.seItem.id }); this.layerIndex = index; } @@ -193,7 +233,7 @@ $('#provinceCode').change(function () { let ajax = new $ax(Feng.ctxPath + "/coursePackage/queryCity", function (data) { - let htmlStr = '<option value="">全部</option>'; + let htmlStr = ''; for (let i = 0; i < data.length; i++) { htmlStr += '<option value="' + data[i].code + '">' + data[i].name + '</option>' } diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageDiscount.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageDiscount.js new file mode 100644 index 0000000..9b77955 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageDiscount.js @@ -0,0 +1,819 @@ +/** + * 用户详情对话框(可用于添加和修改对话框) + */ +var CoursePackageDiscount = { + userInfoData: {}, + coursePackagePaymentConfig: {} +}; + + + +/** + * 关闭此对话框 + */ +CoursePackageDiscount.close = function () { + parent.layer.close(window.parent.CoursePackage.layerIndex); +}; + + +/** + * 提交修改 + */ +CoursePackageDiscount.editSubmit = function () { + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/coursePackage/setCoursePackageDiscount", function (data) { + if(data.code == 200){ + Feng.success("编辑成功!"); + CoursePackageDiscount.close(); + window.parent.CoursePackage.table.refresh(); + }else{ + Feng.error(data.msg); + } + }, function (data) { + Feng.error("编辑失败!" + data.responseJSON.message + "!"); + }); + ajax.set('json', JSON.stringify(CoursePackageDiscount.coursePackagePaymentConfig)); + ajax.set('id', $('#id').val()); + ajax.start(); +}; + + + + + + +function addPrice(type){ + let index = $('#classHours').find('button[checked]').attr('index'); + if(type == 3){ + let ll = $('#limitedTimeDiscount .limitedTimeDiscount').length; + let htmlStr = + ' <div class="form-group limitedTimeDiscount" index="' + ll + '">' + + ' <div class="col-sm-2"></div>\n' + + ' <div class="col-sm-8" style="border: 1px solid; padding: 20px;">\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">折扣有效期:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="startAndEndDay" style="width: 300px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>' + + ' </div>\n' + + ' <div class="col-sm-1"><i class="fa fa-trash-o" style="font-size:24px;color: red;" onclick="removePrice(3, this)"></i></div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*折扣时间:</label>\n' + + ' <div class="col-sm-5">\n' + + ' <input class="time" style="width: 200px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>\n' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label"></label>\n' + + ' <div class="col-sm-8" style="margin-top: 6px;">\n' + + ' <input type="checkbox" name="week" value="1" onclick="addPriceValue(3, this, \'weeks\')"/> 周一 ' + + ' <input type="checkbox" name="week" value="2" onclick="addPriceValue(3, this, \'weeks\')"/> 周二 ' + + ' <input type="checkbox" name="week" value="3" onclick="addPriceValue(3, this, \'weeks\')"/> 周三 ' + + ' <input type="checkbox" name="week" value="4" onclick="addPriceValue(3, this, \'weeks\')"/> 周四 ' + + ' <input type="checkbox" name="week" value="5" onclick="addPriceValue(3, this, \'weeks\')"/> 周五 ' + + ' <input type="checkbox" name="week" value="6" onclick="addPriceValue(3, this, \'weeks\')"/> 周六 ' + + ' <input type="checkbox" name="week" value="7" onclick="addPriceValue(3, this, \'weeks\')"/> 周日 ' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-4">\n' + + ' <input type="number" class="price" onblur="addPriceValue(3, this, \'cashPayment\')" min="0" placeholder="请输入折扣后支付价格" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + ' </div>'; + + $('#limitedTimeDiscount').append(htmlStr); + let arr = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + for(let k in arr){ + if(arr[k].type == 3){ + arr[k].content.push({}) + } + } + lay('.startAndEndDay').each(function(i, e){ + laydate.render({ + elem: this + ,type: 'datetime' + ,range: true + ,done: function(value, date, endDate){ + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = obj.coursePackageDiscount[i].content; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + let arr = value.split(" - "); + obj.coursePackageDiscount[i].content[j]['startDate'] = arr[0]; + obj.coursePackageDiscount[i].content[j]['endDate'] = arr[1]; + } + } + } + } + } + }); + }); + lay('.time').each(function(i, e){ + laydate.render({ + elem: this + ,type: 'time' + ,range: true + ,done: function(value, date, endDate){ + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = obj.coursePackageDiscount[i].content; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + let arr = value.split(" - "); + obj.coursePackageDiscount[i].content[j]['startTime'] = arr[0]; + obj.coursePackageDiscount[i].content[j]['endTime'] = arr[1]; + } + } + } + } + } + }); + }); + } + if(type == 4){ + let ll = $('#complimentaryClass .complimentaryClass').length; + let htmlStr = + ' <div class="form-group complimentaryClass" index="' + ll + '">' + + ' <div class="col-sm-2"></div>\n' + + ' <div class="col-sm-8" style="border: 1px solid; padding: 20px;">\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送有效期:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="startAndEndDay" style="width: 300px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>' + + ' </div>\n' + + ' <div class="col-sm-1"><i class="fa fa-trash-o" style="font-size:24px;color: red;" onclick="removePrice(4, this)"></i></div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送时间:</label>\n' + + ' <div class="col-sm-5">\n' + + ' <input class="time" style="width: 200px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>\n' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label"></label>\n' + + ' <div class="col-sm-8" style="margin-top: 6px;">\n' + + ' <input type="checkbox" name="week" value="1" onclick="addPriceValue(4, this, \'weeks\')"/> 周一 ' + + ' <input type="checkbox" name="week" value="2" onclick="addPriceValue(4, this, \'weeks\')"/> 周二 ' + + ' <input type="checkbox" name="week" value="3" onclick="addPriceValue(4, this, \'weeks\')"/> 周三 ' + + ' <input type="checkbox" name="week" value="4" onclick="addPriceValue(4, this, \'weeks\')"/> 周四 ' + + ' <input type="checkbox" name="week" value="5" onclick="addPriceValue(4, this, \'weeks\')"/> 周五 ' + + ' <input type="checkbox" name="week" value="6" onclick="addPriceValue(4, this, \'weeks\')"/> 周六 ' + + ' <input type="checkbox" name="week" value="7" onclick="addPriceValue(4, this, \'weeks\')"/> 周日 ' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送课时数:</label>\n' + + ' <div class="col-sm-4">\n' + + ' <input type="number" class="price" onblur="addPriceValue(4, this, \'hour\')" min="0" placeholder="请输入赠送课时数" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + ' </div>'; + $('#complimentaryClass').append(htmlStr); + let arr = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + for(let k in arr){ + if(arr[k].type == 4){ + arr[k].content.push({}) + } + } + lay('.startAndEndDay').each(function(i, e){ + laydate.render({ + elem: this + ,type: 'datetime' + ,range: true + ,done: function(value, date, endDate){ + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = obj.coursePackageDiscount[i].content; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + let arr = value.split(" - "); + obj.coursePackageDiscount[i].content[j]['startDate'] = arr[0]; + obj.coursePackageDiscount[i].content[j]['endDate'] = arr[1]; + } + } + } + } + } + }); + }); + lay('.time').each(function(i, e){ + laydate.render({ + elem: this + ,type: 'time' + ,range: true + ,done: function(value, date, endDate){ + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = obj.coursePackageDiscount[i].content; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + let arr = value.split(" - "); + obj.coursePackageDiscount[i].content[j]['startTime'] = arr[0]; + obj.coursePackageDiscount[i].content[j]['endTime'] = arr[1]; + } + } + } + } + } + }); + }); + } +} + + +function removePrice(type, e){ + let index = $('#classHours').find('button[checked]').attr('index'); + let object = $(e).parent('div').parent('div').parent('div').parent('div'); + let ii = object.attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonArray = obj.coursePackageDiscount[i].content; + } + + let arr = []; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + continue + } + arr.push(jsonArray[j]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = arr; + } + } + object.remove(); +} + + +function addPriceValue(type, e, name){ + let index = $('#classHours').find('button[checked]').attr('index'); + if(type == 1){ + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let content = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + content = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + content = obj.coursePackageDiscount[i].content; + } + content[name] = parseFloat($(e).val()); + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = content; + } + } + } + if(type == 2){ + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let content = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + content = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + content = obj.coursePackageDiscount[i].content; + } + content[name] = parseFloat($(e).val()); + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = content; + } + } + } + if(type == 3){ + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonArray = obj.coursePackageDiscount[i].content; + } + + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + if('weeks' == name){ + let weeks = jsonArray[j].weeks; + let v = parseInt($(e).val()); + if(null != weeks && typeof weeks != "undefined"){ + if(e.checked){ + weeks.push(v); + }else{ + let arr = []; + for (let k = 0; k < weeks.length; k++) { + if(weeks[k] == v){ + continue + } + arr.push(weeks[k]); + } + weeks = arr; + } + }else{ + weeks = [v]; + } + jsonArray[j].weeks = weeks; + }else{ + jsonArray[j][name] = parseFloat($(e).val()); + } + } + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = jsonArray; + } + } + } + if(type == 4){ + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonArray = obj.coursePackageDiscount[i].content; + } + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + if('weeks' == name){ + let weeks = jsonArray[j].weeks; + let v = parseInt($(e).val()); + if(null != weeks && typeof weeks != "undefined"){ + if(e.checked){ + weeks.push(v); + }else{ + let arr = []; + for (let k = 0; k < weeks.length; k++) { + if(weeks[k] == v){ + continue + } + arr.push(weeks[k]); + } + weeks = arr; + } + }else{ + weeks = [v]; + } + jsonArray[j].weeks = weeks; + }else{ + jsonArray[j][name] = parseFloat($(e).val()); + } + } + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = jsonArray; + } + } + } +} + + +function selectedPperiod(e){ + $('#classHours').find('button[checked]').attr('style', 'width: 60px;height: 30px;border: none;border-radius: 5px;'); + $('#classHours').find('button[checked]').removeAttr('checked'); + if(typeof e != "undefined"){ + $(e).attr('style', 'width: 60px;height: 30px;background-color: #0086F6;border: none;border-radius: 5px;color: white;'); + $(e).attr('checked', true); + }else{ + $($('#classHours').find('button')[0]).attr('style', 'width: 60px;height: 30px;background-color: #0086F6;border: none;border-radius: 5px;color: white;'); + $($('#classHours').find('button')[0]).attr('checked', true); + } + + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + $('#payment').text(obj.payment); + $('#cashPayment').text(obj.cashPayment); + + $('#memberDiscount').html(''); + $('#renewalOffer').html(''); + $('#limitedTimeDiscount').html(''); + $('#complimentaryClass').html(''); + let objv = CoursePackageDiscount.coursePackagePaymentConfig[index]; + $('input[name="type"]').each(function (i, e) { + e.checked = false; + let v = $(e).val(); + for (let i = 0; i < objv.coursePackageDiscount.length; i++) { + if(v == objv.coursePackageDiscount[i].type){ + $(e).click(); + } + } + }) +} + + + + +$(function () { + CoursePackageDiscount.coursePackagePaymentConfig = JSON.parse($('#coursePackagePaymentConfig').val()); + let htmlStr = ''; + for (let i = 0; i < CoursePackageDiscount.coursePackagePaymentConfig.length; i++) { + let obj = CoursePackageDiscount.coursePackagePaymentConfig[i]; + if(i == 0){ + htmlStr += '<button checked onclick="selectedPperiod(this)" index="' + i + '" style="width: 60px;height: 30px;background-color: #0086F6;border: none;border-radius: 5px;color: white;">' + obj.classHours + '课时</button> '; + }else{ + htmlStr += '<button onclick="selectedPperiod(this)" index="' + i + '" style="width: 60px;height: 30px;border: none;border-radius: 5px;">' + obj.classHours + '课时</button> '; + } + } + $('#classHours').html(htmlStr); + + $('input[name="type"]').click(function () { + let v = $(this).val(); + let index = $('#classHours').find('button[checked]').attr('index'); + if(this.checked && v == '1'){ + let discountMember = true; + let hh = '<div class="hr-line-dashed"></div>' + + '<h3>会员折扣</h3>\n' + + ' <div class="form-group">\n' + + ' <div class="col-sm-2"></div>'+ + ' <div class="col-sm-10">' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-3">\n' + + ' <input type="number" min="0" value="'; + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(v == obj.coursePackageDiscount[i].type){ + let jsonObject = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonObject = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonObject = obj.coursePackageDiscount[i].content; + } + hh += (null == jsonObject.discountMember ? '' : jsonObject.discountMember); + discountMember = false; + } + } + hh += '" placeholder="请输入会员支付价格" onblur="addPriceValue(1, this, \'discountMember\')" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>'+ + ' </div>'; + + $('#memberDiscount').html(hh); + if(discountMember){ + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount.push({ + type: 1, + content:{ + discountMember: null + } + }); + } + }else if(!this.checked && v == '1'){ + $('#memberDiscount').html(''); + let datas = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + let arra = []; + for (let i = 0; i < datas.length; i++){ + if(datas[i].type == v){ + continue; + } + arra.push(datas[i]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount = arra; + } + if(this.checked && v == '2'){ + let continuingMember = true; + let hh = '<div class="hr-line-dashed"></div>' + + '<h3>续课优惠</h3>\n' + + ' <div class="form-group">\n' + + ' <div class="col-sm-2"></div>'+ + ' <div class="col-sm-10">' + + ' <label class="col-sm-2 control-label">会员续课:</label>\n' + + ' <div class="col-sm-3">\n' + + ' </div>\n' + + ' <label class="col-sm-2 control-label">用户续课:</label>\n' + + ' <div class="col-sm-3">\n' + + ' </div>\n' + + ' </div>'+ + ' </div>' + + ' <div class="form-group">\n' + + ' <div class="col-sm-2"></div>'+ + ' <div class="col-sm-10">' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-3">\n' + + ' <input type="number" min="0" value="'; + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(v == obj.coursePackageDiscount[i].type){ + let jsonObject = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonObject = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonObject = obj.coursePackageDiscount[i].content; + } + hh += (null == jsonObject.continuingMember ? '' : jsonObject.continuingMember); + continuingMember = false; + } + } + hh += '" placeholder="请输入会员支付价格" onblur="addPriceValue(2, this, \'continuingMember\')" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-3">\n' + + ' <input type="number" min="0" value="'; + let obje = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obje.coursePackageDiscount.length; i++) { + if(v == obje.coursePackageDiscount[i].type){ + let jsonObject = null; + if(typeof obje.coursePackageDiscount[i].content == "string"){ + jsonObject = JSON.parse(obje.coursePackageDiscount[i].content); + }else{ + jsonObject = obje.coursePackageDiscount[i].content; + } + hh += (null == jsonObject.continuingUser ? '' : jsonObject.continuingUser); + } + } + hh += '" placeholder="请输入用户支付价格" onblur="addPriceValue(2, this, \'continuingUser\')" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>'+ + ' </div>'; + $('#renewalOffer').html(hh); + if(continuingMember){ + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount.push({ + type: 2, + content: { + continuingMember: null, + continuingUser: null + } + }) + } + }else if(!this.checked && v == '2'){ + $('#renewalOffer').html(''); + let datas = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + let arra = []; + for (let i = 0; i < datas.length; i++){ + if(datas[i].type == v){ + continue; + } + arra.push(datas[i]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount = arra; + } + if(this.checked && v == '3'){ + let data_value = true; + let hh = '<div class="hr-line-dashed"></div>' + + '<span style="font-size: 16px;font-weight: 500;">限时折扣</span> <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice(3)"></i>\n'; + let obje = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obje.coursePackageDiscount.length; i++) { + if(v == obje.coursePackageDiscount[i].type){ + data_value = false + let jsonArray = null; + if(typeof obje.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obje.coursePackageDiscount[i].content); + }else{ + jsonArray = obje.coursePackageDiscount[i].content; + } + + for (let j = 0; j < jsonArray.length; j++) { + hh += '' + + ' <div class="form-group limitedTimeDiscount" index="' + j + '">' + + ' <div class="col-sm-2"></div>\n' + + ' <div class="col-sm-8" style="border: 1px solid; padding: 20px;">\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">折扣有效期:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="startAndEndDay" value="' + (jsonArray[j].startDate + " - " + jsonArray[j].endDate) + '" style="width: 300px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>' + + ' </div>\n' + + ' <div class="col-sm-1"><i class="fa fa-trash-o" style="font-size:24px;color: red;" onclick="removePrice(3, this)"></i></div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*折扣时间:</label>\n' + + ' <div class="col-sm-5">\n' + + ' <input class="time" value="' + jsonArray[j].startTime + " - " + jsonArray[j].endTime + '" style="width: 200px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>\n' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label"></label>\n' + + ' <div class="col-sm-8" style="margin-top: 6px;">\n' + + ' <input type="checkbox" name="week" value="1"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 1){ + hh += 'checked'; + } + } + hh += '/> 周一 ' + + ' <input type="checkbox" name="week" value="2"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 2){ + hh += 'checked'; + } + } + hh += '/> 周二 ' + + ' <input type="checkbox" name="week" value="3"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 3){ + hh += 'checked'; + } + } + hh += '/> 周三 ' + + ' <input type="checkbox" name="week" value="4"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 4){ + hh += 'checked'; + } + } + hh += '/> 周四 ' + + ' <input type="checkbox" name="week" value="5"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 5){ + hh += 'checked'; + } + } + hh += '/> 周五 ' + + ' <input type="checkbox" name="week" value="6"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 6){ + hh += 'checked'; + } + } + hh += '/> 周六 ' + + ' <input type="checkbox" name="week" value="7"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 7){ + hh += 'checked'; + } + } + hh += '/> 周日 ' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-4">\n' + + ' <input type="number" min="0" value="' + jsonArray[j].cashPayment + '" onblur="addPriceValue(3, this, \'cashPayment\')" placeholder="请输入折扣后支付价格" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + ' </div>'; + } + + } + } + $('#limitedTimeDiscount').html(hh); + if(data_value){ + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount.push({ + type: 3, + content: [] + }) + } + }else if(!this.checked && v == '3'){ + $('#limitedTimeDiscount').html(''); + let datas = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + let arra = []; + for (let i = 0; i < datas.length; i++){ + if(datas[i].type == v){ + continue; + } + arra.push(datas[i]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount = arra; + } + if(this.checked && v == '4'){ + let data_value = true; + let hh = + '<div class="hr-line-dashed"></div>' + + '<span style="font-size: 16px;font-weight: 500;">赠送课时</span> <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice(4)"></i>\n'; + let obje = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obje.coursePackageDiscount.length; i++) { + if (v == obje.coursePackageDiscount[i].type) { + data_value = false; + let jsonArray = null; + if(typeof obje.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obje.coursePackageDiscount[i].content); + }else{ + jsonArray = obje.coursePackageDiscount[i].content; + } + for (let j = 0; j < jsonArray.length; j++) { + hh += + ' <div class="form-group complimentaryClass" index="' + j + '">' + + ' <div class="col-sm-2"></div>\n' + + ' <div class="col-sm-8" style="border: 1px solid; padding: 20px;">\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送有效期:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="startAndEndDay" value="' + (jsonArray[j].startDate + " - " + jsonArray[j].endDate) + '" style="width: 300px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>' + + ' </div>\n' + + ' <div class="col-sm-1"><i class="fa fa-trash-o" style="font-size:24px;color: red;" onclick="removePrice(4, this)"></i></div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送时间:</label>\n' + + ' <div class="col-sm-5">\n' + + ' <input class="time" value="' + jsonArray[j].startTime + " - " + jsonArray[j].endTime + '" style="width: 200px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>\n' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label"></label>\n' + + ' <div class="col-sm-8" style="margin-top: 6px;">\n' + + ' <input type="checkbox" name="week" value="1"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 1){ + hh += 'checked'; + } + } + hh += '/> 周一 ' + + ' <input type="checkbox" name="week" value="2"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 2){ + hh += 'checked'; + } + } + hh += '/> 周二 ' + + ' <input type="checkbox" name="week" value="3"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 3){ + hh += 'checked'; + } + } + hh += '/> 周三 ' + + ' <input type="checkbox" name="week" value="4"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 4){ + hh += 'checked'; + } + } + hh += '/> 周四 ' + + ' <input type="checkbox" name="week" value="5"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 5){ + hh += 'checked'; + } + } + hh += '/> 周五 ' + + ' <input type="checkbox" name="week" value="6"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 6){ + hh += 'checked'; + } + } + hh += '/> 周六 ' + + ' <input type="checkbox" name="week" value="7"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 7){ + hh += 'checked'; + } + } + hh += '/> 周日 ' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送课时数:</label>\n' + + ' <div class="col-sm-4">\n' + + ' <input type="number" value="' + jsonArray[j].hour + '" onblur="addPriceValue(4, this, \'hour\')" min="0" placeholder="请输入赠送课时数" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + ' </div>'; + } + } + } + $('#complimentaryClass').html(hh); + if(data_value){ + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount.push({ + type: 4, + content: [] + }) + } + }else if(!this.checked && v == '4'){ + $('#complimentaryClass').html(''); + let datas = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + let arra = []; + for (let i = 0; i < datas.length; i++){ + if(datas[i].type == v){ + continue; + } + arra.push(datas[i]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount = arra; + } + }) + + + selectedPperiod(); +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js new file mode 100644 index 0000000..6cb31aa --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js @@ -0,0 +1,159 @@ +/** + * 系统管理--用户管理的单例对象 + */ +let CoursePackageStudent = { + id: "managerTable",//表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; + + +/** + * 初始化表格的列 + */ +CoursePackageStudent.initColumn = function () { + let columns = [ + {field: 'selectItem', radio: true}, + {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '所属用户', field: 'userName', align: 'center', valign: 'middle'}, + {title: '姓名', field: 'studentName', align: 'center', valign: 'middle'}, + {title: '联系电话', field: 'phone', align: 'center', valign: 'middle'}, + {title: '年龄', field: 'age', align: 'center', valign: 'middle'}, + {title: '性别', field: 'sex', align: 'center', valign: 'middle', + formatter: function (v) { + if(v == 1){ + return '男'; + }else{ + return '女'; + } + } + }, + {title: '到课状态', field: 'signInOrNot', align: 'center', valign: 'middle', + formatter: function (v) { + switch (v) { + case 0: + return '未到'; + case 1: + return '已到'; + } + } + }, + {title: '预定状态', field: 'reservationStatus', align: 'center', valign: 'middle', + formatter: function (v) { + if(v == 0){ + return '已取消'; + }else{ + return '正常'; + } + } + }, + ]; + return columns; +}; + +/** + * 检查是否选中 + */ +CoursePackageStudent.check = function () { + let selected = $('#' + this.id).bootstrapTable('getSelections'); + if (selected.length == 0) { + Feng.info("请先选中表格中的某一记录!"); + return false; + } else { + CoursePackageStudent.seItem = selected[0]; + return true; + } +}; + + + + +/** + * 取消预约 + */ +CoursePackageStudent.cancelReservation = function () { + if (this.check()) { + if(CoursePackageStudent.seItem.reservationStatus == 0){ + Feng.error("不能重复操作"); + return + } + if(CoursePackageStudent.seItem.signInOrNot == 1){ + Feng.error("不能取消预约操作"); + return + } + let operation = function(){ + let ajax = new $ax(Feng.ctxPath + "/coursePackage/cancelReservation", function (res) { + if(res.code == 200){ + Feng.success("取消成功!"); + CoursePackageStudent.table.refresh(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("取消失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id", CoursePackageStudent.seItem.id); + ajax.start(); + }; + Feng.confirm("是否取消预约",operation); + } +}; + + +CoursePackageStudent.absence = function () { + if (this.check()) { + if(CoursePackageStudent.seItem.signInOrNot == 0){ + Feng.error("不能重复操作"); + return + } + if(CoursePackageStudent.seItem.reservationStatus == 0){ + Feng.error("该数据已取消预约"); + return + } + let operation = function(){ + let ajax = new $ax(Feng.ctxPath + "/coursePackage/setAbsenceStatus", function (res) { + if(res.code == 200){ + Feng.success("修改成功!"); + CoursePackageStudent.table.refresh(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("修改失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id", CoursePackageStudent.seItem.id); + ajax.start(); + }; + Feng.confirm("是否标注未到",operation); + } +}; + + + + +CoursePackageStudent.resetSearch = function () { + $('#userName').val(''); + $('#studentName').val(''); + CoursePackageStudent.search(); +} + +CoursePackageStudent.search = function () { + let queryData = {}; + queryData['id'] = $('#id').val(); + queryData['userName'] = $('#userName').val(); + queryData['studentName'] = $('#studentName').val(); + CoursePackageStudent.table.refresh({query: queryData}); +} + + +$(function () { + let defaultColunms = CoursePackageStudent.initColumn(); + let table = new BSTable(CoursePackageStudent.id, "/coursePackage/queryCoursePackageStudentList", defaultColunms); + // 设置物理分页server(逻辑分页client) + table.setPaginationType("server"); + table.setQueryParams({ + id: $('#id').val() + }) + CoursePackageStudent.table = table.init(); +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js new file mode 100644 index 0000000..23da9f0 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js @@ -0,0 +1,430 @@ +/** + * 用户详情对话框(可用于添加和修改对话框) + */ +var CoursePackageInfo = { + userInfoData: {}, +}; + + + +/** + * 关闭此对话框 + */ +CoursePackageInfo.close = function () { + parent.layer.close(window.parent.CoursePackage.layerIndex); +}; + + +/** + * 提交添加用户 + */ +CoursePackageInfo.addSubmit = function () { + let province = $('#provinceCode option:checked').text(); + let provinceCode = $('#provinceCode').val(); + let city = $('#cityCode option:checked').text(); + let cityCode = $('#cityCode').val(); + let storeId = $('#storeId').val(); + let coursePackageTypeId = $('#coursePackageTypeId').val(); + let name = $('#name').val(); + let siteId = $('#siteId').val(); + let coachId = $('#coachId').val(); + let maxSubscribeNumber = $('#maxSubscribeNumber').val(); + let classStartTime = $('#classStartTime').val(); + let classWeeks = ''; + $('input[name="classWeeks"]:checked').each(function (index, e) { + classWeeks += $(e).val() + ";"; + }) + let coverDrawing = $('#coverDrawing').val(); + let detailDrawing = $('#detailDrawing').val(); + let introduceDrawing = $('#introduceDrawing').val(); + let sort = $('#sort').val(); + let validDays = $('#validDays').val(); + let price = []; + $('#price>.form-group').each(function (i, e) { + let classHours = $($(e).find(".classNumber_span input[class='classNumber']")[0]).val(); + let cash = $($(e).find(".cash_span input[class='cash']")[0]).val(); + let paiCoin = $($(e).find(".paiCoin_span input[class='paiCoin']")[0]).val(); + price.push({ + classHours: classHours, + cashPayment: typeof cash == "undefined" ? 0 : cash, + playPaiCoin: typeof paiCoin == "undefined" ? 0 : paiCoin + }) + }); + if(null == provinceCode || '' == provinceCode){ + Feng.error("所在省不能为空"); + return + } + if(null == cityCode || '' == cityCode){ + Feng.error("所在市不能为空"); + return + } + if(null == storeId || '' == storeId){ + Feng.error("所属门店不能为空"); + return + } + if(null == coursePackageTypeId || '' == coursePackageTypeId){ + Feng.error("课程类型不能为空"); + return + } + if(null == name || '' == name){ + Feng.error("课包名称不能为空"); + return + } + if(null == siteId || '' == siteId){ + Feng.error("上课场地不能为空"); + return + } + if(null == coachId || '' == coachId){ + Feng.error("授课教师不能为空"); + return + } + if(null == maxSubscribeNumber || '' == maxSubscribeNumber){ + Feng.error("最多预约人数不能为空"); + return + } + if(null == classStartTime || '' == classStartTime){ + Feng.error("上课时间不能为空"); + return + } + if(null == classWeeks || '' == classWeeks){ + Feng.error("上课时间不能为空"); + return + } + classWeeks = classWeeks.substring(0, classWeeks.length - 1); + + if(null == coverDrawing || '' == coverDrawing){ + Feng.error("课包封面不能为空"); + return + } + if(null == detailDrawing || '' == detailDrawing){ + Feng.error("详情页不能为空"); + return + } + if(null == introduceDrawing || '' == introduceDrawing){ + Feng.error("课包介绍不能为空"); + return + } + if(null == validDays || '' == validDays){ + Feng.error("课时有效期不能为空"); + return + } + + let obj = { + province: province, + provinceCode: provinceCode, + city: city, + cityCode: cityCode, + storeId: storeId, + coursePackageTypeId: coursePackageTypeId, + name: name, + siteId: siteId, + coachId: coachId, + maxSubscribeNumber: maxSubscribeNumber, + classStartTime: classStartTime.split(" - ")[0], + classEndTime: classStartTime.split(" - ")[1], + classWeeks: classWeeks, + coverDrawing: coverDrawing, + detailDrawing: detailDrawing, + introduceDrawing: introduceDrawing, + sort: sort, + validDays: validDays, + coursePackagePaymentConfig: JSON.stringify(price) + } + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/coursePackage/addCoursePackage", function (data) { + if(data.code == 200){ + Feng.success("添加成功!"); + CoursePackageInfo.close(); + window.parent.CoursePackage.table.refresh(); + }else{ + Feng.error(data.msg); + } + }, function (data) { + Feng.error("添加失败!" + data.responseJSON.message + "!"); + }); + ajax.set(obj); + ajax.start(); +}; + +/** + * 提交修改 + */ +CoursePackageInfo.editSubmit = function () { + let id = $('#id').val(); + let province = $('#provinceCode option:checked').text(); + let provinceCode = $('#provinceCode').val(); + let city = $('#cityCode option:checked').text(); + let cityCode = $('#cityCode').val(); + let storeId = $('#storeId').val(); + let coursePackageTypeId = $('#coursePackageTypeId').val(); + let name = $('#name').val(); + let siteId = $('#siteId').val(); + let coachId = $('#coachId').val(); + let maxSubscribeNumber = $('#maxSubscribeNumber').val(); + let classStartTime = $('#classStartTime').val(); + let classWeeks = ''; + $('input[name="classWeeks"]:checked').each(function (index, e) { + classWeeks += $(e).val() + ";"; + }) + let coverDrawing = $('#coverDrawing').val(); + let detailDrawing = $('#detailDrawing').val(); + let introduceDrawing = $('#introduceDrawing').val(); + let sort = $('#sort').val(); + let validDays = $('#validDays').val(); + let price = []; + $('#price>.form-group').each(function (i, e) { + let classHours = $($(e).find(".classNumber_span input[class='classNumber']")[0]).val(); + let cash = $($(e).find(".cash_span input[class='cash']")[0]).val(); + let paiCoin = $($(e).find(".paiCoin_span input[class='paiCoin']")[0]).val(); + price.push({ + classHours: classHours, + cashPayment: typeof cash == "undefined" ? 0 : cash, + playPaiCoin: typeof paiCoin == "undefined" ? 0 : paiCoin + }) + }); + if(null == provinceCode || '' == provinceCode){ + Feng.error("所在省不能为空"); + return + } + if(null == cityCode || '' == cityCode){ + Feng.error("所在市不能为空"); + return + } + if(null == storeId || '' == storeId){ + Feng.error("所属门店不能为空"); + return + } + if(null == coursePackageTypeId || '' == coursePackageTypeId){ + Feng.error("课程类型不能为空"); + return + } + if(null == name || '' == name){ + Feng.error("课包名称不能为空"); + return + } + if(null == siteId || '' == siteId){ + Feng.error("上课场地不能为空"); + return + } + if(null == coachId || '' == coachId){ + Feng.error("授课教师不能为空"); + return + } + if(null == maxSubscribeNumber || '' == maxSubscribeNumber){ + Feng.error("最多预约人数不能为空"); + return + } + if(null == classStartTime || '' == classStartTime){ + Feng.error("上课时间不能为空"); + return + } + if(null == classWeeks || '' == classWeeks){ + Feng.error("上课时间不能为空"); + return + } + classWeeks = classWeeks.substring(0, classWeeks.length - 1); + + if(null == coverDrawing || '' == coverDrawing){ + Feng.error("课包封面不能为空"); + return + } + if(null == detailDrawing || '' == detailDrawing){ + Feng.error("详情页不能为空"); + return + } + if(null == introduceDrawing || '' == introduceDrawing){ + Feng.error("课包介绍不能为空"); + return + } + if(null == validDays || '' == validDays){ + Feng.error("课时有效期不能为空"); + return + } + + let obj = { + id: id, + province: province, + provinceCode: provinceCode, + city: city, + cityCode: cityCode, + storeId: storeId, + coursePackageTypeId: coursePackageTypeId, + name: name, + siteId: siteId, + coachId: coachId, + maxSubscribeNumber: maxSubscribeNumber, + classStartTime: classStartTime.split(" - ")[0], + classEndTime: classStartTime.split(" - ")[1], + classWeeks: classWeeks, + coverDrawing: coverDrawing, + detailDrawing: detailDrawing, + introduceDrawing: introduceDrawing, + sort: sort, + validDays: validDays, + coursePackagePaymentConfig: JSON.stringify(price) + } + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/coursePackage/updateCoursePackage", function (data) { + if(data.code == 200){ + Feng.success("编辑成功!"); + CoursePackageInfo.close(); + window.parent.CoursePackage.table.refresh(); + }else{ + Feng.error(data.msg); + } + }, function (data) { + Feng.error("编辑失败!" + data.responseJSON.message + "!"); + }); + ajax.set(obj); + ajax.start(); +}; + + + + +function queryStore() { + let ajax = new $ax(Feng.ctxPath + "/coursePackage/queryStore", function (data) { + let htmlStr = ''; + for (let i = 0; i < data.length; i++) { + htmlStr += '<option value="' + data[i].id + '">' + data[i].name + '</option>' + } + $('#storeId').html(htmlStr); + + querySite(); + }, function (data) { + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set("cityCode", $('#cityCode').val()); + ajax.start(); +} + + + +function querySite(){ + let ajax = new $ax(Feng.ctxPath + "/coursePackage/querySite", function (data) { + let htmlStr = ''; + for (let i = 0; i < data.length; i++) { + htmlStr += '<option value="' + data[i].id + '">' + data[i].name + '</option>' + } + $('#siteId').html(htmlStr); + }, function (data) { + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set("storeId", $('#storeId').val()); + ajax.start(); +} + + +function queryCoach(){ + let ajax = new $ax(Feng.ctxPath + "/coursePackage/queryCoach", function (data) { + let htmlStr = ''; + for (let i = 0; i < data.length; i++) { + htmlStr += '<option value="' + data[i].id + '">' + data[i].name + '</option>' + } + $('#coachId').html(htmlStr); + }, function (data) { + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set("cityCode", $('#cityCode').val()); + ajax.start(); +} + + +function addPrice(){ + let cash = false; + let paiCoin = false; + $('input[name="payType"]:checked').each(function (index, e) { + let v = $(e).val(); + if(v == 1){ + cash = true; + } + if(v == 2){ + paiCoin = true; + } + }) + + let htmlStr = '' + + '<div class="form-group">\n' + + ' <label class="col-sm-3 control-label">*课时数:</label>\n' + + ' <div class="col-sm-8">\n' + + ' <span class="classNumber_span"><input class="classNumber" type="number" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> </span> <span class="cash_span">\n'; + if(cash){ + htmlStr += '现金支付:<input class="cash" type="number" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> ¥ \n'; + } + htmlStr += '</span> <span class="paiCoin_span">'; + if(paiCoin){ + htmlStr += '玩湃币支付:<input class="paiCoin" type="number" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> 币 \n'; + } + htmlStr += '</span> <i class="fa fa-trash-o" style="font-size:24px" onclick="removePrice(this)"></i>\n' + + '</div>\n' + + '</div>'; + $('#price').append(htmlStr); +} + + +function removePrice(e){ + $(e).parent('div').parent('div').remove(); +} + + +$(function () { + $('#provinceCode').change(function () { + let ajax = new $ax(Feng.ctxPath + "/coursePackage/queryCity", function (data) { + let htmlStr = ''; + for (let i = 0; i < data.length; i++) { + htmlStr += '<option value="' + data[i].code + '">' + data[i].name + '</option>' + } + $('#cityCode').html(htmlStr); + + queryStore(); + queryCoach(); + }, function (data) { + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set("code", $(this).val()); + ajax.start(); + }) + + + $('#cityCode').change(function () { + queryStore(); + }) + + + $('#storeId').change(function () { + querySite(); + }) + + $('input[name="payType"]').click(function () { + $('input[name="payType"]').each(function (index, e) { + let v = $(e).val(); + if(v == 1) { + if (e.checked) { + $('span[class="cash_span"]').each(function (index, e) { + $(e).html('现金支付:<input class="cash" type="number" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> ¥ '); + }) + } else { + $('span[class="cash_span"]').each(function (index, e) { + $(e).html(''); + }) + } + } + + if(v == 2){ + if (e.checked) { + $('span[class="paiCoin_span"]').each(function (index, e) { + $(e).html('玩湃币支付:<input class="paiCoin" type="number" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> 币 ') + }) + } else { + $('span[class="paiCoin_span"]').each(function (index, e) { + $(e).html(''); + }) + } + } + }) + }) + + +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/examineCoursePackage.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/examineCoursePackage.js new file mode 100644 index 0000000..3e9d1a6 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/examineCoursePackage.js @@ -0,0 +1,185 @@ +/** + * 系统管理--用户管理的单例对象 + */ +let ExamineCoursePackage = { + id: "managerTable",//表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; + + + + +/** + * 初始化表格的列 + */ +ExamineCoursePackage.initColumn = function () { + let columns = [ + {field: 'selectItem', radio: true}, + {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '所在省市', field: 'city', align: 'center', valign: 'middle'}, + {title: '所属门店', field: 'store', align: 'center', valign: 'middle'}, + {title: '课包类型', field: 'coursePackageType', align: 'center', valign: 'middle'}, + {title: '课包名称', field: 'name', align: 'center', valign: 'middle'}, + {title: '最多预约人数', field: 'maxSubscribeNumber', align: 'center', valign: 'middle'}, + {title: '课程有效期', field: 'validDays', align: 'center', valign: 'middle'}, + {title: '支付方式', field: 'payType', align: 'center', valign: 'middle'}, + {title: '排序', field: 'sort', align: 'center', valign: 'middle'}, + {title: '审核状态', field: 'auditStatus', align: 'center', valign: 'middle', + formatter: function (v) { + switch (v) { + case 1: + return '待审核'; + case 3: + return '未通过'; + } + } + } + ]; + return columns; +}; + +/** + * 检查是否选中 + */ +ExamineCoursePackage.check = function () { + let selected = $('#' + this.id).bootstrapTable('getSelections'); + if (selected.length == 0) { + Feng.info("请先选中表格中的某一记录!"); + return false; + } else { + ExamineCoursePackage.seItem = selected[0]; + return true; + } +}; + + +/** + * 点击修改按钮时 + * @param userId 管理员id + */ +ExamineCoursePackage.examineCoursePackage = function () { + if (this.check()) { + if(ExamineCoursePackage.seItem.auditStatus != 1){ + Feng.error("不能重复审核"); + return + } + let htmlStr = + '<div class="form-horizontal">' + + ' <div class="col-sm-11" style="padding: 10px;">' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">*审核状态:</label>\n' + + ' <div class="col-sm-8">\n' + + ' <input name="auditStatus" type="radio" value="2"/> 通过 ' + + ' <input name="auditStatus" type="radio" value="3"/> 拒绝 ' + + ' </div>' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">*拒绝理由:</label>\n' + + ' <div class="col-sm-8">\n' + + ' <textarea id="authRemark" style="width: 100%;height: 200px;" placeholder="请输入拒绝理由"></textarea>' + + ' </div>' + + ' </div>' + + ' </div>' + + '</div>'; + layer.open({ + type: 1 + , title: '课包审核' + , area: ['800px', '400px'] + , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset + , id: 'layerDemo' //防止重复弹出cge + , content: htmlStr + , btn: ['保存', '关闭'] + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + , yes: function () { + let auditStatus = $('input[name="auditStatus"]:checked').val(); + if(typeof auditStatus == "undefined"){ + Feng.error("请选择审核结果"); + return + } + let authRemark = $('#authRemark').text(); + if(3 == auditStatus && '' == authRemark){ + Feng.error("请输入拒绝理由"); + return + } + let ajax = new $ax(Feng.ctxPath + "/coursePackage/setCoursePackageAuditStatus", function (res) { + if(res.code == 200){ + Feng.success("审核成功!"); + layer.closeAll(); + ExamineCoursePackage.table.refresh(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("审核失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id", ExamineCoursePackage.seItem.id); + ajax.set("auditStatus", auditStatus); + ajax.set("authRemark", authRemark); + ajax.start(); + }, + }); + } +}; + + +ExamineCoursePackage.detailsExamineCoursePackage = function () { + if (this.check()) { + let index = layer.open({ + type: 2, + title: '详情', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/coursePackage/showExamineCoursePackageDetails?id=' + this.seItem.id + }); + this.layerIndex = index; + } +}; + + + +ExamineCoursePackage.resetSearch = function () { + $("#provinceCode").val(""); + $("#cityCode").val(""); + $("#coursePackageTypeId").val(""); + $("#name").val(""); + $("#auditStatus").val(""); + ExamineCoursePackage.search(); +} + +ExamineCoursePackage.search = function () { + let queryData = {}; + queryData['provinceCode'] = $("#provinceCode").val(); + queryData['cityCode'] = $("#cityCode").val(); + queryData['coursePackageTypeId'] = $("#coursePackageTypeId").val(); + queryData['name'] = $("#name").val(); + queryData['auditStatus'] = $("#auditStatus").val(); + ExamineCoursePackage.table.refresh({query: queryData}); +} + + +$(function () { + let defaultColunms = ExamineCoursePackage.initColumn(); + let table = new BSTable(ExamineCoursePackage.id, "/coursePackage/queryExamineCoursePackageLists", defaultColunms); + // 设置物理分页server(逻辑分页client) + table.setPaginationType("server"); + ExamineCoursePackage.table = table.init(); + + + $('#provinceCode').change(function () { + let ajax = new $ax(Feng.ctxPath + "/coursePackage/queryCity", function (data) { + let htmlStr = ''; + for (let i = 0; i < data.length; i++) { + htmlStr += '<option value="' + data[i].code + '">' + data[i].name + '</option>' + } + $('#cityCode').html(htmlStr); + }, function (data) { + Feng.error("获取失败!" + data.responseJSON.message + "!"); + }); + ajax.set("code", $(this).val()); + ajax.start(); + }) +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/examineCoursePackage_info.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/examineCoursePackage_info.js new file mode 100644 index 0000000..5a114e0 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/examineCoursePackage_info.js @@ -0,0 +1,43 @@ +/** + * 用户详情对话框(可用于添加和修改对话框) + */ +var ExamineCoursePackageInfo = { + userInfoData: {}, +}; + + + +/** + * 关闭此对话框 + */ +ExamineCoursePackageInfo.close = function () { + parent.layer.close(window.parent.ExamineCoursePackage.layerIndex); +}; + + +ExamineCoursePackageInfo.addSubmit = function () { + let auditStatus = $('input[name="auditStatus"]:checked').val();; + if(typeof auditStatus == "undefined"){ + Feng.error("请选择审核结果"); + return + } + let authRemark = $('#authRemark').text(); + if(3 == auditStatus && '' == authRemark){ + Feng.error("请输入拒绝理由"); + return + } + let ajax = new $ax(Feng.ctxPath + "/coursePackage/setCoursePackageAuditStatus", function (res) { + if(res.code == 200){ + Feng.success("审核成功!"); + ExamineCoursePackageInfo.close(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("审核失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id", $('#id').val()); + ajax.set("auditStatus", auditStatus); + ajax.set("authRemark", authRemark); + ajax.start(); +}; \ No newline at end of file diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/manualReservation.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/manualReservation.js new file mode 100644 index 0000000..ffd8e29 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/manualReservation.js @@ -0,0 +1,96 @@ +/** + * 系统管理--用户管理的单例对象 + */ +let ManualReservation = { + id: "managerTable",//表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; +/** + * 初始化表格的列 + */ +ManualReservation.initColumn = function () { + let columns = [ + {field: 'selectItem', radio: true}, + {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '所属用户', field: 'userName', align: 'center', valign: 'middle'}, + {title: '姓名', field: 'studentName', align: 'center', valign: 'middle'}, + {title: '联系电话', field: 'phone', align: 'center', valign: 'middle'}, + {title: '年龄', field: 'age', align: 'center', valign: 'middle'}, + {title: '性别', field: 'sex', align: 'center', valign: 'middle', + formatter: function (v) { + if(v == 1){ + return '男'; + }else{ + return '女'; + } + } + } + ]; + return columns; +}; + +/** + * 检查是否选中 + */ +ManualReservation.check = function () { + let selected = $('#' + this.id).bootstrapTable('getSelections'); + if (selected.length == 0) { + Feng.info("请先选中表格中的某一记录!"); + return false; + } else { + ManualReservation.seItem = selected[0]; + return true; + } +}; + + + +ManualReservation.submit = function () { + if (this.check()) { + let ajax = new $ax(Feng.ctxPath + "/coursePackage/courseReservation", function (res) { + if(res.code == 200){ + Feng.success("预约成功!"); + ManualReservation.table.refresh(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("预约失败!" + data.responseJSON.message + "!"); + }); + ajax.set("coursePackageSchedulingId", $('#id').val()); + ajax.set("coursePackagePaymentId", ManualReservation.seItem.id); + ajax.start(); + } +}; + + + + + +ManualReservation.resetSearch = function () { + $('#userName').val(''); + $('#studentName').val(''); + ManualReservation.search(); +} + +ManualReservation.search = function () { + let queryData = {}; + queryData['coursePackageSchedulingId'] = $('#id').val(); + queryData['userName'] = $('#userName').val(); + queryData['studentName'] = $('#studentName').val(); + ManualReservation.table.refresh({query: queryData}); +} + + +$(function () { + let defaultColunms = ManualReservation.initColumn(); + let table = new BSTable(ManualReservation.id, "/coursePackage/queryWalkInStudentList", defaultColunms); + // 设置物理分页server(逻辑分页client) + table.setPaginationType("server"); + table.setQueryParams({ + coursePackageSchedulingId: $('#id').val() + }) + ManualReservation.table = table.init(); +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js new file mode 100644 index 0000000..9d07773 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js @@ -0,0 +1,210 @@ +/** + * 系统管理--用户管理的单例对象 + */ +let RegistrationRecord = { + id: "managerTable",//表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; +let language =$("#language").val() +/** + * 初始化表格的列 + */ +RegistrationRecord.initColumn = function () { + let columns = [ + {field: 'selectItem', radio: true}, + {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '购买用户', field: 'userName', align: 'center', valign: 'middle'}, + {title: '联系方式', field: 'phone', align: 'center', valign: 'middle'}, + {title: '购课学员', field: 'studentName', align: 'center', valign: 'middle'}, + {title: '报名时间', field: 'insertTime', align: 'center', valign: 'middle'}, + {title: '已上课时数', field: 'already', align: 'center', valign: 'middle'}, + {title: '缺课次数', field: 'absencesNumber', align: 'center', valign: 'middle'}, + {title: '状态', field: 'status', align: 'center', valign: 'middle', + formatter: function (v) { + switch (v) { + case 1: + return '正常'; + case 2: + return '<a href="#" onclick="">已退课-查看凭证</a>'; + } + } + } + ]; + return columns; +}; + +/** + * 检查是否选中 + */ +RegistrationRecord.check = function () { + let selected = $('#' + this.id).bootstrapTable('getSelections'); + if (selected.length == 0) { + Feng.info("请先选中表格中的某一记录!"); + return false; + } else { + RegistrationRecord.seItem = selected[0]; + return true; + } +}; + +/** + * 上课记录 + */ +RegistrationRecord.classRecord = function () { + let index = layer.open({ + type: 2, + title: '上课记录', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/coursePackage/openClassRecord?id=' + $('#id').val() + }); + this.layerIndex = index; +}; + +/** + * 点击修改按钮时 + * @param userId 管理员id + */ +RegistrationRecord.dropClass = function () { + if (this.check()) { + if(ClassRecord.seItem.status == 2){ + Feng.error("不能重复退课"); + return + } + let htmlStr = + '<div class="form-horizontal">' + + ' <div class="col-sm-11">' + + ' <div class="form-group">\n' + + ' <label class="col-sm-8 control-label">课程名称:' + $("#name").text() + '</label>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-8 control-label">用户姓名:' + ClassRecord.seItem.userName + '</label>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-8 control-label">学员姓名:' + ClassRecord.seItem.studentName + '</label>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-8 control-label">*上传凭证:</label>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <div class="col-sm-8">\n' + + ' <img id="certificate" src="" style="height: 100px;">' + + ' <input type="file" id="file" style="display: none;"/>' + + ' <button onclick="uploadImgs()" style="width: 20px;padding: 10px; color: white;background-color: #0d8ddb;border-radius: 5px;"> 上传 </button>' + + ' </div>\n' + + ' </div>' + + ' </div>' + + '</div>'; + layer.open({ + type: 1 + , title: '退课' + , area: ['50%', '50%'] + , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset + , id: 'layerDemo' //防止重复弹出cge + , content: htmlStr + , btn: ['保存', '关闭'] + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + , yes: function () { + let certificate = $('#certificate').attr('img'); + if(null == certificate || '' == certificate){ + Feng.error("请上传凭证图片"); + return + } + let ajax = new $ax(Feng.ctxPath + "/coursePackage/dropTheClass", function (res) { + if(res.code == 200){ + Feng.success("退课成功!"); + layer.closeAll(); + RegistrationRecord.table.refresh(); + }else{ + Feng.error(res.msg); + } + }, function (data) { + Feng.error("退课失败!" + data.responseJSON.message + "!"); + }); + ajax.set("coursePackagePaymentId", ClassRecord.seItem.id); + ajax.set("certificate", certificate); + ajax.start(); + }, + }); + + $('#file').on('change', function () { + var formData = new FormData() //创建一个forData + formData.append('file', $('#file')[0].files[0]) //把file添加进去 name命名为img + layer.load(); //上传loading + $.ajax({ + url: Feng.ctxPath + '/mgr/uploadImg', + data: formData, + type: "POST", + async: true, + cache: false, + contentType: false, + processData: false, + success: function(res) { + layer.closeAll('loading'); //关闭loading + $('#file').val(''); + $('#certificate').attr('src', res); + } + }) + }) + } +}; + + + +function uploadImgs(){ + $('#file').click(); +} + + +/** + * 删除用户 + */ +RegistrationRecord.makeUpMissedLessons = function () { + if (this.check()) { + let operation = function(){ + let ajax = new $ax(Feng.ctxPath + "/coursePackage/makeUpMissedLessons", function () { + Feng.success("补课成功!"); + RegistrationRecord.table.refresh(); + }, function (data) { + Feng.error("补课失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id", RegistrationRecord.seItem.id); + ajax.start(); + }; + + Feng.confirm("是否补课",operation); + } +}; + + + + +RegistrationRecord.resetSearch = function () { + $("#userName").val(""); + $("#studentName").val(""); + RegistrationRecord.search(); +} + +RegistrationRecord.search = function () { + let queryData = {}; + queryData['userName'] = $("#userName").val(); + queryData['studentName'] = $("#studentName").val(); + queryData['id'] = $('#id').val(); + RegistrationRecord.table.refresh({query: queryData}); +} + + +$(function () { + let defaultColunms = RegistrationRecord.initColumn(); + let table = new BSTable(RegistrationRecord.id, "/coursePackage/queryRegistrationRecord", defaultColunms); + // 设置物理分页server(逻辑分页client) + table.setPaginationType("server"); + table.setQueryParams({ + id: $('#id').val() + }) + RegistrationRecord.table = table.init(); +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCoupon.js b/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCoupon.js index 7904f52..2f452dd 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCoupon.js +++ b/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCoupon.js @@ -83,14 +83,103 @@ */ TCoupon.openChange = function () { if (this.check()){ - var index = layer.open({ - type: 2, - title: '编辑', - area: ['800px', '420px'], //宽高 - fix: false, //不固定 - maxmin: true, - content: Feng.ctxPath + '/tCouponManage/tCouponManage_add' + let id = TCoupon.seItem.id + let name = TCoupon.seItem.name + let quantityIssued = TCoupon.seItem.quantityIssued + let pickUpQuantity = TCoupon.seItem.pickUpQuantity + let illustrate = TCoupon.seItem.illustrate + let hasPickQty = TCoupon.seItem.hasPickQty + var index = layer.load(1,{ + 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" >' + + ' <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' + + ' <label class="form-control" id="name" >'+name+'</label> '+ + ' </div>\n' + + ' </div>\n'+ + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">发放数量:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="form-control" id="num" value="'+quantityIssued+'" > '+ + ' </div>\n' + + ' </div>\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">限领数量:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="form-control" id="num1" value="'+pickUpQuantity+'" > '+ + ' </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 class="form-control" id="text" >'+illustrate+'</textarea> '+ + ' </div>\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + '</div>' + , btn: ['关闭', '保存'] + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + ,load:1 + , yes: function () { + layer.closeAll(); + }, + btn2:function () { + let num = $("#num").val() + if(num==''){ + Feng.info("请输入发放数量") + return false; + } + let num1 = $("#num1").val() + if(num1==''){ + Feng.info("请输入限领数量") + return false; + } + let text = $("#text").val() + if(text==''){ + Feng.info("请输入优惠券说明") + return false; + } + + if(num<hasPickQty){ + Feng.info("发放数量不能小于已领取数量") + return false; + } + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/update", function (data) { + if (data.code == 200) { + Feng.success("操作成功!"); + window.location.reload(); + window.parent.layer.closeAll(); + } else if(data=="repeat"){ + window.location.reload(); + window.parent.layer.closeAll(); + Feng.error("请勿重复操作"); + }else { + return Feng.error(data.msg); + } + }, function (data) { + Feng.error("操作失败!") + window.location.reload(); + window.parent.layer.closeAll(); + return Feng.error("操作失败!"); + }); + ajax.set("id", id); + ajax.set("num", num); + ajax.set("num1", num1); + ajax.set("text", text); + ajax.start(); + layer.closeAll(); + } }); + this.layerIndex = index; } }; @@ -100,10 +189,6 @@ /** * 上架 */ -TCoupon.onShelf = function () { - - -}; /** @@ -123,7 +208,7 @@ var index = layer.open({ type: 2, title: '详情', - area: ['800px', '420px'], //宽高 + area: ['100%', '100%'], //宽高 fix: false, //不固定 maxmin: true, content: Feng.ctxPath + '/tCouponManage/coupon_detail/' + TCoupon.seItem.id @@ -151,6 +236,21 @@ this.layerIndex = index; } }; +TCoupon.onShelf = function (e) { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/onShelf", function(data){ + if(data.code==200){ + Feng.success("操作成功!") + TCoupon.table.refresh(); + } + },function(data){ + Feng.error("操作失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",TCoupon.seItem.id) + ajax.set("type",e) + ajax.start(); + } +}; diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponInfo.js b/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponInfo.js index 687001d..467b12e 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponInfo.js +++ b/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponInfo.js @@ -80,6 +80,27 @@ function scopeOfApplication1() { $("#storeSelect").hide(); $("#citySelect").hide(); + + //移除指定门店的数据: + // 找到 tbody 元素 + var tbody = document.getElementById("coun"); + + // 移除所有子元素(即行) + while (tbody.firstChild) { + tbody.removeChild(tbody.firstChild); + } + couponInfoDlg.storeIds = []; + + //移除指城市的数据: + num = 0; + var cityDemoDiv = document.getElementById("cityDemo"); + + cityDemoDiv.innerHTML = ""; // 将内容置为空字符串 + var provinceSelect = document.getElementById("provinceData"); + var cityDataSelect = document.getElementById("cityData"); + provinceSelect.innerHTML = '<option value="">请选择</option>'; + cityDataSelect.innerHTML = '<option value="">请选择</option>'; + getProvince(null); } /** * 指定城市 @@ -87,6 +108,18 @@ function scopeOfApplication2() { $("#storeSelect").hide(); $("#citySelect").show(); + + //移除指定门店的数据: + // 找到 tbody 元素 + var tbody = document.getElementById("coun"); + // 移除所有子元素(即行) + while (tbody.firstChild) { + tbody.removeChild(tbody.firstChild); + } + couponInfoDlg.storeIds = []; + + + } /** * 指定门店 @@ -94,6 +127,19 @@ function scopeOfApplication3() { $("#storeSelect").show(); $("#citySelect").hide(); + + //移除指城市的数据: + num = 0; + var cityDemoDiv = document.getElementById("cityDemo"); + + cityDemoDiv.innerHTML = ""; // 将内容置为空字符串 + var provinceSelect = document.getElementById("provinceData"); + var cityDataSelect = document.getElementById("cityData"); + provinceSelect.innerHTML = '<option value="">请选择</option>'; + cityDataSelect.innerHTML = '<option value="">请选择</option>'; + getProvince(null); + + } /** @@ -213,9 +259,9 @@ } -var num = 0; +let num = 0; couponInfoDlg.addBranch = function () { - num=num+1; + 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" + @@ -253,22 +299,17 @@ '<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>'; + this.storeIds.push(arrays[i].id); } } $("#coun").append(str); - console.log('storeIds',this.storeIds) } function deleteSub(e) { - console.log(e); var row = $(e).closest('tr'); - var idValue = row.find('#id').val(); - var index = this.storeIds.indexOf(idValue.toString()); - if (index !== -1) { - this.storeIds.splice(index, 1); - } + var value = row.find('#id').val(); + couponInfoDlg.storeIds.splice(couponInfoDlg.storeIds.indexOf(parseInt(value)), 1) $(e).parent().parent().remove(); - console.log('storeIds',this.storeIds) } @@ -284,29 +325,97 @@ var cityIds = []; // 优惠券名称 var couponName = $('#name').val(); + if (couponName === undefined || couponName === '' || couponName === null){ + return Feng.error('优惠券名称不能为空'); + } // 优惠券类型 - var prescription = $('#prescription').val(); + let prescription = $(":radio[name='prescription']:checked").val(); + // 满xx金额 + let conditionalAmount = $('#conditionalAmount').val(); + // 减xx金额 + let deductionAmount = $('#deductionAmount').val(); + // 可抵扣xx金额 + let voucherAmount = $('#voucherAmount').val(); + // 体验券名称 + let experienceName = $('#experienceName').val(); + if (prescription === '1'){ + if (conditionalAmount === undefined || conditionalAmount === '' || conditionalAmount === null){ + return Feng.error('条件金额不能为空'); + } + if (deductionAmount === undefined || deductionAmount === '' || deductionAmount === null){ + return Feng.error('减扣金额不能为空'); + } + } + if (prescription === '2'){ + if (voucherAmount === undefined || voucherAmount === '' || voucherAmount === null){ + return Feng.error('抵扣金额不能为空'); + } + } + if (prescription === '3'){ + if (experienceName === undefined || experienceName === '' || experienceName === null){ + return Feng.error('体验券名称不能为空'); + } + } + + // 说明 var illustrate = $('#illustrate').val(); + if (illustrate === undefined || illustrate === '' || illustrate === null){ + return Feng.error('优惠券说明不能为空'); + } // 发放方式 - var distributionMethod = $('#distributionMethod').val(); + let distributionMethod = $(":radio[name='distributionMethod']:checked").val(); + if (distributionMethod === undefined || distributionMethod === '' || distributionMethod === null){ + return Feng.error('发放方式不能为空'); + } // 所需积分 var requiredPoints = $('#requiredPoints').val(); + // 所需现金 + var requiredCash = $('#requiredCash').val(); // 用户人群 let userGroup = $(':radio[name="userGroup"]:checked').val(); // 发放数量 var quantityIssued = $('#quantityIssued').val(); + if (quantityIssued === undefined || quantityIssued === '' || quantityIssued === null){ + return Feng.error('发放数量不能为空'); + } // 限领数量 var pickUpQuantity = $('#pickUpQuantity').val(); + if (pickUpQuantity === undefined || pickUpQuantity === '' || pickUpQuantity === null){ + return Feng.error('限领数量不能为空'); + } // 有效期 var periodOfValidity = $('#periodOfValidity').val(); - + if (periodOfValidity === undefined || periodOfValidity === '' || periodOfValidity === null){ + return Feng.error('有效期不能为空'); + } + // 兑换方式 let exchangeMethod = $(':radio[name="exchangeMethod"]:checked').val(); + if (exchangeMethod === '' || exchangeMethod === undefined || exchangeMethod === null){ + return Feng.error('兑换方式不能为空'); + } + if (exchangeMethod === '1'){ + if (requiredPoints === undefined || requiredPoints === '' || requiredPoints === null){ + return Feng.error('所需积分不能为空'); + } + } + if (exchangeMethod === '2'){ + if (requiredPoints === undefined || requiredPoints === '' || requiredPoints === null){ + return Feng.error('所需积分不能为空'); + } + if (requiredCash === undefined || requiredCash === '' || requiredCash === null){ + return Feng.error('所需现金不能为空'); + } + } + if (exchangeMethod === '3'){ + if (requiredCash === undefined || requiredCash === '' || requiredCash === null){ + return Feng.error('所需现金不能为空'); + } + } - var requiredCash = $('#requiredCash').val(); - - var company = $('#company').val(); + let company = $(':radio[name="company"]:checked').val(); + var cts = ""; if (company === '2'){ var myselect=document.getElementById('cityData'); var seCity = myselect.options[myselect.selectedIndex].value; @@ -314,7 +423,7 @@ return Feng.error('请选中一个省市'); } cityIds.push(seCity); - if (this.num > 0){ + if (num > 0){ for (let i = 1; i <= num; i++) { var insSelect=document.getElementById('cityData'+i); var inData = insSelect.options[insSelect.selectedIndex].value; @@ -322,15 +431,21 @@ cityIds.push(inData); } } + cts = cityIds.join(','); } } + const commaSeparatedString = this.goodsPicArray.join(','); + + var stores = ""; if (company === '3'){ - + console.log('3---this.storeIds',this.storeIds); + if (couponInfoDlg.storeIds.length === 0 ){ + return Feng.error('请至少选择一个门店'); + } + stores = this.storeIds.join(','); + console.log('stores--===--',stores) } - - console.log('11111111') - //提交信息 var ajax = new $ax(Feng.ctxPath + "/tCouponManage/commitData", function (data) { Feng.success("添加成功!"); @@ -343,10 +458,10 @@ ajax.set("cityManagerId",1); ajax.set("couponName",couponName); ajax.set("prescription",prescription); - ajax.set("condition",$('#conditionalAmount').val()); - ajax.set("subtraction",$('#deductionAmount').val()); - ajax.set("discount",$('#voucherAmount').val()); - ajax.set("experience",$('#experienceName').val()); + ajax.set("condition",conditionalAmount); + ajax.set("subtraction",deductionAmount); + ajax.set("discount",voucherAmount); + ajax.set("experience",experienceName); ajax.set("illustrate",illustrate); ajax.set("distributionMethod",distributionMethod); ajax.set("requiredPoints",requiredPoints); @@ -357,10 +472,10 @@ ajax.set("periodOfValidity",periodOfValidity); ajax.set("exchangeMethod",exchangeMethod); ajax.set("goodImg",this.goodsCover); - ajax.set("goodImgs",this.goodsPicArray); - ajax.set("company",$('#company').val()); - ajax.set("cityIds",cityIds); - ajax.set("storeIds",this.storeIds); + ajax.set("goodImgs",commaSeparatedString); + ajax.set("company",company); + ajax.set("cityIds",cts); + ajax.set("storeIds",stores); ajax.start(); } @@ -396,6 +511,57 @@ $(function () { getProvince(null); radio1(); + var OBJradio = document.getElementsByName("prescription") + for (i = 0; i < OBJradio.length; i++) {//循环查找这个radio + if ($("#t1").val() == OBJradio[i].value) {//判断是否与radio的值相同 + OBJradio[i].checked = true//修改选中状态 + } + } + + var OBJradio = document.getElementsByName("distributionMethod") + for (i = 0; i < OBJradio.length; i++) {//循环查找这个radio + if ($("#t2").val() == OBJradio[i].value) {//判断是否与radio的值相同 + OBJradio[i].checked = true//修改选中状态 + } + } + var OBJradio = document.getElementsByName("exchangeMethod") + for (i = 0; i < OBJradio.length; i++) {//循环查找这个radio + if ($("#t3").val() == OBJradio[i].value) {//判断是否与radio的值相同 + OBJradio[i].checked = true//修改选中状态 + } + } + var OBJradio = document.getElementsByName("userGroup") + for (i = 0; i < OBJradio.length; i++) {//循环查找这个radio + if ($("#t4").val() == OBJradio[i].value) {//判断是否与radio的值相同 + OBJradio[i].checked = true//修改选中状态 + } + } + var OBJradio = document.getElementsByName("company") + for (i = 0; i < OBJradio.length; i++) {//循环查找这个radio + if ($("#t5").val() == OBJradio[i].value) {//判断是否与radio的值相同 + OBJradio[i].checked = true//修改选中状态 + } + } + if($("#t5").val() ==2){ + $("#citySelect").show(); + } + if($("#t5").val() ==3){ + $("#storeSelect").show(); + } + if($("#t1").val()==1){ + console.log(1) + $("#conditionalAmount").val($("#one").val()) + $("#deductionAmount").val($("#two").val()) + } + if($("#t1").val()==2){ + radio2() + $("#voucherAmount").val($("#one").val()) + } + if($("#t1").val()==3){ + console.log(3) + $("#experienceName").val($("#three").val()) + } + var userType = $('#userType').val(); if (userType === '1'){ // 兑换方式 diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponRecord.js b/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponRecord.js new file mode 100644 index 0000000..9665595 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TCouponRecord.js @@ -0,0 +1,264 @@ +/** + * 管理初始化 + */ +var TCoupon = { + id: "TCouponTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; + +/** + * 初始化表格的列 + */ +TCoupon.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: 'phone', visible: true, align: 'center', valign: 'middle', + }, + {title: '使用状态', field: 'status', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + return {2: "已使用", 1: "未使用"}[value] + }}, + ]; +}; + +/** + * 检查是否选中 + */ +TCoupon.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TCoupon.seItem = selected[0]; + return true; + } +}; + +/** + * 点击添加 + */ +TCoupon.openAdd = function () { + var index = layer.open({ + type: 2, + title: '添加', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tCouponManage/coupon_add' + }); + this.layerIndex = index; +}; + + +/** + * 点击编辑 + */ +TCoupon.openChange = function () { + if (this.check()){ + let id = TCoupon.seItem.id + let name = TCoupon.seItem.name + let quantityIssued = TCoupon.seItem.quantityIssued + let pickUpQuantity = TCoupon.seItem.pickUpQuantity + let illustrate = TCoupon.seItem.illustrate + let hasPickQty = TCoupon.seItem.hasPickQty + var index = layer.load(1,{ + 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" >' + + ' <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' + + ' <label class="form-control" id="name" >'+name+'</label> '+ + ' </div>\n' + + ' </div>\n'+ + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">发放数量:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="form-control" id="num" value="'+quantityIssued+'" > '+ + ' </div>\n' + + ' </div>\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">限领数量:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="form-control" id="num1" value="'+pickUpQuantity+'" > '+ + ' </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 class="form-control" id="text" >'+illustrate+'</textarea> '+ + ' </div>\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + '</div>' + , btn: ['关闭', '保存'] + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + ,load:1 + , yes: function () { + layer.closeAll(); + }, + btn2:function () { + let num = $("#num").val() + if(num==''){ + Feng.info("请输入发放数量") + return false; + } + let num1 = $("#num1").val() + if(num1==''){ + Feng.info("请输入限领数量") + return false; + } + let text = $("#text").val() + if(text==''){ + Feng.info("请输入优惠券说明") + return false; + } + + if(num<hasPickQty){ + Feng.info("发放数量不能小于已领取数量") + return false; + } + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/update", function (data) { + if (data.code == 200) { + Feng.success("操作成功!"); + window.location.reload(); + window.parent.layer.closeAll(); + } else if(data=="repeat"){ + window.location.reload(); + window.parent.layer.closeAll(); + Feng.error("请勿重复操作"); + }else { + return Feng.error(data.msg); + } + }, function (data) { + Feng.error("操作失败!") + window.location.reload(); + window.parent.layer.closeAll(); + return Feng.error("操作失败!"); + }); + ajax.set("id", id); + ajax.set("num", num); + ajax.set("num1", num1); + ajax.set("text", text); + ajax.start(); + layer.closeAll(); + } + }); + + this.layerIndex = index; + } +}; + + + +/** + * 上架 + */ + + +/** + * 下架 + */ +TCoupon.offShelf = function () { + + +}; + + +/** + * 打开查看详情 + */ +TCoupon.openDetail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title: '详情', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tCouponManage/coupon_detail/' + TCoupon.seItem.id + }); + this.layerIndex = index; + } +}; + + + + +/** + * 打开领取记录 + */ +TCoupon.openCollectionRecord = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title: '详情', + area: ['800px', '420px'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tCouponManage/coupon_record/' + TCoupon.seItem.id + }); + this.layerIndex = index; + } +}; +TCoupon.updateType = function () { + if (this.check()) { + if(TCoupon.seItem.status==2){ + Feng.info("该券已核销") + return false; + } + var ajax = new $ax(Feng.ctxPath + "/tCouponManage/updateType", function(data){ + if(data.code==200){ + Feng.success("核销成功!") + TCoupon.table.refresh(); + } + },function(data){ + Feng.error("核销失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",TCoupon.seItem.id) + ajax.start(); + } +}; + + + +/** + * 查询列表 + */ +TCoupon.search = function () { + var queryData = {}; + queryData['name'] = $("#name").val(); + queryData['type'] = $("#type").val(); + queryData['phone'] = $("#state").val(); + TCoupon.table.refresh({query: queryData}); +}; + + +/** + * 重置搜索 + */ +TCoupon.resetSearch = function () { + $("#name").val(''); + $("#type").val(''); + $("#phone").val(''); + TCoupon.search(); +}; + +$(function () { + var defaultColunms = TCoupon.initColumn(); + var table = new BSTable(TCoupon.id, "/tCouponManage/listRecord?id="+$("#id").val(), defaultColunms); + table.setPaginationType("client"); + TCoupon.table = table.init(); +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tGoods/TStoreInfo.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/TStoreInfo.js new file mode 100644 index 0000000..329797c --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/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/tGoods/tGoods.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods.js new file mode 100644 index 0000000..f323923 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods.js @@ -0,0 +1,227 @@ +/** + * 车辆管理管理初始化 + */ +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: 'type', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + return {1: "实体商品", 2: "课包商品", 3: "门票商品", 4: "优惠券"}[value] + } + }, + {title: '商品名称', field: 'name', visible: true, align: 'center', valign: 'middle'}, + {title: '商品封面', field: 'cover', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + value = typeof value == "undefined" || value == '' ? '/static/img/NoPIC.png' : value; + return '<img src="' + value + '" style="height: 100px;"/>' + } + }, + {title: '有效期', field: 'timeValue', 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: 'activeStatus', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + return {1: "未开始", 2: "已开始", 3: "已结束"}[value] + } + }, + {title: '可售状态', field: 'shelves', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row, index) { + return {1: "上架", 2: "下架"}[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/tCity_update/' + TPointProducts.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 购买详情 + */ +TPointProducts.payDetail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title:'购买详情', + area: ['70%', '70%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tGoods/tPay_detail/' + TPointProducts.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 编辑页面 + */ +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/list", 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/tGoods/tGoods_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js new file mode 100644 index 0000000..aff59ba --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js @@ -0,0 +1,448 @@ +/** + * 初始化车辆管理详情对话框 + */ +var language=1; +var TCarInfoDlg = { + tCarInfoData : {}, + validateFields: { + }, + goodsPicArray:[], + storeIds: [], + +}; + +/** + * 验证数据是否为空 + */ +TCarInfoDlg.validate = function () { + $('#carInfoForm').data("bootstrapValidator").resetForm(); + $('#carInfoForm').bootstrapValidator('validate'); + return $("#carInfoForm").data('bootstrapValidator').isValid(); +}; + +/** + * 清除数据 + */ +TCarInfoDlg.clearData = function() { + this.tCarInfoData = {}; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TCarInfoDlg.set = function(key, val) { + this.tCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val; + return this; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TCarInfoDlg.get = function(key) { + return $("#" + key).val(); +} + +/** + * 关闭此对话框 + */ +TCarInfoDlg.close = function() { + parent.layer.close(window.parent.TPointProducts.layerIndex); +} + + +/** + * 收集数据 + */ +TCarInfoDlg.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; +} +TCarInfoDlg.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(); + TCarInfoDlg.storeIds.splice(TCarInfoDlg.storeIds.indexOf(parseInt(value)), 1) + $(e).parent().parent().remove(); + console.log('storeIds',TCarInfoDlg.storeIds) +} +TCarInfoDlg.delete = function (o) { + $(o).parent("div").remove() +} +var num = 0; +TCarInfoDlg.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=\"TCarInfoDlg.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(); +} +/** + * 提交添加 + */ +TCarInfoDlg.addSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + let name = $("#name").val() + let phone = $("#phone").val() + + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + if(name==''){ + Feng.info("管理员姓名不能为空") + return; + } + if(phone==''){ + Feng.info("管理员手机号不能为空") + return; + } + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tCity/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.TCompetition.table.refresh(); + TCarInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + + },function(data){ + Feng.error("添加失败!" + data.responseJSON.message + "!"); + }); + ajax.set(this.tCarInfoData); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("name",name); + ajax.set("phone",phone); + ajax.start(); +} + +/** + * 提交修改 + */ +TCarInfoDlg.editSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + let name = $("#name").val() + let phone = $("#phone").val() + + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + if(name==''){ + Feng.info("管理员姓名不能为空") + return; + } + if(phone==''){ + Feng.info("管理员手机号不能为空") + return; + } + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tCity/update", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("修改成功!"); + }else if(language==2){ + Feng.success("Modify successfully!"); + }else { + Feng.success("Mengubah dengan sukses!"); + } + window.parent.TCompetition.table.refresh(); + TCarInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + },function(data){ + Feng.error("修改失败!" + data.responseJSON.message + "!"); + }); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("name",name); + ajax.set("phone",phone); + ajax.set("id",$("#id").val()); + ajax.start(); +} + +$(function() { + getProvince(null); + Feng.initValidator("carInfoForm", TCarInfoDlg.validateFields); + // 初始化图片上传 + var carPhoto = new $WebUpload("cover"); + carPhoto.setUploadBarId("progressBar"); + carPhoto.init(); + var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto"); + drivingLicensePhoto.setUploadBarId("progressBar"); + drivingLicensePhoto.init(); + TCarInfoDlg.editor = UE.getEditor('editor'); +}); + +/** + * 选择分公司后执行 + */ +TCarInfoDlg.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(); +} + +/** + * 类型改变执行 + * @param e + */ +TCarInfoDlg.companyTypeClick = function (e) { + if (1 == e){ + $(".companyDiv").hide(); + } else if (2 == e){ + $(".companyDiv").show(); + } +} + +/** + * 车辆品牌改变时执行 + */ +TCarInfoDlg.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(); +} + +/** + * 专车服务被点击 + */ +TCarInfoDlg.zcServerClick = function () { + var serverBox1 = $('#serverBox1').prop('checked'); + if (serverBox1){ + $("#zcModelDiv").show(); + } else { + $("#zcModelDiv").hide(); + } +} + +/** + * 跨城服务被点击 + */ +TCarInfoDlg.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/tGoods/tPay_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tPay_info.js new file mode 100644 index 0000000..8045689 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tPay_info.js @@ -0,0 +1,99 @@ +/** + * 管理初始化 + */ +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 (this.check()) { + 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",this.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-management/src/main/webapp/static/modular/system/tIntegral/tIntegral.js b/cloud-server-management/src/main/webapp/static/modular/system/tIntegral/tIntegral.js index b95ac37..700a94f 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/tIntegral/tIntegral.js +++ b/cloud-server-management/src/main/webapp/static/modular/system/tIntegral/tIntegral.js @@ -15,22 +15,28 @@ return [ {field: 'selectItem', radio: true}, {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'}, - {title: '省', field: 'insertTime', visible: true, align: 'center', valign: 'middle',width:'20%', + {title: '省', field: 'province', visible: true, align: 'center', valign: 'middle',width:'20%', }, - {title: '市', field: 'name', visible: true, align: 'center', valign: 'middle', + {title: '市', field: 'city', visible: true, align: 'center', valign: 'middle', }, - {title: '姓名', field: 'insertUserId', visible: false, align: 'center', valign: 'middle'}, - {title: '联系电话', field: 'insertUser', 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: 'province', visible: true, align: 'center', valign: 'middle', + {title: '积分类型', field: 'type', visible: true, align: 'center', valign: 'middle', + formatter:function (data) { + return{1:"赠送积分", 2:"兑换商品",3:"完成课后练习",4:"观看教学视频"}[data] + } }, - {title: '积分明细', field: 'lineNum', visible: true, align: 'center', valign: 'middle', + {title: '积分明细', field: 'integral', visible: true, align: 'center', valign: 'middle', }, - {title: '变动类型', field: 'state', visible: true, align: 'center', valign: 'middle', + {title: '变动类型', field: 'category', visible: true, align: 'center', valign: 'middle', + formatter:function (data) { + return{1:"增加", 2:"减少"}[data] + } }, - {title: '时间', field: 'state', visible: true, align: 'center', valign: 'middle', + {title: '时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle', }, - {title: '备注', field: 'state', visible: true, align: 'center', valign: 'middle', + {title: '备注', field: 'remark', visible: true, align: 'center', valign: 'middle', } ]; }; @@ -71,14 +77,15 @@ /** * 点击添加跨城站点管理 */ -TSite.openAddTSite = function () { +let language =1 +TSite.openAdd = function () { var index = layer.open({ type: 2, - title: language==1?'添加':(language==2?'Add':'Tambahkan'), - area: ['100%', '100%'], //宽高 + title: language==1?'赠送积分':(language==2?'Add':'Tambahkan'), + area: ['50%', '50%'], //宽高 fix: false, //不固定 maxmin: true, - content: Feng.ctxPath + '/tSite/tSite_add' + content: Feng.ctxPath + '/tIntegral/tIntegral_add' }); this.layerIndex = index; }; @@ -171,20 +178,20 @@ */ TSite.search = function () { var queryData = {}; - queryData['insertTime'] = $("#insertTime").val(); queryData['name'] = $("#name").val(); - queryData['insertUser'] = $("#insertUser").val(); - queryData['city'] = $("#city").val(); - queryData['state'] = $("#state").val(); + queryData['phone'] = $("#phone").val(); + queryData['type'] = $("#type").val(); + queryData['category'] = $("#category").val(); + queryData['time'] = $("#time").val(); TSite.table.refresh({query: queryData}); }; TSite.resetSearch = function () { - $("#insertTime").val(""); - $("#name").val(""); - $("#insertUser").val(""); - $("#city").val(""); - $("#state").val(""); + $("#name").val(''); + $("#phone").val(''); + $("#type").val(''); + $("#category").val(''); + $("#time").val(''); TSite.search(); }; -- Gitblit v1.7.1