Jelajahi Sumber

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow into zouxuan

 Conflicts:
	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseSchedule.java
	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentPaymentService.java
	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetAccompanimentService.java
	cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetAccompanimentMapper.xml
zouxuan 3 tahun lalu
induk
melakukan
321b4fcf89
100 mengubah file dengan 4878 tambahan dan 708 penghapusan
  1. 3 2
      .gitignore
  2. 26 9
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java
  3. 28 2
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/fallback/SysUserFeignServiceFallback.java
  4. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/MenuQueryInfo.java
  5. 41 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/RealnameAuthReq.java
  6. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/SysUserQueryInfo.java
  7. 3 3
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/UserSetReq.java
  8. 115 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/SysConfig.java
  9. 7 0
      cooleshow-auth/auth-server/pom.xml
  10. 24 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/RongCloudConfig.java
  11. 1 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/WebSecurityConfig.java
  12. 17 5
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  13. 3 4
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  14. 24 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/service/CustomTokenServices.java
  15. 24 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysConfigDao.java
  16. 133 111
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  17. 11 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysConfigService.java
  18. 14 4
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  19. 33 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysConfigServiceImpl.java
  20. 39 24
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  21. 3 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/MenuController.java
  22. 1 21
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  23. 131 41
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  24. 16 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/queryInfo/RoleQueryInfo.java
  25. 88 0
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysConfigMapper.xml
  26. 16 2
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysRoleMapper.xml
  27. 39 20
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  28. 1 1
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserRoleMapper.xml
  29. 4 4
      cooleshow-cms/pom.xml
  30. 0 85
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterCatalogController.java
  31. 125 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterContentController.java
  32. 0 89
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterContentControlller.java
  33. 126 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/MusicTheoryController.java
  34. 167 71
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java
  35. 16 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/HelpCenterContentQueryInfo.java
  36. 38 11
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/NewsInformationQueryInfo.java
  37. 2 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/HelpCenterContentDao.java
  38. 23 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/SysNewsInformationDao.java
  39. 4 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/SysNewsTypeDao.java
  40. 56 16
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/HelpCenterContent.java
  41. 47 37
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/SysNewsInformation.java
  42. 16 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/SysNewsType.java
  43. 61 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/AppHomeDto.java
  44. 25 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/AppParam.java
  45. 14 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/SysNewsInformationDto.java
  46. 29 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/SysNewsTypeDto.java
  47. 37 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/search/MusicTheorySearch.java
  48. 2 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/HelpCenterContentService.java
  49. 16 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/SysNewsInformationService.java
  50. 5 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/SysNewsTypeService.java
  51. 7 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/HelpCenterContentServiceImpl.java
  52. 30 9
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsInformationServiceImpl.java
  53. 30 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsTypeServiceImpl.java
  54. 45 28
      cooleshow-cms/src/main/resources/config/mybatis/HelpCenterContentMapper.xml
  55. 46 76
      cooleshow-cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml
  56. 76 4
      cooleshow-cms/src/main/resources/config/mybatis/SysNewsTypeMapper.xml
  57. 6 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/CommonConstants.java
  58. 37 10
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  59. 12 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java
  60. 10 13
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java
  61. 34 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/PlatformEnum.java
  62. 2 0
      cooleshow-gateway/gateway-web/src/main/java/com/yonge/gateway/web/config/SwaggerDocumentConfig.java
  63. 67 0
      cooleshow-mall/mall-admin/pom.xml
  64. 26 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/MallAdminApplication.java
  65. 34 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/GlobalCorsConfig.java
  66. 41 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/ResourceServerConfig.java
  67. 53 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/WebMvcConfig.java
  68. 44 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/AdminStatisticalController.java
  69. 34 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/CmsPreferenceAreaController.java
  70. 46 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/CmsSubjectController.java
  71. 118 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/MinioController.java
  72. 34 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsCompanyAddressController.java
  73. 128 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderController.java
  74. 69 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderReturnApplyController.java
  75. 87 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderReturnReasonController.java
  76. 41 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderSettingController.java
  77. 45 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OssController.java
  78. 130 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsBrandController.java
  79. 86 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductAttributeCategoryController.java
  80. 93 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductAttributeController.java
  81. 116 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductCategoryController.java
  82. 144 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductController.java
  83. 43 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsSkuStockController.java
  84. 78 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsCouponController.java
  85. 40 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsCouponHistoryController.java
  86. 87 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsFlashPromotionController.java
  87. 78 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsFlashPromotionProductRelationController.java
  88. 93 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsFlashPromotionSessionController.java
  89. 85 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeAdvertiseController.java
  90. 80 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeBrandController.java
  91. 80 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeNewProductController.java
  92. 80 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeRecommendProductController.java
  93. 80 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeRecommendSubjectController.java
  94. 187 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsAdminController.java
  95. 35 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsMemberLevelController.java
  96. 102 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsMenuController.java
  97. 69 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsResourceCategoryController.java
  98. 91 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsResourceController.java
  99. 125 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsRoleController.java
  100. 18 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dao/CmsPreferenceAreaProductRelationDao.java

+ 3 - 2
.gitignore

@@ -23,6 +23,7 @@ mvnw.cmd
 *.ipr
 /toolset/codegen/src/main/resources/generateConfigration.xml
 **/bootstrap-dev.yml
+**/bootstrap-dev.properties
 
 
 ### 忽略子模块的文件 ###
@@ -55,5 +56,5 @@ target
 **/bootstrap-local.yml
 **/bootstrap-local.properties
 **/logback-spring.xml
-/.gitignore
-/.gitignore
+**/AuditLogInterceptor.java
+/toolset/audit-log/src/main/java/com/yonge/toolset/log/interceptor/AuditLogInterceptor.java

+ 26 - 9
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java

@@ -1,20 +1,20 @@
 package com.yonge.cooleshow.auth.api.client;
 
-import java.util.List;
-
+import com.yonge.cooleshow.auth.api.client.fallback.SysUserFeignServiceFallback;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
+import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.common.config.FeignConfiguration;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
-import com.yonge.cooleshow.auth.api.client.fallback.SysUserFeignServiceFallback;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.common.config.FeignConfiguration;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-
-import javax.validation.Valid;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 @FeignClient(contextId = "sysUserFeignService", name = "auth-server", configuration = { FeignConfiguration.class }, fallback = SysUserFeignServiceFallback.class)
 public interface SysUserFeignService {
@@ -38,11 +38,28 @@ public interface SysUserFeignService {
 	public List<String> queryRoleCodeListByUserId(@RequestParam("userId") Long userId);
 
 	@PostMapping(value = "user/updateSysUser", consumes = MediaType.APPLICATION_JSON_VALUE)
-	public Boolean updateSysUser(SysUser user);
+	public HttpResponseResult<Boolean> updateSysUser(SysUser user);
 
 	@PostMapping(value = "exit/{clientId}/{phone}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
 	public HttpResponseResult<String> exitByPhone(@PathVariable("clientId") String clientId, @PathVariable("phone") String phone);
 
 	@PostMapping(value = "user/realNameAuth")
 	public HttpResponseResult<IdcardInfoExtractor> realNameAuth(@RequestBody RealnameAuthReq realNameAuthDto);
+
+	@PostMapping(value = "user/bindOpenId")
+	HttpResponseResult<Boolean> bindOpenId(@RequestBody SysUser user);
+
+	@PostMapping(value = "/refreshToken")
+	@ApiOperation(value = "刷新token")
+	HttpResponseResult refreshToken(@RequestParam("refreshToken")String refreshToken,
+										   @RequestParam("clientId")String clientId,
+										   @RequestParam("clientSecret")String clientSecret);
+
+	@PostMapping(value = "exit",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@ApiOperation(value = "退出登录")
+	HttpResponseResult<String> logout();
+
+	@PostMapping(value = "user/list")
+	HttpResponseResult<List<SysUser>> page(@RequestBody SysUserQueryInfo queryInfo);
+
 }

+ 28 - 2
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/fallback/SysUserFeignServiceFallback.java

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.auth.api.client.fallback;
 import java.util.List;
 
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
+import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
+import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import org.springframework.stereotype.Component;
 
@@ -10,6 +12,8 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
+import javax.servlet.http.HttpServletRequest;
+
 @Component
 public class SysUserFeignServiceFallback implements SysUserFeignService {
 
@@ -43,8 +47,8 @@ public class SysUserFeignServiceFallback implements SysUserFeignService {
 	}
 
 	@Override
-	public Boolean updateSysUser(SysUser user) {
-		return false;
+	public HttpResponseResult<Boolean> updateSysUser(SysUser user) {
+		return HttpResponseResult.failed("请求失败");
 	}
 
 	@Override
@@ -56,4 +60,26 @@ public class SysUserFeignServiceFallback implements SysUserFeignService {
 	public HttpResponseResult<IdcardInfoExtractor> realNameAuth(RealnameAuthReq realNameAuthDto) {
 		return null;
 	}
+
+	@Override
+	public HttpResponseResult<Boolean> bindOpenId(SysUser user) {
+		return HttpResponseResult.failed("请求失败");
+	}
+
+	@Override
+	public HttpResponseResult refreshToken(String refreshToken, String clientId, String clientSecret) {
+		return HttpResponseResult.failed("请求失败");
+	}
+
+	@Override
+	public HttpResponseResult<String> logout() {
+		return HttpResponseResult.failed("请求失败");
+	}
+
+
+	@Override
+	public HttpResponseResult<List<SysUser>> page(SysUserQueryInfo queryInfo) {
+		return HttpResponseResult.failed("请求失败");
+	}
+
 }

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/MenuQueryInfo.java

@@ -14,7 +14,7 @@ public class MenuQueryInfo extends QueryInfo{
     @ApiModelProperty(value = "节点状态,默认0显示,1不显示",required = false)
     private Integer hid;
 
-    @ApiModelProperty(value = "科目编号",required = false)
+    @ApiModelProperty(value = "声部编号",required = false)
     private Integer subjectId;
 
     private Long userId;

+ 41 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/RealnameAuthReq.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 实名认证请求对象
@@ -28,6 +29,22 @@ public class RealnameAuthReq implements Serializable {
     @ApiModelProperty(value = "是否修改用户信息", required = true)
     private Boolean isSave;
 
+    private Long userId;
+    // 性别(1,男 0,女)
+    private int gender;
+    // 出生日期
+    private Date birthday;
+    // 头像
+    private String avatar;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
     public String getRealName() {
         return realName;
     }
@@ -51,4 +68,28 @@ public class RealnameAuthReq implements Serializable {
     public void setSave(Boolean save) {
         isSave = save;
     }
+
+    public int getGender() {
+        return gender;
+    }
+
+    public void setGender(int gender) {
+        this.gender = gender;
+    }
+
+    public Date getBirthday() {
+        return birthday;
+    }
+
+    public void setBirthday(Date birthday) {
+        this.birthday = birthday;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
 }

+ 1 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/queryInfo/SysUserQueryInfo.java → cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/SysUserQueryInfo.java

@@ -1,4 +1,4 @@
-package com.yonge.cooleshow.auth.web.controller.queryInfo;
+package com.yonge.cooleshow.auth.api.dto;
 
 import com.yonge.cooleshow.common.page.QueryInfo;
 

+ 3 - 3
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/UserSetReq.java

@@ -15,7 +15,7 @@ public class UserSetReq {
     @ApiModelProperty("昵称")
     private String username;
     @ApiModelProperty(value = "性别 0女 1男")
-    private UserGenderEnum gender;
+    private Integer gender;
 
     public String getAvatar() {
         return avatar;
@@ -33,11 +33,11 @@ public class UserSetReq {
         this.username = username;
     }
 
-    public UserGenderEnum getGender() {
+    public Integer getGender() {
         return gender;
     }
 
-    public void setGender(UserGenderEnum gender) {
+    public void setGender(Integer gender) {
         this.gender = gender;
     }
 }

+ 115 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/SysConfig.java

@@ -0,0 +1,115 @@
+package com.yonge.cooleshow.auth.api.entity;
+
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(sys_config):
+ */
+public class SysConfig extends BaseEntity {
+
+	/**  */
+	private Long id;
+	
+	/** 参数名称 */
+	@ApiModelProperty(value = "参数名称", required = true)
+	private String paramName;
+	
+	/** 参数值 */
+	@ApiModelProperty(value = "参数值", required = true)
+	private String paramValue;
+	
+	/** 描述 */
+	@ApiModelProperty(value = "描述", required = true)
+	private String description;
+	
+	/** 创建时间 */
+	private java.util.Date createOn;
+	
+	/** 修改时间 */
+	private java.util.Date modifyOn;
+	
+	private Long modifyBy;
+	
+	@ApiModelProperty(value = "消息组", required = true)
+	private String group;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setParamName(String paramName){
+		this.paramName = paramName;
+	}
+	
+	public String getParamName(){
+		return this.paramName;
+	}
+			
+	public void setParamValue(String paramValue){
+		this.paramValue = paramValue;
+	}
+	
+	public String getParamValue(){
+		return this.paramValue;
+	}
+
+	public <T> T getParamValue(Class<T> cla){
+		try {
+			return cla.cast(cla.getMethod("valueOf", String.class).invoke(cla.getInterfaces(),this.paramValue));
+		} catch (Exception e) {
+			return (T)this.paramValue.getClass();
+		}
+	}
+			
+	public void setDescription(String description){
+		this.description = description;
+	}
+	
+	public String getDescription(){
+		return this.description;
+	}
+			
+	public void setCreateOn(java.util.Date createOn){
+		this.createOn = createOn;
+	}
+	
+	public java.util.Date getCreateOn(){
+		return this.createOn;
+	}
+			
+	public void setModifyOn(java.util.Date modifyOn){
+		this.modifyOn = modifyOn;
+	}
+	
+	public java.util.Date getModifyOn(){
+		return this.modifyOn;
+	}
+			
+	public String getGroup() {
+		return group;
+	}
+
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	public Long getModifyBy() {
+		return modifyBy;
+	}
+
+	public void setModifyBy(Long modifyBy) {
+		this.modifyBy = modifyBy;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 7 - 0
cooleshow-auth/auth-server/pom.xml

@@ -83,6 +83,13 @@
 			<groupId>com.yonge.toolset</groupId>
 			<artifactId>thirdparty-component</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>cn.rongcloud.im</groupId>
+            <artifactId>server-sdk-java</artifactId>
+            <version>3.2.17</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 24 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/RongCloudConfig.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.auth.config;
+
+import io.rong.RongCloud;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+@Configuration
+public class RongCloudConfig {
+
+    @Value("${cn.rongcloud.im.appkey}")
+    private String appKey;
+    @Value("${cn.rongcloud.im.secret}")
+    private String appSecret;
+
+    public static RongCloud rongCloud;
+
+    @Bean
+    @Primary
+    public void getRongCloud() {
+        rongCloud = RongCloud.getInstance(appKey,appSecret);
+    }
+}

+ 1 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/WebSecurityConfig.java

@@ -47,7 +47,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 	
 	@Autowired
 	private SysUserDeviceService sysUserDeviceService;
-	
+
 	@Override
 	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
 		auth.authenticationProvider(daoAuthenticationProvider());
@@ -110,7 +110,6 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
         provider.setSysUserDeviceService(sysUserDeviceService);
 		// 禁止隐藏用户未找到异常
 		provider.setHideUserNotFoundExceptions(false);
-		
         return provider;
     }
 

+ 17 - 5
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationSuccessEventHandler.java

@@ -9,6 +9,12 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.yonge.cooleshow.auth.config.RongCloudConfig;
+import com.yonge.cooleshow.common.entity.ImResult;
+import com.yonge.cooleshow.common.entity.ImUserModel;
+import com.yonge.cooleshow.common.exception.BizException;
+import io.rong.models.response.TokenResult;
+import io.rong.models.user.UserModel;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -51,7 +57,6 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 	private SysUserService sysUserService;
 	@Autowired
 	private ObjectMapper objectMapper;
-	
 	@Autowired
 	private ClientDetailsService clientDetailsService;
 
@@ -83,10 +88,17 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 			if(StringUtils.isEmpty(name)){
 				name = sysUser.getUsername();
 			}
-			/*ImResult register = imFeignService.register(new ImUserModel(sysUser.getId().toString(), name, sysUser.getAvatar()));
-			sysUser.setImToken(register.getToken());
-			sysUser.setUpdateTime(new Date());
-			sysUserService.update(sysUser);*/
+			try {
+				TokenResult result = RongCloudConfig.rongCloud.user.register(new UserModel(sysUser.getId().toString(), name, sysUser.getAvatar()));
+				if(!result.code.equals(200)){
+					logger.error("获取用户token失败:{}",result.errorMessage);
+				}
+				sysUser.setImToken(result.getToken());
+				sysUser.setUpdateTime(new Date());
+				sysUserService.update(sysUser);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
 		}
 		Date date = new Date();
 		//修改添加登录信息

+ 3 - 4
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -30,7 +30,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 	private SysUserService sysUserService;
 	
 	private SysUserDeviceService sysUserDeviceService;
-	
+
 	@Override
 	protected void additionalAuthenticationChecks(UserDetails userDetails, Authentication authentication) throws AuthenticationException {
 
@@ -42,7 +42,6 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	protected UserDetails retrieveUser(String username, Authentication authentication) throws AuthenticationException {
-
 		LoginEntity loginEntity = (LoginEntity) authentication.getCredentials();
 		if (loginEntity == null) {
 			throw new BadCredentialsException("Bad credentials");
@@ -95,9 +94,9 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
 					// 添加userType以及附加信息
 					if (StringUtils.equals("STUDENT", clientId)) {
-						sysUserService.saveStudent(user.getId());
+						sysUserService.saveStudent(user);
 					} else if (StringUtils.equals("TEACHER", clientId)) {
-						sysUserService.saveTeacher(user.getId());
+						sysUserService.saveTeacher(user);
 					}
 					sysUserService.update(user);
 				}

+ 24 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/service/CustomTokenServices.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.auth.core.service;
 
+import java.util.Collection;
 import java.util.Date;
 import java.util.Set;
 import java.util.UUID;
@@ -33,6 +34,8 @@ import org.springframework.security.web.authentication.preauth.PreAuthenticatedA
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
+import com.yonge.cooleshow.common.security.SecurityConstants;
+
 /**
  * Base implementation for token services using random UUID values for the access token and refresh token values. The
  * main extension point for customizations is the {@link TokenEnhancer} which will be called after the access and
@@ -271,6 +274,27 @@ public class CustomTokenServices implements AuthorizationServerTokenServices, Re
 		}
 		return clientAuth.getClientId();
 	}
+	
+	public boolean revokeToken(String clientId, String phone){
+		Collection<OAuth2AccessToken> list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.PHONE_PRINCIPAL_PREFIX + phone);
+
+		if (list == null || list.size() == 0) {
+			list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.USERNAME_PRINCIPAL_PREFIX + phone);
+		} else {
+			list.addAll(tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.USERNAME_PRINCIPAL_PREFIX + phone));
+		}
+		if (list != null) {
+			for (OAuth2AccessToken accessToken : list) {
+				if (accessToken != null) {
+					if (accessToken.getRefreshToken() != null) {
+						tokenStore.removeRefreshToken(accessToken.getRefreshToken());
+					}
+					tokenStore.removeAccessToken(accessToken);
+				}
+			}
+		}
+		return true;
+	}
 
 	public boolean revokeToken(String tokenValue) {
 		OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);

+ 24 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysConfigDao.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.auth.dal.dao;
+
+import com.yonge.cooleshow.auth.api.entity.SysConfig;
+import com.yonge.cooleshow.common.dal.BaseDAO;
+import java.util.List;
+
+public interface SysConfigDao extends BaseDAO<Long, SysConfig> {
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/9
+     * @params [paramName]
+     * @return com.yonge.cooleshow.biz.dal.entity.SysConfig
+     * @describe 根据配置名称获取配置信息
+     */
+    SysConfig findByParamName(String paramName);
+
+    /**
+     * 获取value
+     * @param paramName
+     * @return
+     */
+    String findConfigValue(String paramName);
+}

+ 133 - 111
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java

@@ -2,126 +2,148 @@ package com.yonge.cooleshow.auth.dal.dao;
 
 import java.util.List;
 
-import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
-import com.yonge.cooleshow.auth.api.dto.UserSetReq;
-import com.yonge.cooleshow.auth.api.vo.UserSetVo;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import org.apache.ibatis.annotations.Param;
 
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
+import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
+import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.UserLockFlag;
+import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.common.dal.BaseDAO;
 import com.yonge.cooleshow.common.entity.ImUserModel;
 
 public interface SysUserDao extends BaseDAO<Long, SysUser> {
 
-	/**
-	 * 根据用户名查询对象
-	 * @param username
-	 * @return
-	 */
-	SysUser queryByUsername(String username);
-
-	/**
-	 * 根据手机号查询对象
-	 * @param phone
-	 * @return
-	 */
-	SysUser queryByPhone(String phone);
-
-	/**
-	 * 根据手机号查询对象
-	 * @param phone
-	 * @return
-	 */
-	SysUser queryLockByPhone(String phone);
-
-	/**
-	 * 根据手机号查询对象
-	 * @param phone
-	 * @return
-	 */
-	SysUser queryByPhoneAndClient(@Param("phone") String phone, @Param("client") String client);
-
-	/**
-	 * 修改密码
-	 * @param mobile
-	 * @param password
-	 */
-	void updatePassword(@Param("mobile") String mobile, @Param("password") String password);
-
-	/**
-	 * 获取用户基本信息
-	 * @param userId
-	 * @return
-	 */
-	ImUserModel getBasic(Long userId);
-
-	/**
-	 * 根据状态查询
-	 * @param status
-	 * @return
-	 */
-	List<SysUser> queryByStatus(UserLockFlag status);
-
-	/**
-	 * 获取随机盐不为null的一条数据
-	 * @param userType
-	 * @return
-	 */
-	SysUser findUserBySalt(String userType);
-
-	/**
-	 * 创建teacher表
-	 * @param userId
-	 * @param lesseeOrganId
-	 */
-	void insertTeacher(@Param("userId") Long userId);
-
-	/**
-	 * 获取教师分部编号
-	 * @param userId
-	 * @return
-	 */
-	Integer getTeacherOrganId(Long userId);
-
-	/**
-	 * 刷新用户token
-	 * @param userId
-	 * @param imToken
-	 */
-	void refreshImToken(@Param("userId") Long userId, @Param("imToken") String imToken);
-
-	/**
-	 * 保存student
-	 * @param userId
-	 */
+    /**
+     * 根据用户名查询对象
+     *
+     * @param username
+     * @return
+     */
+    SysUser queryByUsername(String username);
+
+    /**
+     * 根据手机号查询对象
+     *
+     * @param phone
+     * @return
+     */
+    SysUser queryByPhone(String phone);
+
+    /**
+     * 根据手机号查询对象
+     *
+     * @param phone
+     * @return
+     */
+    SysUser queryLockByPhone(String phone);
+
+    /**
+     * 根据手机号查询对象
+     *
+     * @param phone
+     * @return
+     */
+    SysUser queryByPhoneAndClient(@Param("phone") String phone, @Param("client") String client);
+
+    /**
+     * 修改密码
+     *
+     * @param mobile
+     * @param password
+     */
+    void updatePassword(@Param("mobile") String mobile, @Param("password") String password);
+
+    /**
+     * 获取用户基本信息
+     *
+     * @param userId
+     * @return
+     */
+    ImUserModel getBasic(Long userId);
+
+    /**
+     * 根据状态查询
+     *
+     * @param status
+     * @return
+     */
+    List<SysUser> queryByStatus(UserLockFlag status);
+
+    /**
+     * 获取随机盐不为null的一条数据
+     *
+     * @param userType
+     * @return
+     */
+    SysUser findUserBySalt(String userType);
+
+    /**
+     * 获取教师分部编号
+     *
+     * @param userId
+     * @return
+     */
+    Integer getTeacherOrganId(Long userId);
+
+    /**
+     * 刷新用户token
+     *
+     * @param userId
+     * @param imToken
+     */
+    void refreshImToken(@Param("userId") Long userId, @Param("imToken") String imToken);
+
+    /**
+     * 创建teacher表
+     *
+     * @param userId
+     */
+    void saveTeacher(@Param("userId") Long userId);
+
+    /**
+     * 保存student
+     *
+     * @param userId
+     */
     void saveStudent(@Param("userId") Long userId);
 
-	/***
-	 * 修改用户实名信息
-	 * @author liweifan
-	 * @param: teacherApplyDetailDto
-	 * @updateTime 2022/3/18 15:57
-	 * @return: java.lang.Integer
-	 */
-	Integer updateUserCard(@Param("param")RealnameAuthReq param,@Param("idcardInfo") IdcardInfoExtractor idcardInfo);
-
-	/***
-	 * 查询老师设置详情
-	 * @author liweifan
-	 * @param: id
-	 * @updateTime 2022/3/22 10:24
-	 * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
-	 */
-	UserSetVo getSetDetail(@Param("id") Long id);
-
-	/***
-	 * 修改老师设置信息
-	 * @author liweifan
-	 * @param: setReq
-	 * @param: id
-	 * @updateTime 2022/3/22 11:06
-	 */
-	void updatetSetDetail(@Param("param") UserSetReq setReq, @Param("id") Long id);
+
+    /***
+     * 修改用户实名信息
+     * @author liweifan
+     * @param: teacherApplyDetailDto
+     * @updateTime 2022/3/18 15:57
+     * @return: java.lang.Integer
+     */
+    Integer updateUserCard(@Param("param") RealnameAuthReq param);
+
+    /***
+     * 查询老师设置详情
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/3/22 10:24
+     * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
+     */
+    UserSetVo getSetDetail(@Param("id") Long id);
+
+    /***
+     * 修改老师设置信息
+     * @author liweifan
+     * @param: setReq
+     * @param: id
+     * @updateTime 2022/3/22 11:06
+     */
+    void updatetSetDetail(@Param("param") UserSetReq setReq, @Param("id") Long id);
+
+    /***
+     * 创建用户账户
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/4/14 17:07
+     */
+    void createUserAccount(@Param("userId") Long id);
+
+    List<SysUser> queryEmployeeList(SysUserQueryInfo queryInfo);
 }

+ 11 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysConfigService.java

@@ -0,0 +1,11 @@
+package com.yonge.cooleshow.auth.service;
+
+import com.yonge.cooleshow.auth.api.entity.SysConfig;
+import com.yonge.cooleshow.common.service.BaseService;
+
+public interface SysConfigService extends BaseService<Long, SysConfig> {
+
+    SysConfig findByParamName(String paramName);
+
+    String findConfigValue(String paramName);
+}

+ 14 - 4
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -1,13 +1,15 @@
 package com.yonge.cooleshow.auth.service;
 
+import java.util.List;
+
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
+import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
 import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.common.entity.ImUserModel;
 import com.yonge.cooleshow.common.service.BaseService;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 
 public interface SysUserService extends BaseService<Long, SysUser> {
 
@@ -135,14 +137,14 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      *
      * @param userId
      */
-    void saveStudent(Long userId);
+    void saveStudent(SysUser sysUser);
 
     /**
      * 保存teacher数据
      *
      * @param userId
      */
-    void saveTeacher(Long userId);
+    void saveTeacher(SysUser sysUser);
 
     /***
      * 更新用户实名信息
@@ -152,7 +154,7 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      * @updateTime 2022/3/22 15:11
      * @return: java.lang.Integer
      */
-    void updateUserCard(RealnameAuthReq realNameAuthDto, IdcardInfoExtractor idcardInfoExtractor);
+    void updateUserCard(RealnameAuthReq realNameAuthDto);
 
     /***
      * 用户设置页面详情
@@ -170,4 +172,12 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      * @updateTime 2022/3/22 11:04
      */
     void submitSetDetail(UserSetReq setReq, Long id);
+
+    /**
+     *  商城同步管理用户
+     *
+     * @param queryInfo
+     * @return
+     */
+    List<SysUser> queryEmployeeList(SysUserQueryInfo queryInfo);
 }

+ 33 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysConfigServiceImpl.java

@@ -0,0 +1,33 @@
+package com.yonge.cooleshow.auth.service.impl;
+
+import com.yonge.cooleshow.auth.api.entity.SysConfig;
+import com.yonge.cooleshow.auth.dal.dao.SysConfigDao;
+import com.yonge.cooleshow.auth.service.SysConfigService;
+import com.yonge.cooleshow.common.dal.BaseDAO;
+import com.yonge.cooleshow.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysConfigServiceImpl extends BaseServiceImpl<Long, SysConfig> implements SysConfigService {
+
+	@Autowired
+	private SysConfigDao sysConfigDao;
+
+	@Override
+	public BaseDAO<Long, SysConfig> getDAO() {
+		return sysConfigDao;
+	}
+
+	@Override
+	public SysConfig findByParamName(String paramName) {
+		return sysConfigDao.findByParamName(paramName);
+	}
+
+    @Override
+    public String findConfigValue(String paramName){
+        return sysConfigDao.findConfigValue(paramName);
+    }
+
+
+}

+ 39 - 24
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -3,26 +3,27 @@ package com.yonge.cooleshow.auth.service.impl;
 import java.util.Date;
 import java.util.List;
 
-import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
-import com.yonge.cooleshow.auth.api.dto.UserSetReq;
-import com.yonge.cooleshow.auth.api.vo.UserSetVo;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
+import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
+import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.auth.api.enums.YesOrNoEnum;
+import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.auth.dal.dao.SysUserDao;
+import com.yonge.cooleshow.auth.service.SysConfigService;
 import com.yonge.cooleshow.auth.service.SysRoleMenuService;
 import com.yonge.cooleshow.auth.service.SysUserRoleService;
 import com.yonge.cooleshow.auth.service.SysUserService;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.dal.BaseDAO;
 import com.yonge.cooleshow.common.entity.ImUserModel;
 import com.yonge.cooleshow.common.exception.BizException;
-import com.yonge.cooleshow.common.service.IdGeneratorService;
 import com.yonge.cooleshow.common.service.impl.BaseServiceImpl;
 
 @Service
@@ -30,16 +31,12 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
 
     @Autowired
     private SysUserDao sysUserDao;
-
     @Autowired
     private SysUserRoleService sysUserRoleService;
-
     @Autowired
     private SysRoleMenuService sysRoleMenuService;
     @Autowired
-    private SysUserService sysUserService;
-    @Autowired
-    private IdGeneratorService smsCodeService;
+    private SysConfigService sysConfigService;
 
     @Override
     public BaseDAO<Long, SysUser> getDAO() {
@@ -144,9 +141,13 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     @Override
     @Transactional(rollbackFor = Exception.class)
     public SysUserInfo registerUser(String phone, String clientId) {
+        SysUser sysUser = new SysUser();
+        sysUser.setPhone(phone);
+        String password = sysUser.getPhone().substring(sysUser.getPhone().length() - 6);
+        sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
+        String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
+        sysUser.setAvatar(defaultHeard);
         if (StringUtils.equalsIgnoreCase(clientId, "TEACHER")) {
-            SysUser sysUser = new SysUser();
-            sysUser.setPhone(phone);
             sysUser.setUserType("TEACHER");
             sysUserDao.insert(sysUser);
             //添加用户现金账户
@@ -154,15 +155,14 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
             //userFeignService.createCashAccount(sysUser.getId());
             //sysTenantAccount
             //创建teacher表
-            sysUserDao.insertTeacher(sysUser.getId());
+            sysUserDao.saveTeacher(sysUser.getId());
+            //创建老师账户
+            sysUserDao.createUserAccount(sysUser.getId());
             return queryUserInfoByPhone(phone);
         } else if (StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
-            SysUser sysUser = new SysUser();
-            sysUser.setPhone(phone);
             sysUser.setUserType("STUDENT");
-
             sysUserDao.insert(sysUser);
-            sysUserService.saveStudent(sysUser.getId());
+            saveStudent(sysUser);
             return queryUserInfoByPhone(phone);
         }
         return null;
@@ -175,18 +175,27 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     }
 
     @Override
-    public void saveStudent(Long userId) {
-        sysUserDao.saveStudent(userId);
+    @Transactional(rollbackFor = Exception.class)
+    public void saveStudent(SysUser sysUser) {
+        sysUserDao.saveStudent(sysUser.getId());
+        if(!sysUser.getUserType().contains("TEACHER")){
+            sysUserDao.createUserAccount(sysUser.getId());
+        }
     }
 
     @Override
-    public void saveTeacher(Long userId) {
-        sysUserDao.insertTeacher(userId);
+    @Transactional(rollbackFor = Exception.class)
+    public void saveTeacher(SysUser sysUser) {
+
+        sysUserDao.saveTeacher(sysUser.getId());
+        if(!sysUser.getUserType().contains("STUDENT")){
+            sysUserDao.createUserAccount(sysUser.getId());
+        }
     }
 
     @Override
-    public void updateUserCard(RealnameAuthReq realNameAuthDto, IdcardInfoExtractor idcardInfoExtractor) {
-        sysUserDao.updateUserCard(realNameAuthDto, idcardInfoExtractor);
+    public void updateUserCard(RealnameAuthReq realNameAuthDto) {
+        sysUserDao.updateUserCard(realNameAuthDto);
     }
 
     @Override
@@ -199,4 +208,10 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         sysUserDao.updatetSetDetail(setReq, id);
     }
 
+    @Override
+    public List<SysUser> queryEmployeeList(SysUserQueryInfo queryInfo) {
+
+        return sysUserDao.queryEmployeeList(queryInfo);
+    }
+
 }

+ 3 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/MenuController.java

@@ -40,6 +40,9 @@ public class MenuController extends BaseController {
 //        if(menuByPermission != null){
 //            return failed("权限标识不能重复");
 //        }
+        if (sysMenu.getParentId() == null) {
+            sysMenu.setParentId(0L);
+        }
         return succeed(sysMenuService.insert(sysMenu));
     }
 

+ 1 - 21
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -7,7 +7,6 @@ import io.swagger.annotations.ApiOperation;
 
 import java.io.IOException;
 import java.util.Base64;
-import java.util.Collection;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
@@ -38,7 +37,6 @@ import com.yonge.cooleshow.auth.service.SysUserService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.security.AuthUser;
-import com.yonge.cooleshow.common.security.SecurityConstants;
 import com.yonge.cooleshow.common.security.SecurityUtils;
 
 @RestController
@@ -147,25 +145,7 @@ public class TokenController extends BaseController {
 	@ApiOperation(value = "指定用户退出登录")
 	public HttpResponseResult<String> exitByPhone(@PathVariable("clientId") String clientId, @PathVariable("phone") String phone) {
 
-		Collection<OAuth2AccessToken> list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.PHONE_PRINCIPAL_PREFIX + phone);
-
-		if (list == null || list.size() == 0) {
-			list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.USERNAME_PRINCIPAL_PREFIX + phone);
-		} else {
-			list.addAll(tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.USERNAME_PRINCIPAL_PREFIX + phone));
-		}
-		if (list != null) {
-			for (OAuth2AccessToken accessToken : list) {
-				if (accessToken != null) {
-					if (accessToken.getRefreshToken() != null) {
-						tokenStore.removeRefreshToken(accessToken.getRefreshToken());
-					}
-					tokenStore.removeAccessToken(accessToken);
-				}
-			}
-		}
-
-		return succeed("退出成功");
+		return tokenService.revokeToken(clientId, phone) ? succeed("退出成功") : failed();
 	}
 
 	@GetMapping(value = "/checkToken",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)

+ 131 - 41
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -1,67 +1,81 @@
 package com.yonge.cooleshow.auth.web.controller;
 
-import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
-import com.yonge.cooleshow.auth.api.dto.UpdatePasswordDto;
-import com.yonge.cooleshow.auth.api.dto.UserSetReq;
-import com.yonge.cooleshow.auth.api.vo.UserSetVo;
-import com.yonge.cooleshow.common.constant.CommonConstants;
-import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import com.yonge.toolset.utils.idcard.IdcardValidator;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
 import java.util.Date;
+import java.util.List;
+
+import javax.validation.Valid;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
+import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
+import com.yonge.cooleshow.auth.api.dto.UpdatePasswordDto;
+import com.yonge.cooleshow.auth.api.dto.UserSetReq;
+import com.yonge.cooleshow.auth.api.entity.SysRole;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.vo.UserSetVo;
+import com.yonge.cooleshow.auth.core.service.CustomTokenServices;
+import com.yonge.cooleshow.auth.service.SysConfigService;
 import com.yonge.cooleshow.auth.service.SysRoleService;
 import com.yonge.cooleshow.auth.service.SysUserRoleService;
 import com.yonge.cooleshow.auth.service.SysUserService;
-import com.yonge.cooleshow.auth.web.controller.queryInfo.SysUserQueryInfo;
+import com.yonge.cooleshow.auth.web.controller.queryInfo.RoleQueryInfo;
+import com.yonge.cooleshow.common.constant.CommonConstants;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
-import com.yonge.cooleshow.common.page.QueryInfo;
 import com.yonge.cooleshow.common.security.AuthUser;
 import com.yonge.cooleshow.common.security.SecurityConstants;
 import com.yonge.cooleshow.common.security.SecurityUtils;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
+import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
 import com.yonge.toolset.utils.date.DateUtil;
-
-import javax.validation.Valid;
+import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
+import com.yonge.toolset.utils.idcard.IdcardValidator;
+import com.yonge.toolset.utils.string.StringUtil;
 
 @RestController()
 @RequestMapping("user")
 @Api(tags = "会员服务")
 public class UserController extends BaseController {
-
     @Autowired
     private SysUserService sysUserService;
     @Autowired
     private SysRoleService sysRoleService;
-    /*@Autowired
-    private ImFeignService imFeignService;*/
     @Autowired
     private SysUserRoleService sysUserRoleService;
     @Autowired
     private IdGeneratorService smsCodeService;
+
+	@Autowired
+	private CustomTokenServices tokenService;
+	
     @Value("${message.debugMode}")
     private boolean debugMode;
+    
     @Autowired
     private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
+    @Autowired
+    private SysConfigService sysConfigService;
 
     @ApiOperation(value = "分页查询用户信息")
     @ApiImplicitParams({@ApiImplicitParam(name = "userType", value = "用户类型", required = false, dataType = "String"),
@@ -73,6 +87,7 @@ public class UserController extends BaseController {
         return succeed(sysUserService.queryPage(queryInfo));
     }
 
+
     @ApiOperation(value = "查询用户信息接口")
     @GetMapping("/query")
     @PreAuthorize("@pcs.hasPermissions('user/query')")
@@ -118,10 +133,10 @@ public class UserController extends BaseController {
     }
 
     @PostMapping(value = "/updateSysUser", consumes = MediaType.APPLICATION_JSON_VALUE)
-    public boolean updateSysUser(@RequestBody SysUser user) {
+    public HttpResponseResult<Boolean> updateSysUser(@RequestBody SysUser user) {
         user.setUpdateTime(new Date());
         sysUserService.update(user);
-        return true;
+        return HttpResponseResult.succeed(true);
     }
 
     @ApiOperation(value = "新增用户")
@@ -130,10 +145,30 @@ public class UserController extends BaseController {
         return succeed(sysUserService.add(sysUser));
     }
 
-    @ApiOperation(value = "设置密码")
+    @ApiOperation(value = "设置用户密码")
     @PostMapping(value = "/setPassword", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
     @ApiImplicitParams({@ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String")})
+            @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long")})
+    public Object setPassword(String password, Long id) {
+        if (StringUtils.isEmpty(password) || null == id) {
+            return failed("参数校验失败");
+        }
+        SysUser sysUser = sysUserService.get(id);
+        if (sysUser == null) {
+            return failed("用户不存在");
+        }
+
+        password = new BCryptPasswordEncoder().encode(password);
+        sysUser.setPassword(password);
+        sysUser.setUpdateTime(new Date());
+        sysUserService.update(sysUser);
+        return succeed();
+    }
+
+    @ApiOperation(value = "设置用户名密码")
+    @PostMapping(value = "/setUsernameAndPassword", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    @ApiImplicitParams({@ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "username", value = "用户名", dataType = "String")})
     public Object setPassword(String password, String username) {
         if (StringUtils.isEmpty(password)) {
             return failed("参数校验失败");
@@ -146,9 +181,10 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        if (sysUser.getUserType().contains("TEACHER") || sysUser.getUserType().contains("SYSTEM")) {
-            sysUser.setRealName(username);
-        } else {
+        if(!StringUtil.isEmpty(username)){
+            if (sysUser.getUserType().contains("SYSTEM")) {
+                sysUser.setRealName(username);
+            }
             sysUser.setUsername(username);
         }
 		/*if(StringUtils.isEmpty(sysUser.getImToken())){
@@ -199,8 +235,7 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        String oldPassword = new BCryptPasswordEncoder().encode(updatePasswordDto.getOldPassword());
-        if (!oldPassword.equals(sysUser.getPassword())) {
+        if (!new BCryptPasswordEncoder().matches(updatePasswordDto.getOldPassword(), sysUser.getPassword())) {
             return failed("原密码错误");
         }
         sysUser.setPassword(new BCryptPasswordEncoder().encode(updatePasswordDto.getNewPasswordFirst()));
@@ -276,10 +311,22 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        if (sysUser.getId() != userId) {
+        if (sysUser.getId() != userId.longValue()) {
             return failed("非法操作");
         }
         sysUser.setLockFlag(lockFlag);
+        
+        if(lockFlag == 1){
+        	if(sysUser.getUserType().contains("STUDENT")){
+        		tokenService.revokeToken("STUDENT", sysUser.getPhone());
+        	}
+        	if(sysUser.getUserType().contains("TEACHER")){
+        		tokenService.revokeToken("TEACHER", sysUser.getPhone());
+        	}
+        	if(sysUser.getUserType().contains("SYSTEM")){
+        		tokenService.revokeToken("SYSTEM", sysUser.getPhone());
+        	}
+        }
         sysUser.setUpdateTime(new Date());
         sysUserService.update(sysUser);
         return succeed();
@@ -301,7 +348,7 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        if (sysUser.getId() != userId) {
+        if (sysUser.getId() != userId.longValue()) {
             return failed("非法操作");
         }
 
@@ -324,12 +371,13 @@ public class UserController extends BaseController {
                 throw new BizException("出生日期不可超过当前时间");
             }
             //手机号不能被占用
-            if(!StringUtil.isEmpty(sysUser.getPhone())){
+            if (!StringUtil.isEmpty(sysUser.getPhone())) {
                 SysUser newSysUser = sysUserService.queryByPhone(sysUser.getPhone());
                 if (newSysUser != null && !newSysUser.getId().equals(sysUser.getId())) {
                     return failed("手机号被占用");
                 }
             }
+            sysUser.setIsSuperAdmin(null);
             sysUserService.updateBaseInfo(sysUser);
             return succeed();
         }
@@ -387,13 +435,14 @@ public class UserController extends BaseController {
     @ApiOperation(value = "获取用户角色列表")
     @GetMapping("/getRole")
     @PreAuthorize("@pcs.hasPermissions('user/getRole')")
-    public Object getRole() {
+    public HttpResponseResult<List<SysRole>> getRole() {
         AuthUser user = SecurityUtils.getUser();
         if (user != null) {
             SysUser sysUser = sysUserService.get(user.getUserId());
             if (sysUser.getIsSuperAdmin()) {
-                QueryInfo queryInfo = new QueryInfo();
+            	RoleQueryInfo queryInfo = new RoleQueryInfo();
                 queryInfo.setRows(9999);
+                queryInfo.setIsEnable(true);
                 return succeed(sysRoleService.queryPage(queryInfo).getRows());
             }
             return succeed(sysRoleService.findRoleByUserId(user.getUserId()));
@@ -406,12 +455,11 @@ public class UserController extends BaseController {
             @ApiImplicitParam(name = "roleIds", value = "角色id,逗号分隔", required = true, dataType = "String")})
     @PostMapping(value = "/addRole", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
     @PreAuthorize("@pcs.hasPermissions('user/addRole')")
-    public Object getRole(String userId, String roleIds) {
+    public HttpResponseResult<Boolean> getRole(String userId, String roleIds) {
         if (StringUtils.isEmpty(userId) || StringUtils.isEmpty(roleIds)) {
             return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
         }
-        sysUserRoleService.batchInsert(Long.parseLong(userId), roleIds);
-        return succeed();
+        return status(sysUserRoleService.batchInsert(Long.parseLong(userId), roleIds));
     }
 
     @ApiOperation(value = "用户角色删除")
@@ -437,7 +485,7 @@ public class UserController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         SysUser user = sysUserService.get(authUser.getUserId());
-        if (user == null) {
+        if (user == null || null == user.getId()) {
             return failed("用户不存在");
         }
         IdcardValidator idcardValidator = new IdcardValidator();
@@ -449,13 +497,28 @@ public class UserController extends BaseController {
         //通过身份证号获取身份信息
         IdcardInfoExtractor idcardInfoExtractor = new IdcardInfoExtractor(realNameAuthDto.getIdCardNo(), validatedAllIdcard);
         //todo 通过环境,不做实名判断
-        boolean verify = realnameAuthenticationPlugin.verify(realNameAuthDto.getRealName(), realNameAuthDto.getIdCardNo());
-        if (!verify) {
+        try {
+            boolean verify = realnameAuthenticationPlugin.verify(realNameAuthDto.getRealName(), realNameAuthDto.getIdCardNo());
+            if (!verify) {
+                return failed("未通过实名认证");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
             return failed("未通过实名认证");
         }
+
         if (realNameAuthDto.getSave()) {
+            String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
+            if (StringUtil.isEmpty(user.getAvatar()) || user.getAvatar().equals(defaultHeard)) {
+                user.setAvatar(
+                        0 == idcardInfoExtractor.getGender() ? sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD_GIRL) : sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD_BOY));
+            }
+            realNameAuthDto.setUserId(user.getId());
+            realNameAuthDto.setGender(idcardInfoExtractor.getGender());
+            realNameAuthDto.setBirthday(idcardInfoExtractor.getBirthday());
+            realNameAuthDto.setAvatar(user.getAvatar());
             //实名认证通过后立刻保存
-            sysUserService.updateUserCard(realNameAuthDto, idcardInfoExtractor);
+            sysUserService.updateUserCard(realNameAuthDto);
         }
         return succeed(idcardInfoExtractor);
     }
@@ -468,7 +531,7 @@ public class UserController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         SysUser user = sysUserService.get(authUser.getUserId());
-        if (user == null) {
+        if (user == null || null == user.getId()) {
             return failed("用户不存在");
         }
         UserSetVo detail = sysUserService.getSetDetail(user.getId());
@@ -483,11 +546,38 @@ public class UserController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         SysUser user = sysUserService.get(authUser.getUserId());
-        if (user == null) {
+        if (user == null || null == user.getId()) {
             return failed("用户不存在");
         }
         //设置
         sysUserService.submitSetDetail(setReq, user.getId());
         return succeed(sysUserService.getSetDetail(user.getId()));
     }
+
+    @PostMapping(value = "/bindOpenId")
+    public HttpResponseResult<Boolean> bindOpenId(@RequestBody SysUser param) {
+        AuthUser authUser = SecurityUtils.getUser();
+        if (authUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        SysUser user = sysUserService.get(authUser.getUserId());
+        if (user == null || null == user.getId()) {
+            return failed("用户不存在");
+        }
+        user.setWechatId(
+                StringUtil.isEmpty(param.getWechatId()) ? user.getWxOpenid() : param.getWechatId()
+        );
+        user.setQqOpenid(
+                StringUtil.isEmpty(param.getQqOpenid()) ? user.getQqOpenid() : param.getQqOpenid()
+        );
+        user.setUpdateTime(new Date());
+        sysUserService.update(user);
+        return HttpResponseResult.succeed(true);
+    }
+
+    @ApiOperation(value = "查询平台用户信息")
+    @PostMapping(value = "/list")
+    public HttpResponseResult<List<SysUser>> page(@RequestBody SysUserQueryInfo queryInfo) {
+        return succeed(sysUserService.queryEmployeeList(queryInfo));
+    }
 }

+ 16 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/queryInfo/RoleQueryInfo.java

@@ -0,0 +1,16 @@
+package com.yonge.cooleshow.auth.web.controller.queryInfo;
+
+import com.yonge.cooleshow.common.page.QueryInfo;
+
+public class RoleQueryInfo extends QueryInfo {
+
+	private Boolean isEnable;
+
+	public Boolean getIsEnable() {
+		return isEnable;
+	}
+
+	public void setIsEnable(Boolean isEnable) {
+		this.isEnable = isEnable;
+	}
+}

+ 88 - 0
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysConfigMapper.xml

@@ -0,0 +1,88 @@
+<?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.yonge.cooleshow.auth.dal.dao.SysConfigDao">
+
+	<resultMap type="com.yonge.cooleshow.auth.api.entity.SysConfig" id="SysConfig">
+		<result column="id_" property="id" />
+		<result column="param_name_" property="paramName" />
+		<result column="param_value_" property="paramValue" />
+		<result column="description_" property="description" />
+		<result column="create_on_" property="createOn" />
+		<result column="modify_on_" property="modifyOn" />
+		<result column="group_" property="group" />
+		<result column="modify_by_" property="modifyBy" />
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="SysConfig">
+		SELECT * FROM sys_config WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="SysConfig">
+		SELECT * FROM sys_config where 1=1
+		<if test="group != null">
+			and group_ = #{group}
+		</if>
+		ORDER BY id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.yonge.cooleshow.auth.api.entity.SysConfig"
+		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO sys_config
+		(id_,param_name_,param_value_,description_,create_on_,modify_on_,group_,modify_by_)
+		VALUES(#{id},#{paramName},#{paramValue},#{description},#{createOn},#{modifyOn},#{group},#{modifyBy})
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.yonge.cooleshow.auth.api.entity.SysConfig">
+		UPDATE sys_config
+		<set>
+			<if test="modifyOn != null">
+				modify_on_ = #{modifyOn},
+			</if>
+			<if test="paramValue != null">
+				param_value_ = #{paramValue},
+			</if>
+			<if test="description != null">
+				description_ = #{description},
+			</if>
+			<if test="paramName != null">
+				param_name_ = #{paramName},
+			</if>
+			<if test="group != null">
+				group_ = #{group},
+			</if>
+			<if test="modifyBy != null">
+				modify_by_ = #{modifyBy},
+			</if>
+		</set>
+		WHERE id_ = #{id}
+	</update>
+
+    <!-- 根据主键删除一条记录 -->
+	<delete id="delete">
+		DELETE FROM sys_config WHERE id_ = #{id}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="SysConfig" parameterType="map">
+		SELECT * FROM sys_config ORDER BY id_
+		<include refid="global.limit" />
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM sys_config
+	</select>
+
+	<select id="findByParamName" resultMap="SysConfig">
+		SELECT * FROM sys_config WHERE param_name_ = #{paramName}
+	</select>
+    <select id="findConfigValue" resultType="java.lang.String">
+		SELECT param_value_ FROM sys_config WHERE param_name_ = #{paramName}
+	</select>
+</mapper>

+ 16 - 2
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysRoleMapper.xml

@@ -67,17 +67,31 @@
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="SysRole" parameterType="map">
-        SELECT * FROM sys_role WHERE del_flag_ = 0 ORDER BY update_time_ DESC
+        SELECT * FROM sys_role WHERE del_flag_ = 0
+        	<if test="search != null and search != ''">
+        		and role_name_ like CONCAT('%',#{search},'%')
+        	</if>
+        	<if test="isEnable != null">
+        		and is_enable_ = #{isEnable}
+        	</if>
+        ORDER BY update_time_ DESC
         <include refid="global.limit"/>
     </select>
 
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM sys_role WHERE del_flag_ = 0
+        	<if test="search != null and search != ''">
+        		and role_name_ like CONCAT('%',#{search},'%')
+        	</if>
+        	<if test="isEnable != null">
+        		and is_enable_ = #{isEnable}
+        	</if>
 	</select>
 
     <select id="findRoleByUserId" resultMap="SysRole">
-		SELECT sr.* FROM sys_user_role sur LEFT JOIN sys_role sr ON sur.role_id_ = sr.id_ WHERE sur.user_id_ = #{userId} AND sr.del_flag_ = 0
+		SELECT sr.* FROM sys_user_role sur LEFT JOIN sys_role sr ON sur.role_id_ = sr.id_
+		WHERE sur.user_id_ = #{userId} and sr.is_enable_ = 1 AND sr.del_flag_ = 0
 	</select>
 
     <select id="findRoleByCode" resultMap="SysRole">

+ 39 - 20
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -65,13 +65,15 @@
         VALUES(#{isSuperAdmin},#{imToken},#{id},#{username},#{salt},#{phone},#{avatar},now(),now(),#{wxOpenid},#{qqOpenid},#{userType},
         #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{wechatId},#{realName},#{certificateType})
     </insert>
-    <insert id="insertTeacher">
-        INSERT INTO teacher
-        (user_id_,create_time_,update_time_)VALUES(#{userId},NOW(),NOW())
+    <insert id="saveTeacher">
+        INSERT INTO teacher (user_id_,create_time_,update_time_)VALUES(#{userId},NOW(),NOW())
     </insert>
     <insert id="saveStudent">
         INSERT INTO student (user_id_,create_time_,update_time_) VALUES(#{userId},NOW(),NOW())
     </insert>
+    <insert id="createUserAccount">
+        INSERT INTO user_cash_account (user_id_,create_time_,update_time_)VALUES(#{userId},NOW(),NOW())
+    </insert>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.yonge.cooleshow.auth.api.entity.SysUser">
@@ -205,20 +207,23 @@
 
     <update id="updateUserCard">
         UPDATE sys_user
-        <set>
+        set
             <if test="param.realName != null and param.realName != ''">
                 real_name_ = #{param.realName},
             </if>
             <if test="param.idCardNo != null and param.idCardNo != ''">
                 id_card_no_ = #{param.idCardNo},
             </if>
-            <if test="idcardInfo.gender != null">
-                gender_ = #{idcardInfo.gender},
+            <if test="param.gender != null">
+                gender_ = #{param.gender},
             </if>
-            <if test="idcardInfo.birthdate != null and idcardInfo.birthdate != ''">
-                birthdate_ = #{idcardInfo.birthdate},
+            <if test="param.birthday != null">
+                birthdate_ = #{param.birthday},
             </if>
-        </set>
+            <if test="param.avatar != null and param.avatar != ''">
+                avatar_ = #{param.avatar},
+            </if>
+        update_time_ = now()
         WHERE id_ = #{param.userId}
     </update>
 
@@ -235,17 +240,31 @@
 
     <update id="updatetSetDetail">
         UPDATE sys_user
-        <set>
-            <if test="param.avatar != null and param.avatar != ''">
-                avatar_ = #{param.avatar},
-            </if>
-            <if test="param.username != null and param.username != ''">
-                username_ = #{param.username},
-            </if>
-            <if test="param.gender != null">
-                gender_ = #{param.gender},
-            </if>
-        </set>
+        set
+        <if test="param.avatar != null and param.avatar != ''">
+            avatar_ = #{param.avatar},
+        </if>
+        <if test="param.username != null and param.username != ''">
+            username_ = #{param.username},
+        </if>
+        <if test="param.gender != null">
+            gender_ = #{param.gender},
+        </if>
+        update_time_ = now()
         WHERE id_ = #{id}
     </update>
+
+    <select id="queryEmployeeList" resultMap="SysUser">
+        select  su.*
+        from employee e
+        left join sys_user su on su.id_ = e.user_id_
+        <where>
+            <if test="createStartDate != null and createStartDate != ''">
+                and #{createStartDate} &lt;= e.create_time_
+            </if>
+            <if test="createEndDate != null and createEndDate != ''">
+                and #{createEndDate} &gt; e.create_time_
+            </if>
+        </where>
+    </select>
 </mapper>

+ 1 - 1
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserRoleMapper.xml

@@ -48,7 +48,7 @@
 		SELECT COUNT(*) FROM sys_user_role
 	</select>
 
-    <select id="queryRoleIdListByUserId" resultType="int" parameterType="long">
+    <select id="queryRoleIdListByUserId" resultType="long" parameterType="long">
 		SELECT ur.role_id_ FROM sys_user_role ur left join sys_role r on ur.role_id_ = r.id_ where ur.user_id_ = #{userId} and r.del_flag_ = 0
 	</select>
 

+ 4 - 4
cooleshow-cms/pom.xml

@@ -68,6 +68,10 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
+		<dependency>
+			<groupId>com.yonge.toolset</groupId>
+			<artifactId>utils</artifactId>
+		</dependency>
 	</dependencies>
 	
 	<build>
@@ -76,10 +80,6 @@
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
 			</plugin>
-			<plugin>
-				<groupId>com.spotify</groupId>
-				<artifactId>docker-maven-plugin</artifactId>
-			</plugin>
 		</plugins>
 	</build>
 </project>

+ 0 - 85
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterCatalogController.java

@@ -1,85 +0,0 @@
-package com.yonge.cooleshow.cms.controller;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-
-import java.util.Date;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.yonge.cooleshow.cms.dal.entity.HelpCenterCatalog;
-import com.yonge.cooleshow.cms.service.HelpCenterCatalogService;
-import com.yonge.cooleshow.cms.service.HelpCenterContentService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.toolset.log.model.AuditLogAnnotation;
-
-@RestController
-@RequestMapping("helpCenterCatalog")
-@Api(tags = "帮助中心分类")
-public class HelpCenterCatalogController extends BaseController {
-
-	@Autowired
-	private HelpCenterCatalogService helpCenterCatalogService;
-
-	@Autowired
-	private HelpCenterContentService helpCenterContentService;
-
-	@ApiOperation("分类列表分页查询")
-	@GetMapping(value = "list")
-	@ApiImplicitParams({ @ApiImplicitParam(name = "parentId", value = "父分类编号(可为空)", required = true, dataType = "Integer"),
-			@ApiImplicitParam(name = "status", value = "状态(1,显示 0,隐藏;可为空)", required = true, dataType = "Integer") })
-	public Object list(Long parentId, Integer status) {
-		List<HelpCenterCatalog> dataList = helpCenterCatalogService.queryByParentId(parentId, status);
-		return succeed(dataList);
-	}
-
-	@ApiOperation("分类详情查询")
-	@GetMapping(value = "get")
-	@ApiImplicitParam(name = "id", value = "分类编号", required = true, dataType = "Integer", paramType = "path")
-	public Object findHelpCatalogById(Long id) {
-		if (id == null || id <= 0)
-			return failed("请检查输入的ID");
-		return succeed(helpCenterCatalogService.get(id));
-	}
-
-	@ApiOperation("修改分类")
-	@PostMapping(value = "modify", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	@AuditLogAnnotation(operateName = "帮助中心分类修改",interfaceURL = "helpCenterCatalog/modify")
-	public Object modifyHelpCatalog(HelpCenterCatalog helpCatalog) {
-		if (helpCatalog == null)
-			return failed("参数输入有误");
-		if (helpCatalog.getId() != null && helpCatalog.getId() > 0) {
-			helpCatalog.setModifyOn(new Date());
-			return helpCenterCatalogService.updateCatalog(helpCatalog) ? succeed() : failed("修改失败");
-		} else {
-			if (StringUtils.isBlank(helpCatalog.getText())) {
-				return failed("帮助分类不能为空");
-			}
-			helpCatalog.setCreateOn(new Date());
-			return helpCenterCatalogService.insert(helpCatalog) > 0 ? succeed() : failed("添加失败");
-		}
-	}
-
-	@ApiOperation("删除分类")
-	@PostMapping(value = "delete", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	@ApiImplicitParam(name = "id", value = "分类编号", required = true, dataType = "Integer", paramType = "path")
-	@AuditLogAnnotation(operateName = "帮助中心分类删除",interfaceURL = "helpCenterCatalog/delete")
-	public Object delHelpCatalog(Long id) {
-		if (id == null || id <= 0)
-			return failed("ID解析失败");
-		List<HelpCenterCatalog> list = helpCenterCatalogService.queryByParentId(id, null);
-		if (list != null && list.size() > 0) {
-			return failed("删除失败,请先删除子集分类");
-		}
-		return helpCenterCatalogService.deleteCatalog(id) ? succeed() : failed("删除失败");
-	}
-}

+ 125 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterContentController.java

@@ -0,0 +1,125 @@
+package com.yonge.cooleshow.cms.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import com.yonge.cooleshow.cms.controller.queryinfo.HelpCenterContentQueryInfo;
+import com.yonge.cooleshow.cms.dal.entity.HelpCenterContent;
+import com.yonge.cooleshow.cms.service.HelpCenterContentService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.toolset.log.model.AuditLogAnnotation;
+
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping("helpCenterContent")
+@Api(tags = "帮助中心/公告内容")
+public class HelpCenterContentController extends BaseController {
+
+	@Autowired
+	private HelpCenterContentService helpCenterContentService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "帮助中心/公告内容列表分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PostMapping(value = "list", consumes="application/json", produces="application/json")
+	public Object findHelpContentByCondition(@Valid @RequestBody HelpCenterContentQueryInfo queryInfo) {
+
+		PageInfo<HelpCenterContent> data = helpCenterContentService.queryPage(queryInfo);
+		return succeed(data);
+	}
+
+	@ApiOperation("帮助中心/公告内容明细查询")
+	@GetMapping(value = "get/{id}")
+	@ApiImplicitParam(name = "id", value = "编号", required = true, dataType = "Integer", paramType = "path")
+	public Object findHelpContentByKey(@PathVariable("id") Long id) {
+		if (id == null || id <= 0) {
+			return failed("请检查输入的参数");
+		}
+		return succeed(helpCenterContentService.get(id));
+	}
+
+	@ApiOperation(value = "新增/修改帮助中心/公告内容", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PostMapping(value = "modify",consumes="application/json", produces="application/json")
+	public Object modifyHelpContent(@Valid @RequestBody HelpCenterContent helpContent) {
+		if (helpContent == null) {
+			return failed("参数输入有误");
+		}
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null || sysUser.getId() == null) {
+			return failed("用户信息获取失败");
+		}
+		if (helpContent.getId() != null && helpContent.getId() > 0) {
+
+			HelpCenterContent helpCenterContent = helpCenterContentService.get(helpContent.getId());
+			if (helpCenterContent == null) {
+				return failed("未找到相关信息");
+			}
+			if (helpCenterContent.getStatus() == 1) {
+				return failed("启用状态下,不能修改");
+			}
+
+			helpContent.setStatus(0);
+			helpContent.setUpdateBy(sysUser.getId());
+			helpContent.setModifyOn(new Date());
+			return helpCenterContentService.update(helpContent) > 0 ? succeed() : failed("修改失败");
+		} else {
+			if (StringUtils.isBlank(helpContent.getContent())) {
+				return failed("帮助内容不能为空");
+			}
+			if (StringUtils.isBlank(helpContent.getTitle())) {
+				return failed("帮助中心标题不能为空");
+			}
+			if (helpContent.getCatalogId() < 0) {
+				return failed("请设置分类");
+			}
+			helpContent.setStatus(0);
+			helpContent.setUpdateBy(sysUser.getId());
+			helpContent.setModifyOn(new Date());
+			helpContent.setCreateOn(new Date());
+			helpContent.setCreateBy(sysUser.getId());
+			return helpCenterContentService.insert(helpContent) > 0 ? succeed() : failed("添加失败");
+		}
+	}
+
+	@ApiOperation("删除帮助中心/公告内容")
+	@PostMapping(value = "delete/{id}")
+	@ApiImplicitParam(name = "id", value = "编号", required = true, dataType = "Integer", paramType = "path")
+	public Object delHelpContent(@PathVariable("id") Long id) {
+		if (id == null || id <= 0)
+			return failed("ID解析失败");
+		HelpCenterContent helpCenterContent = helpCenterContentService.get(id);
+		if (helpCenterContent == null) {
+			return failed("未找到相关信息");
+		}
+		if (helpCenterContent.getStatus() == 1) {
+			return failed("启用状态下,不能删除");
+		}
+		return helpCenterContentService.delete(id) > 0 ? succeed() : failed("删除失败");
+	}
+
+	@ApiOperation("启用/禁用")
+	@PostMapping(value = "status/{id}")
+	@ApiImplicitParam(name = "id", value = "编号", required = true, dataType = "Integer", paramType = "path")
+	public Object statusHelpContent(@PathVariable("id") Long id) {
+		if (id == null || id <= 0)
+			return failed("ID解析失败");
+		HelpCenterContent helpCenterContent = helpCenterContentService.get(id);
+		if (helpCenterContent == null) {
+			return failed("未找到相关信息");
+		}
+		return succeed(helpCenterContentService.status(id));
+	}
+}

+ 0 - 89
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterContentControlller.java

@@ -1,89 +0,0 @@
-package com.yonge.cooleshow.cms.controller;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-
-import java.util.Date;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.yonge.cooleshow.cms.controller.queryinfo.HelpCenterContentQueryInfo;
-import com.yonge.cooleshow.cms.dal.entity.HelpCenterContent;
-import com.yonge.cooleshow.cms.service.HelpCenterCatalogService;
-import com.yonge.cooleshow.cms.service.HelpCenterContentService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.page.PageInfo;
-import com.yonge.toolset.log.model.AuditLogAnnotation;
-
-@RestController
-@RequestMapping("helpCenterContent")
-@Api(tags = "帮助中心内容")
-public class HelpCenterContentControlller extends BaseController {
-
-	@Autowired
-	private HelpCenterContentService helpCenterContentService;
-
-	@Autowired
-	private HelpCenterCatalogService helpCenterCatalogService;
-
-	@ApiOperation("帮助中心内容列表分页查询")
-	@GetMapping(value = "list")
-	public Object findHelpContentByCondition(HelpCenterContentQueryInfo queryInfo) {
-
-		PageInfo<HelpCenterContent> data = helpCenterContentService.queryPage(queryInfo);
-		return succeed(data);
-	}
-
-	@ApiOperation("帮助中心内容明细查询")
-	@GetMapping(value = "get")
-	@ApiImplicitParam(name = "id", value = "编号", required = true, dataType = "Integer", paramType = "path")
-	public Object findHelpContentByKey(Long id) {
-		if (id == null || id <= 0) {
-			return failed("请检查输入的参数");
-		}
-		return succeed(helpCenterContentService.get(id));
-	}
-
-	@ApiOperation("修改帮助中心内容")
-	@PostMapping(value = "modify", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	@AuditLogAnnotation(operateName = "帮助中心内容修改",interfaceURL = "helpCenterContent/modify")
-	public Object modifyHelpContent(HelpCenterContent helpContent) {
-		if (helpContent == null) {
-			return failed("参数输入有误");
-		}
-
-		if (helpContent.getId() != null && helpContent.getId() > 0) {
-			helpContent.setModifyOn(new Date());
-			return helpCenterContentService.update(helpContent) > 0 ? succeed() : failed("修改失败");
-		} else {
-			if (StringUtils.isBlank(helpContent.getContent())) {
-				return failed("帮助内容不能为空");
-			}
-			if (StringUtils.isBlank(helpContent.getTitle())) {
-				return failed("帮助中心标题不能为空");
-			}
-			if (helpContent.getCatalogId() < 0) {
-				return failed("请选择分类");
-			}
-			helpContent.setCreateOn(new Date());
-			return helpCenterContentService.insert(helpContent) > 0 ? succeed() : failed("添加失败");
-		}
-	}
-
-	@ApiOperation("删除帮助中心内容")
-	@PostMapping(value = "delete", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	@ApiImplicitParam(name = "id", value = "编号", required = true, dataType = "Integer", paramType = "path")
-	@AuditLogAnnotation(operateName = "帮助中心内容删除",interfaceURL = "helpCenterContent/delete")
-	public Object delHelpContent(Long id) {
-		if (id == null || id <= 0)
-			return failed("ID解析失败");
-		return helpCenterContentService.delete(id) > 0 ? succeed() : failed("删除失败");
-	}
-}

+ 126 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/MusicTheoryController.java

@@ -0,0 +1,126 @@
+package com.yonge.cooleshow.cms.controller;
+
+import com.yonge.cooleshow.cms.dal.entity.SysNewsType;
+import com.yonge.cooleshow.cms.dto.SysNewsTypeDto;
+import com.yonge.cooleshow.cms.dto.search.MusicTheorySearch;
+import com.yonge.cooleshow.cms.service.SysNewsTypeService;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.cooleshow.common.page.QueryInfo;
+import com.yonge.toolset.utils.string.StringUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Date;
+
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.failed;
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.succeed;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-26
+ */
+@RestController
+@RequestMapping("music/theory")
+@Api(tags = "乐理管理")
+public class MusicTheoryController {
+
+    @Autowired
+    private SysNewsTypeService newsTypeService;
+
+
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "乐理章节详情", notes = "传入id")
+    public HttpResponseResult<SysNewsType> detail(@ApiParam(value = "编号", required = true) @PathVariable("id") Long id) {
+        return succeed(newsTypeService.get(id));
+    }
+
+    @PostMapping(value = "/page", consumes="application/json", produces="application/json")
+    @ApiOperation(value = "乐理章节详情查询分页", httpMethod="POST", consumes="application/json", produces="application/json")
+    public HttpResponseResult<PageInfo<SysNewsType>> page(@Valid @RequestBody MusicTheorySearch query) {
+        query.setParentId(6L);
+        PageInfo<SysNewsType> pages = newsTypeService.queryPage( query);
+        return succeed(pages);
+    }
+
+
+    /**
+     * 新增
+     */
+    @PostMapping(value = "/save",  consumes="application/json", produces="application/json")
+    @ApiOperation(value = "乐理章节详情新增", httpMethod="POST", consumes="application/json", produces="application/json")
+    public HttpResponseResult<Boolean> save( @RequestBody SysNewsType newsType) {
+        if (newsType.getOrder() == null) {
+            return failed("排序不能为空");
+        }
+        if (StringUtil.isEmpty(newsType.getName())) {
+            return failed("章节名称不能为空");
+        }
+        newsType.setDelFlag(false);
+        newsType.setParentId(6L);
+        newsType.setCreateTime(new Date());
+        newsType.setUpdateTime(new Date());
+
+        return succeed(newsTypeService.insert(newsType) > 0);
+    }
+
+    /**
+     * 修改
+     */
+    @PostMapping(value =  "/update",  consumes="application/json", produces="application/json")
+    @ApiOperation(value = "乐理章节详情修改", httpMethod="POST", consumes="application/json", produces="application/json")
+    public HttpResponseResult<Boolean> update(  @RequestBody SysNewsType newsType) {
+        if (newsType.getOrder() == null) {
+            return failed("排序不能为空");
+        }
+        if (StringUtil.isEmpty(newsType.getName())) {
+            return failed("章节名称不能为空");
+        }
+        if (newsType.getId() == null) {
+            return failed("章节id不能为空");
+        }
+        newsType.setDelFlag(false);
+        newsType.setParentId(6L);
+        newsType.setUpdateTime(new Date());
+        return succeed(newsTypeService.update(newsType)>0);
+    }
+
+    /**
+     * 删除
+     */
+    @PostMapping("/remove/{id}")
+    @ApiOperation(value = "乐理章节详情逻辑删除", notes = "传入id")
+    public HttpResponseResult<Boolean> remove(@ApiParam(value = "编号", required = true) @PathVariable Long id) {
+        if (StringUtil.isEmpty(id)) {
+            return failed("参数不能为空");
+        }
+        SysNewsType sysNewsType = newsTypeService.get(id);
+        if (sysNewsType == null || sysNewsType.getParentId() != 6) {
+            return failed("未找到乐理章节");
+        }
+
+        return succeed(newsTypeService.delete(id) > 0);
+    }
+
+
+    /**
+     * 删除
+     */
+    @PostMapping("/app/page")
+    @ApiOperation(value = "app乐理知识")
+    public HttpResponseResult<PageInfo<SysNewsTypeDto>> appPage(@RequestBody QueryInfo query) {
+
+        return succeed(newsTypeService.appPage(query));
+    }
+
+
+}

+ 167 - 71
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java

@@ -1,127 +1,223 @@
 package com.yonge.cooleshow.cms.controller;
 
+import com.yonge.cooleshow.cms.dal.entity.NewsStatusEnum;
+import com.yonge.cooleshow.cms.dto.AppHomeDto;
+import com.yonge.cooleshow.cms.dto.AppParam;
+import com.yonge.cooleshow.cms.dto.SysNewsInformationDto;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.cms.controller.queryinfo.NewsInformationQueryInfo;
-import com.yonge.cooleshow.cms.dal.dao.StudentRegistrationDao;
-import com.yonge.cooleshow.cms.dal.dao.SysNewsInformationDao;
 import com.yonge.cooleshow.cms.dal.entity.SysNewsInformation;
 import com.yonge.cooleshow.cms.service.SysNewsInformationService;
-import com.yonge.cooleshow.cms.service.SysNewsTypeService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.toolset.log.model.AuditLogAnnotation;
 import com.yonge.toolset.utils.collection.MapUtil;
 
+import javax.validation.Valid;
+
 @RestController
 @RequestMapping("news")
-@Api(tags = "资讯服务")
+@Api(tags = "资讯/广告/闪页/轮播图服务")
 public class NewsController extends BaseController {
 
 	@Autowired
 	private SysNewsInformationService sysNewsInformationService;
-	
-	@Autowired
-	private SysNewsTypeService sysNewsTypeService;
-	
-	@Autowired
-	private SysNewsInformationDao sysNewsInformationDao;
-	
+
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
-	
-	@Autowired
-	private StudentRegistrationDao studentRegistrationDao;
-
-	@ApiOperation("资讯列表分页查询")
-	@GetMapping(value = "/list")
-	public Object getList(NewsInformationQueryInfo queryInfo) {
-		
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-		int count = sysNewsInformationDao.queryCount(params);
-		if(count == 0){
-			queryInfo.setMemo(null);
-		}
-		return succeed(sysNewsInformationService.queryPage(queryInfo));
-	}
 
-	@ApiOperation("资讯列表分页查询")
-	@GetMapping(value = "/queryPage")
-	public Object queryPage(NewsInformationQueryInfo queryInfo) {
+	@ApiOperation(value = "资讯/广告/闪页/轮播图 列表分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PostMapping(value = "/page",  consumes="application/json", produces="application/json")
+	public HttpResponseResult<PageInfo<SysNewsInformationDto>> getList(@Valid @RequestBody NewsInformationQueryInfo queryInfo) {
 		
-		Map<String, Object> params = new HashMap<String, Object>();
+		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
-		int count = sysNewsInformationDao.queryCount(params);
-		if(count == 0){
-			queryInfo.setMemo(null);
-		}
-		return succeed(sysNewsInformationService.queryPage(queryInfo));
-	}
-
-	@ApiOperation("资讯类型列表查询")
-	@GetMapping(value = "/typeList")
-	public Object getTypeList(Long parentId) {
-		return succeed(sysNewsTypeService.queryByParentId(parentId));
+		return succeed(sysNewsInformationService.selectPage(queryInfo));
 	}
 
-	@ApiOperation("资讯列表分页查询")
-	@GetMapping(value = "/homeList")
-	public Object getHomeList(NewsInformationQueryInfo queryInfo) {
-		queryInfo.setRows(10);
-		SysUser user = sysUserFeignService.queryUserInfo();
-		return succeed(sysNewsInformationService.getHomeList(user, queryInfo));
-	}
 
-	@ApiOperation("查询资讯详情")
+	@ApiOperation("查询资讯/广告/闪页/轮播图 详情")
 	@ApiImplicitParam(name = "id", value = "资讯ID编号", required = true, dataType = "Long", paramType = "path")
-	@GetMapping(value = "/query")
-	public Object query(Long id) {
+	@GetMapping(value = "/query/{id}")
+	public HttpResponseResult<SysNewsInformationDto> query(@PathVariable Long id) {
 
 		return succeed(sysNewsInformationService.queryById(id));
 	}
 
-	@ApiOperation("新增资讯")
-	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@ApiOperation(value = "新增资讯/广告/闪页/轮播图 ", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PostMapping(value = "/add",  consumes="application/json", produces="application/json")
 	@AuditLogAnnotation(operateName = "资讯新增",interfaceURL = "news/add")
-	@PreAuthorize("@pcs.hasPermissions('news/add')")
-	public Object add(SysNewsInformation newsInfo) {
+	// @PreAuthorize("@pcs.hasPermissions('news/add')")
+	public Object add(@Valid @RequestBody  SysNewsInformation newsInfo) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null || sysUser.getId() == null) {
+			return failed("用户信息获取失败");
+		}
+		HttpResponseResult<Object> check = check(newsInfo);
+		if (!check.getStatus()) {
+			return check;
+		}
+		newsInfo.setStatus(NewsStatusEnum.HIDDEN);
+		newsInfo.setCreateTime(new Date());
+		newsInfo.setCreateBy(sysUser.getId());
+		newsInfo.setUpdateTime(new Date());
+		newsInfo.setUpdateBy(sysUser.getId());
 		return succeed(sysNewsInformationService.insert(newsInfo));
 	}
 
-	@ApiOperation("更新资讯")
-	@PostMapping(value = "/update", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	HttpResponseResult<Object> check(SysNewsInformation newsInfo) {
+
+		// 1 2 3 4 5 6
+		if (StringUtil.isEmpty(newsInfo.getTitle())) {
+			return failed("标题不能为空");
+		}
+		// 6
+		if (newsInfo.getSubType() == null && newsInfo.getType() == 6) {
+			return failed("章节不能为空");
+		}
+		// 1 2 3 4 5 6
+		if (StringUtil.isEmpty(newsInfo.getCoverImage())) {
+			return failed("封面不能为空");
+		}
+		// 1 4 6
+		if (newsInfo.getType() == 1 ||newsInfo.getType() == 4 || newsInfo.getType() == 6) {
+			if (newsInfo.getOrder() == null) {
+				return failed("排序值不能为空");
+			}
+		}
+
+		// 1 6
+		if (newsInfo.getType() == 1  || newsInfo.getType() == 6) {
+			if (StringUtil.isEmpty(newsInfo.getContent())) {
+				return failed("内容不能为空");
+			}
+		}
+		// 2 3 4
+		if (newsInfo.getType() == 2 ||newsInfo.getType() == 3 ||newsInfo.getType() == 4 ) {
+			if (newsInfo.getOnlineTime() == null || newsInfo.getOfflineTime() == null) {
+				return failed("生效时间不能为空");
+			}
+		}
+		// 2
+		if (newsInfo.getType() == 2) {
+			if (StringUtil.isEmpty(newsInfo.getAttribute2())) {
+				return failed("广告类型不能为空");
+			}
+			// 2
+			if (newsInfo.getShowTime() == null || newsInfo.getShowTime() < 1) {
+				return failed("显示时长不能为空且不能小于1秒");
+			}
+		}
+
+
+		return succeed();
+	}
+
+	@ApiOperation(value = "更新资讯/广告/闪页/轮播图 ", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PostMapping(value = "/update",  consumes="application/json", produces="application/json")
 	@AuditLogAnnotation(operateName = "资讯更新",interfaceURL = "news/update")
-	@PreAuthorize("@pcs.hasPermissions('news/update')")
-	public Object update(SysNewsInformation newsInfo) {
-		Date date = new Date();
-		newsInfo.setUpdateTime(date);
+	// @PreAuthorize("@pcs.hasPermissions('news/update')")
+	public Object update(@Valid @RequestBody  SysNewsInformation newsInfo) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null || sysUser.getId() == null) {
+			return failed("用户信息获取失败");
+		}
+
+		SysNewsInformationDto sysNewsInformationDto = sysNewsInformationService.queryById(newsInfo.getId());
+		if (sysNewsInformationDto == null) {
+			return failed("未找到相关信息");
+		}
+		if(NewsStatusEnum.SHOW.getCode().equals(sysNewsInformationDto.getStatus().getCode())) {
+			return failed("启用状态下,不可修改");
+		}
+		HttpResponseResult<Object> check = check(newsInfo);
+		if (!check.getStatus()) {
+			return check;
+		}
+		newsInfo.setUpdateTime(new Date());
+		newsInfo.setUpdateBy(sysUser.getId());
 
 		return succeed(sysNewsInformationService.update(newsInfo));
 	}
 
 	@ApiOperation("删除")
-	@PostMapping(value = "/del/{id}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@PostMapping(value = "/del/{id}")
 	@AuditLogAnnotation(operateName = "资讯删除",interfaceURL = "news/del")
-	@PreAuthorize("@pcs.hasPermissions('news/del')")
+	// @PreAuthorize("@pcs.hasPermissions('news/del')")
 	public Object add(@PathVariable("id") Long id) {
+		SysNewsInformationDto sysNewsInformationDto = sysNewsInformationService.queryById(id);
+		if (sysNewsInformationDto == null) {
+			return failed("未找到相关信息");
+		}
+		if(NewsStatusEnum.SHOW.getCode().equals(sysNewsInformationDto.getStatus().getCode())) {
+			return failed("启用状态下,不可删除");
+		}
 		return succeed(sysNewsInformationService.deleteWithLogical(id));
 	}
 
+	@ApiOperation("启用/停用")
+	@PostMapping(value = "/status/{id}")
+	@AuditLogAnnotation(operateName = "资讯启用/停用",interfaceURL = "news/update")
+	// @PreAuthorize("@pcs.hasPermissions('news/del')")
+	public Object status(@PathVariable("id") Long id) {
+		SysNewsInformationDto sysNewsInformationDto = sysNewsInformationService.queryById(id);
+		if (sysNewsInformationDto == null) {
+			return failed("未找到相关信息");
+		}
+		return succeed(sysNewsInformationService.updateStatus(id));
+	}
+
+	@ApiOperation("app首页banner、按钮、资讯")
+	@PostMapping(value = "/app/home")
+	public HttpResponseResult<AppHomeDto> appHome(@RequestBody AppParam param) {
+		AppHomeDto appHomeDto = new AppHomeDto();
+		NewsInformationQueryInfo queryInfo = new NewsInformationQueryInfo();
+		queryInfo.setStatus(NewsStatusEnum.SHOW);
+		queryInfo.setPlatformType("STUDENT");
+		// 1热门资讯
+		queryInfo.setType(1);
+		queryInfo.setPage(1);
+		queryInfo.setRows(3);
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+		List<SysNewsInformationDto> rows = sysNewsInformationService.selectPage(queryInfo).getRows();
+		appHomeDto.setInformation(rows);
+
+
+		// 查所有
+		queryInfo.setRows(999);
+		// 轮播图
+		queryInfo.setType(4);
+		params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+		appHomeDto.setBanner(sysNewsInformationService.selectPage(queryInfo).getRows());
+		// 闪页
+		queryInfo.setType(3);
+		params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+		appHomeDto.setFlashPage(sysNewsInformationService.selectPage(queryInfo).getRows());
+
+		// 按钮
+		queryInfo.setType(5);
+		queryInfo.setVersion(param.getVersion());
+		params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+		appHomeDto.setAppMenu(sysNewsInformationService.selectPage(queryInfo).getRows());
+		return succeed(appHomeDto);
+	}
 }

+ 16 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/HelpCenterContentQueryInfo.java

@@ -4,17 +4,32 @@ import io.swagger.annotations.ApiModelProperty;
 
 import com.yonge.cooleshow.common.page.QueryInfo;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 public class HelpCenterContentQueryInfo extends QueryInfo {
 
-	@ApiModelProperty(value = "父分类ID,多个用逗号分隔", required = false)
+	@ApiModelProperty(value = "父分类ID,1:帮助中心,2:公告管理", required = false)
+	@NotNull(message = "父分类不能为空")
 	private String catalogIds;
 
+	@ApiModelProperty("平台类型 STUDENT:学生  TEACHER:老师")
+	private String catalogType;
+
 	@ApiModelProperty(value = "标题", required = false)
 	private String title;
 
 	@ApiModelProperty(value = "状态(1-显示 0-隐藏)", required = false)
 	private Integer status;
 
+	public String getCatalogType() {
+		return catalogType;
+	}
+
+	public void setCatalogType(String catalogType) {
+		this.catalogType = catalogType;
+	}
+
 	public String getCatalogIds() {
 		return catalogIds;
 	}

+ 38 - 11
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/NewsInformationQueryInfo.java

@@ -8,29 +8,40 @@ import java.util.List;
 import com.yonge.cooleshow.cms.dal.entity.NewsStatusEnum;
 import com.yonge.cooleshow.common.page.QueryInfo;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 public class NewsInformationQueryInfo extends QueryInfo {
 
-	@ApiModelProperty(value = "类型,1精彩活动,2热门资讯,3banner类型", required = false)
+	@ApiModelProperty(value = "类型,1热门资讯,2开屏广告,3闪页管理,4轮播图管理 5按钮管理 6 乐理章节", required = true)
+	@NotNull(message = "类型不能为空")
 	private Integer type;
-	
-	@ApiModelProperty(value = "子类型", required = false)
-	private Integer subType;
 
-	@ApiModelProperty(value = "资讯状态", required = false)
+	@ApiModelProperty(value = "平台类型  ADMIN:平台端  STUDENT:学生端  TEACHER:老师端",required = true)
+	@NotBlank(message = "平台类型不能为空")
+	private String platformType;
+
+	@ApiModelProperty(value = "子类型  IMAGE:图片,VIDEO:视频", required = false)
+	private String subType;
+
+	@ApiModelProperty(value = "资讯状态(0:禁用,1:启用)", required = false)
 	private NewsStatusEnum status;
 
-	@ApiModelProperty(value = "标题", required = false)
+	@ApiModelProperty(value = "编号/标题", required = false)
 	private String title;
 
 	@ApiModelProperty(value = "备注", required = false)
 	private String memo;
-	
+
 	@ApiModelProperty(value = "声部编号", required = false)
 	private Integer subjectId;
-	
+
 	@ApiModelProperty(value = "需排除编号")
 	private List<Long> excludeIds;
-	
+
+	@ApiModelProperty("版本号")
+	private String version;
+
 	private Date date;
 
 	public Integer getType() {
@@ -41,11 +52,11 @@ public class NewsInformationQueryInfo extends QueryInfo {
 		this.type = type;
 	}
 
-	public Integer getSubType() {
+	public String getSubType() {
 		return subType;
 	}
 
-	public void setSubType(Integer subType) {
+	public void setSubType(String subType) {
 		this.subType = subType;
 	}
 
@@ -96,4 +107,20 @@ public class NewsInformationQueryInfo extends QueryInfo {
 	public void setExcludeIds(List<Long> excludeIds) {
 		this.excludeIds = excludeIds;
 	}
+
+	public String getPlatformType() {
+		return platformType;
+	}
+
+	public void setPlatformType(String platformType) {
+		this.platformType = platformType;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
 }

+ 2 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/HelpCenterContentDao.java

@@ -10,4 +10,6 @@ public interface HelpCenterContentDao extends BaseDAO<Long, HelpCenterContent> {
 	public int updateContentByCatalog(Map<String, Object> map);
 
 	public int deleteContentByCatalog(Long catalogId);
+
+    void status(Long id);
 }

+ 23 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/SysNewsInformationDao.java

@@ -34,4 +34,27 @@ public interface SysNewsInformationDao extends BaseDAO<Long, SysNewsInformation>
 	List<SysNewsInformation> queryNeedUpdateStatusList();
 	
 	SysNewsInformationDto queryById(Long id);
+
+	/**
+	 * 分页数量
+	 *
+	 * @param params
+	 * @return
+	 */
+	int selectPageCount(Map<String, Object> params);
+
+	/**
+	 * 分页数据
+	 *
+	 * @param params
+	 * @return
+	 */
+	List<SysNewsInformationDto> selectPage(Map<String, Object> params);
+
+	/**
+	 * 修改状态
+	 *
+	 * @param id
+	 */
+    void updateStatus(Long id);
 }

+ 4 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/SysNewsTypeDao.java

@@ -1,13 +1,17 @@
 package com.yonge.cooleshow.cms.dal.dao;
 
 import java.util.List;
+import java.util.Map;
 
 import com.yonge.cooleshow.cms.dal.entity.SysNewsType;
 import com.yonge.cooleshow.cms.dal.entity.SysNewsTypeTree;
+import com.yonge.cooleshow.cms.dto.SysNewsTypeDto;
 import com.yonge.cooleshow.common.dal.BaseDAO;
 
 public interface SysNewsTypeDao extends BaseDAO<Long, SysNewsType> {
 
 	// 根据父级查询子集
 	List<SysNewsTypeTree> queryByParentId(Long parentId);
+
+    List<SysNewsTypeDto> queryAppPage(Map<String, Object> params);
 }

+ 56 - 16
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/HelpCenterContent.java

@@ -2,42 +2,90 @@ package com.yonge.cooleshow.cms.dal.entity;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 public class HelpCenterContent {
 
 	@ApiModelProperty(value = "编号", required = false)
 	private Long id;
 
-	@ApiModelProperty(value = "标题", required = false)
+	@ApiModelProperty(value = "标题", required = true)
+	@NotBlank(message = "标题不能为空")
 	private String title;
 
-	@ApiModelProperty(value = "内容", required = false)
+	@ApiModelProperty(value = "内容", required = true)
+	@NotBlank(message = "正文不能为空")
 	private String content = "";
 
-	@ApiModelProperty(value = "分类ID", required = false)
+	@ApiModelProperty(value = "父分类ID,1:帮助中心,2:公告管理",required = true)
+	@NotNull(message = "分类不能为空 ")
 	private Long catalogId;
 
+	@ApiModelProperty(value = "分类类型 STUDENT:学生端  TEACHER:老师端",required = true)
+	@NotBlank(message = "平台类型不能为空")
+	private String catalogType;
 	/** 创建时间 */
 	private java.util.Date createOn;
 
 	/** 修改时间 */
 	private java.util.Date modifyOn;
 
+	private Long createBy;
+
+	private Long updateBy;
+
+
+
 	@ApiModelProperty(value = "状态 1显示 0隐藏", required = false)
 	private Integer status;
 
 	@ApiModelProperty(value = "排序", required = false)
 	private Integer order;
 
-	private HelpCenterCatalog catalog;
+	@ApiModelProperty("修改人姓名")
+	private String updateName;
+
+	public String getUpdateName() {
+		return updateName;
+	}
+
+	public void setUpdateName(String updateName) {
+		this.updateName = updateName;
+	}
+
+	public Long getCatalogId() {
+		return catalogId;
+	}
 
-	public HelpCenterCatalog getCatalog() {
-		return catalog;
+	public void setCatalogId(Long catalogId) {
+		this.catalogId = catalogId;
 	}
 
-	public void setCatalog(HelpCenterCatalog catalog) {
-		this.catalog = catalog;
+	public String getCatalogType() {
+		return catalogType;
 	}
 
+	public void setCatalogType(String catalogType) {
+		this.catalogType = catalogType;
+	}
+	public Long getCreateBy() {
+		return createBy;
+	}
+
+	public void setCreateBy(Long createBy) {
+		this.createBy = createBy;
+	}
+
+	public Long getUpdateBy() {
+		return updateBy;
+	}
+
+	public void setUpdateBy(Long updateBy) {
+		this.updateBy = updateBy;
+	}
+
+
 	public Integer getOrder() {
 		return order;
 	}
@@ -70,14 +118,6 @@ public class HelpCenterContent {
 		return this.content;
 	}
 
-	public void setCatalogId(Long catalogId) {
-		this.catalogId = catalogId;
-	}
-
-	public Long getCatalogId() {
-		return this.catalogId;
-	}
-
 	public void setCreateOn(java.util.Date createOn) {
 		this.createOn = createOn;
 	}

+ 47 - 37
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/SysNewsInformation.java

@@ -6,6 +6,9 @@ import java.util.Date;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * 对应数据库表(sys_news_information):
  */
@@ -16,6 +19,7 @@ public class SysNewsInformation {
 
 	/** 标题 */
 	@ApiModelProperty(value = "标题", required = true)
+	@NotBlank(message = "标题不能为空")
 	private String title;
 
 	/** 内容 */
@@ -31,34 +35,44 @@ public class SysNewsInformation {
 	private String videoCoverImage;
 
 	/** 类型 */
-	@ApiModelProperty(value = "类型,1精彩活动,2热门资讯,3banner类型", required = true)
+	@ApiModelProperty(value = "类型,1热门资讯,2开屏广告,3闪页管理,4轮播图管理 5app按钮管理", required = true)
+	@NotNull(message = "类型不能为空")
 	private Integer type;
 	
-	@ApiModelProperty(value = "子类型", required = false)
+	@ApiModelProperty(value = "子类型  章节id ", required = false)
 	private Integer subType;
 
 	/** 状态(1-可见 0-不可见) */
-	@ApiModelProperty(value = "状态(1-可见 0-不可见)", required = true)
+	@ApiModelProperty(value = "状态(1-启用 0-禁用)")
 	private NewsStatusEnum status;
 
-	@ApiModelProperty(value = "链接地址", required = true)
+	@ApiModelProperty(value = "链接地址")
 	private String linkUrl;
 
-	@ApiModelProperty(value = "跳转类型_bank,_slef", required = true)
+	@ApiModelProperty(value = "跳转类型_bank,_slef")
 	private String hrefTarget;
 
 	@ApiModelProperty(value = "顺序号", required = true)
 	private Integer order;
 	
-	@ApiModelProperty(value = "上线时间", required = false)
+	@ApiModelProperty(value = "上线、生效时间", required = false)
 	private Date onlineTime;
 	
 	@ApiModelProperty(value = "下线时间", required = false)
 	private Date offlineTime;
 
+	@ApiModelProperty("展示时间")
+	private Integer showTime;
 	/**  */
 	private java.util.Date createTime;
 
+
+	@ApiModelProperty(value = "创建人id",hidden = true)
+	private Long createBy;
+
+	@ApiModelProperty(value = "修改人id",hidden = true)
+	private Long updateBy;
+
 	/**  */
 	private java.util.Date updateTime;
 
@@ -67,19 +81,39 @@ public class SysNewsInformation {
 
 	private Boolean delFlag= false;
 
-	private Integer tenantId;
-
+	@ApiModelProperty("版本号")
 	private String attribute1;
-	
+
+	@ApiModelProperty("广告类型  IMAGE:图片,VIDEO:视频")
 	private String attribute2;
 	
 	private String subjectIdList;
 	
-	private String organIdList;
-	
 	private String subjectName;
-	
-	private String organNameList;
+
+	public Integer getShowTime() {
+		return showTime;
+	}
+
+	public void setShowTime(Integer showTime) {
+		this.showTime = showTime;
+	}
+
+	public Long getCreateBy() {
+		return createBy;
+	}
+
+	public void setCreateBy(Long createBy) {
+		this.createBy = createBy;
+	}
+
+	public Long getUpdateBy() {
+		return updateBy;
+	}
+
+	public void setUpdateBy(Long updateBy) {
+		this.updateBy = updateBy;
+	}
 
 	public String getLinkUrl() {
 		return linkUrl;
@@ -193,14 +227,6 @@ public class SysNewsInformation {
 		this.delFlag = delFlag;
 	}
 
-	public Integer getTenantId() {
-		return tenantId;
-	}
-
-	public void setTenantId(Integer tenantId) {
-		this.tenantId = tenantId;
-	}
-
 	public Integer getSubType() {
 		return subType;
 	}
@@ -249,14 +275,6 @@ public class SysNewsInformation {
 		this.subjectIdList = subjectIdList;
 	}
 
-	public String getOrganIdList() {
-		return organIdList;
-	}
-
-	public void setOrganIdList(String organIdList) {
-		this.organIdList = organIdList;
-	}
-
 	public String getSubjectName() {
 		return subjectName;
 	}
@@ -265,14 +283,6 @@ public class SysNewsInformation {
 		this.subjectName = subjectName;
 	}
 
-	public String getOrganNameList() {
-		return organNameList;
-	}
-
-	public void setOrganNameList(String organNameList) {
-		this.organNameList = organNameList;
-	}
-
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 16 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/SysNewsType.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.cms.dal.entity;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -8,16 +9,24 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 public class SysNewsType {
 
 	/**  */
+	@ApiModelProperty("id")
 	private Long id;
 	
+
 	/**  */
+	@ApiModelProperty("名称")
 	private String name;
 	
 	/**  */
+	@ApiModelProperty("上级id")
 	private Long parentId;
 	
 	/**  */
+
 	private Boolean delFlag= false;
+
+	@ApiModelProperty("排序")
+	private Integer order;
 	
 	/**  */
 	private java.util.Date createTime;
@@ -78,4 +87,11 @@ public class SysNewsType {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public Integer getOrder() {
+		return order;
+	}
+
+	public void setOrder(Integer order) {
+		this.order = order;
+	}
 }

+ 61 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/AppHomeDto.java

@@ -0,0 +1,61 @@
+package com.yonge.cooleshow.cms.dto;
+
+import com.yonge.cooleshow.cms.controller.queryinfo.NewsInformationQueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-24
+ */
+@ApiModel("app首页信息")
+public class AppHomeDto {
+
+    @ApiModelProperty("资讯")
+    private List<SysNewsInformationDto> information;
+
+    @ApiModelProperty("banner")
+    private List<SysNewsInformationDto> banner;
+
+    @ApiModelProperty("闪页")
+    private List<SysNewsInformationDto> flashPage;
+
+    @ApiModelProperty("app按钮")
+    private List<SysNewsInformationDto> appMenu;
+
+    public List<SysNewsInformationDto> getInformation() {
+        return information;
+    }
+
+    public void setInformation(List<SysNewsInformationDto> information) {
+        this.information = information;
+    }
+
+    public List<SysNewsInformationDto> getBanner() {
+        return banner;
+    }
+
+    public void setBanner(List<SysNewsInformationDto> banner) {
+        this.banner = banner;
+    }
+
+    public List<SysNewsInformationDto> getFlashPage() {
+        return flashPage;
+    }
+
+    public void setFlashPage(List<SysNewsInformationDto> flashPage) {
+        this.flashPage = flashPage;
+    }
+
+    public List<SysNewsInformationDto> getAppMenu() {
+        return appMenu;
+    }
+
+    public void setAppMenu(List<SysNewsInformationDto> appMenu) {
+        this.appMenu = appMenu;
+    }
+}

+ 25 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/AppParam.java

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.cms.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-25
+ */
+@ApiModel("app首页查询参数")
+public class AppParam {
+
+    @ApiModelProperty("版本号")
+    private String version;
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+}

+ 14 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/SysNewsInformationDto.java

@@ -1,13 +1,27 @@
 package com.yonge.cooleshow.cms.dto;
 
 import com.yonge.cooleshow.cms.dal.entity.SysNewsInformation;
+import io.swagger.annotations.ApiModelProperty;
 
 public class SysNewsInformationDto extends SysNewsInformation {
 
 	private String typeName;
 
+	@ApiModelProperty("子类型名称")
 	private String subTypeName;
 
+	@ApiModelProperty("更新人姓名")
+	private String updateName;
+
+
+	public String getUpdateName() {
+		return updateName;
+	}
+
+	public void setUpdateName(String updateName) {
+		this.updateName = updateName;
+	}
+
 	public String getTypeName() {
 		return typeName;
 	}

+ 29 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/SysNewsTypeDto.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.cms.dto;
+
+import com.yonge.cooleshow.cms.dal.entity.SysNewsInformation;
+import com.yonge.cooleshow.cms.dal.entity.SysNewsType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-26
+ */
+@ApiModel("app乐理知识")
+public class SysNewsTypeDto extends SysNewsType {
+
+    @ApiModelProperty("乐理知识")
+    private List<SysNewsInformation> newsInformationList;
+
+    public List<SysNewsInformation> getNewsInformationList() {
+        return newsInformationList;
+    }
+
+    public void setNewsInformationList(List<SysNewsInformation> newsInformationList) {
+        this.newsInformationList = newsInformationList;
+    }
+}

+ 37 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/search/MusicTheorySearch.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.cms.dto.search;
+
+import com.yonge.cooleshow.common.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-26
+ */
+@ApiModel("乐理章节查询")
+public class MusicTheorySearch extends QueryInfo {
+
+    @ApiModelProperty("章节编号/名称")
+    private String search;
+
+    @ApiModelProperty("上级id")
+    private Long parentId;
+
+    public String getSearch() {
+        return search;
+    }
+
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+}

+ 2 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/HelpCenterContentService.java

@@ -8,4 +8,6 @@ public interface HelpCenterContentService extends BaseService<Long,HelpCenterCon
 	public boolean updateContentByCatalog(Long catalogId,Integer status);
 	
 	public boolean deleteContentByCatalog(Long catalogId);
+
+    boolean status(Long id);
 }

+ 16 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/SysNewsInformationService.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.cms.controller.queryinfo.NewsInformationQueryInfo;
 import com.yonge.cooleshow.cms.dal.entity.SysNewsInformation;
 import com.yonge.cooleshow.cms.dto.SysNewsInformationDto;
 import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.cooleshow.common.page.QueryInfo;
 import com.yonge.cooleshow.common.service.BaseService;
 
 public interface SysNewsInformationService extends BaseService<Long, SysNewsInformation> {
@@ -46,4 +47,19 @@ public interface SysNewsInformationService extends BaseService<Long, SysNewsInfo
 	 * @return
 	 */
 	boolean autoUpdateStatus();
+
+	/**
+	 * 分页查询
+	 *
+	 * @param params 参数
+	 * @return
+	 */
+	PageInfo<SysNewsInformationDto> selectPage(QueryInfo params);
+
+	/**
+	 * 修改状态
+	 * @param id
+	 * @return
+	 */
+    boolean updateStatus(Long id);
 }

+ 5 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/SysNewsTypeService.java

@@ -4,6 +4,9 @@ import java.util.List;
 
 import com.yonge.cooleshow.cms.dal.entity.SysNewsType;
 import com.yonge.cooleshow.cms.dal.entity.SysNewsTypeTree;
+import com.yonge.cooleshow.cms.dto.SysNewsTypeDto;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.cooleshow.common.page.QueryInfo;
 import com.yonge.cooleshow.common.service.BaseService;
 
 public interface SysNewsTypeService extends BaseService<Long, SysNewsType> {
@@ -12,4 +15,6 @@ public interface SysNewsTypeService extends BaseService<Long, SysNewsType> {
 
 	//根据父级查询子集
 	List<SysNewsTypeTree> queryByParentId(Long parentId);
+
+	PageInfo<SysNewsTypeDto> appPage(QueryInfo query);
 }

+ 7 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/HelpCenterContentServiceImpl.java

@@ -38,4 +38,11 @@ public class HelpCenterContentServiceImpl extends BaseServiceImpl<Long, HelpCent
 		return true;
 	}
 
+    @Override
+    public boolean status(Long id) {
+
+		contentCenterDao.status(id);
+		return true;
+    }
+
 }

+ 30 - 9
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsInformationServiceImpl.java

@@ -1,14 +1,5 @@
 package com.yonge.cooleshow.cms.service.impl;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.cms.controller.queryinfo.NewsInformationQueryInfo;
 import com.yonge.cooleshow.cms.dal.dao.SysNewsInformationDao;
@@ -21,6 +12,10 @@ import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.cooleshow.common.page.QueryInfo;
 import com.yonge.cooleshow.common.service.impl.BaseServiceImpl;
 import com.yonge.toolset.utils.collection.MapUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
 
 @Service
 public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNewsInformation> implements SysNewsInformationService {
@@ -156,4 +151,30 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 		return true;
 	}
 
+    @Override
+    public PageInfo<SysNewsInformationDto> selectPage(QueryInfo queryInfo) {
+		PageInfo<SysNewsInformationDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+		List<SysNewsInformationDto> dataList = null;
+		int count = sysNewsInformationDao.selectPageCount(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = sysNewsInformationDao.selectPage(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+    }
+
+    @Override
+    public boolean updateStatus(Long id) {
+		sysNewsInformationDao.updateStatus(id);
+
+		return true;
+    }
+
 }

+ 30 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsTypeServiceImpl.java

@@ -1,7 +1,15 @@
 package com.yonge.cooleshow.cms.service.impl;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
+import com.yonge.cooleshow.cms.dal.entity.SysNewsInformation;
+import com.yonge.cooleshow.cms.dto.SysNewsTypeDto;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.cooleshow.common.page.QueryInfo;
+import com.yonge.toolset.utils.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -45,5 +53,26 @@ public class SysNewsTypeServiceImpl extends BaseServiceImpl<Long, SysNewsType>
 		}
 		return sysNewsTypeDao.queryByParentId(parentId);
 	}
-	
+
+    @Override
+    public PageInfo<SysNewsTypeDto> appPage(QueryInfo query) {
+		PageInfo<SysNewsTypeDto> pageInfo = new PageInfo<>(query.getPage(), query.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, query);
+
+		List<SysNewsTypeDto> dataList = null;
+		int count = sysNewsTypeDao.queryCount(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = sysNewsTypeDao.queryAppPage(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+
+    }
+
 }

+ 45 - 28
cooleshow-cms/src/main/resources/config/mybatis/HelpCenterContentMapper.xml

@@ -2,24 +2,22 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.yonge.cooleshow.cms.dal.dao.HelpCenterContentDao">
 	<resultMap id="HelpCenterContent" type="com.yonge.cooleshow.cms.dal.entity.HelpCenterContent">
-		<id column="id_" property="id" jdbcType="INTEGER" />
+		<id column="id_" property="id" jdbcType="BIGINT" />
 		<result column="title_" property="title" jdbcType="VARCHAR" />
 		<result column="create_on_" property="createOn" jdbcType="TIMESTAMP" />
 		<result column="modify_on_" property="modifyOn" jdbcType="TIMESTAMP" />
 		<result column="status_" property="status" jdbcType="INTEGER" />
 		<result column="order_" property="order" jdbcType="INTEGER" />
-		<result column="catalog_id_" property="catalogId" jdbcType="INTEGER" />
-		<association property="catalog" 
-			javaType="com.yonge.cooleshow.cms.dal.entity.HelpCenterCatalog">
-			<result column="catalog_id_" property="id" />
-			<result column="name_" property="text" />
-			<result column="parent_id_" property="parentId" />
-		</association>
+		<result column="catalog_id_" property="catalogId" jdbcType="BIGINT" />
+		<result column="catalog_type_" property="catalogType" jdbcType="VARCHAR"/>
+		<result column="create_by_" property="createBy" jdbcType="BIGINT" />
+		<result column="update_by_" property="updateBy" jdbcType="BIGINT" />
 	</resultMap>
 
 	<resultMap id="HelpCenterContentBlobs" type="com.yonge.cooleshow.cms.dal.entity.HelpCenterContent"
 		extends="HelpCenterContent">
 		<result column="content_" property="content" jdbcType="LONGVARCHAR" />
+		<result column="updateName" property="updateName" jdbcType="VARCHAR" />
 	</resultMap>
 	<!-- 查询条件 -->
 	<sql id="queryConditionUnion">
@@ -33,6 +31,9 @@
 			<if test="status!= null">
 				and content.status_ = #{status}
 			</if>
+			<if test="catalogType != null and catalogType != ''">
+				and content.catalog_type_ = #{catalogType}
+			</if>
 		</where>
 	</sql>
 	
@@ -45,29 +46,31 @@
 		content.create_on_,
 		content.modify_on_,content.status_,content.content_,content.order_,
 		catalog.id_,
-		catalog.name_, catalog.parent_id_
+		catalog.name_, catalog.parent_id_,content.catalog_type_,content.create_by_,content.update_by_
 	</sql>
 
 	<sql id="Blob_Column_List">
 		content_
 	</sql>
 
-	<select id="get" resultMap="HelpCenterContentBlobs" parameterType="java.lang.Integer">
+	<select id="get" resultMap="HelpCenterContentBlobs">
 		select
 		<include refid="Base_Column_List_union" />
-		from help_center_content content left join help_center_catalog catalog on
+		from help_center_content content
+		left join help_center_catalog catalog on
 		content.catalog_id_=catalog.id_
-		where content.id_ =
-		#{id,jdbcType=INTEGER}
+		where content.id_ = #{id}
 	</select>
 
 	<select id="queryPage" parameterType="map" resultMap="HelpCenterContentBlobs">
 		select
 		<include refid="Base_Column_List_union" />
-		from help_center_content content left join help_center_catalog catalog on
-		content.catalog_id_=catalog.id_
+		,su.username_ as updateName
+		from help_center_content content
+		left join help_center_catalog catalog on content.catalog_id_=catalog.id_
+		left join sys_user su on content.update_by_ = su.id_
 		<include refid="queryConditionUnion" />
-		order by order_ asc
+		order by content.order_ asc
 		<include refid="global.limit" />
 	</select>
 
@@ -77,9 +80,9 @@
 		<include refid="queryConditionUnion" />
 	</select>
 
-	<delete id="delete" parameterType="java.lang.Integer">
+	<delete id="delete">
 		delete from help_center_content
-		where id_ = #{id,jdbcType=INTEGER}
+		where id_ = #{id}
 	</delete>
 	
 	<delete id="deleteContentByCatalog" parameterType="java.lang.Integer">
@@ -90,13 +93,13 @@
 	<insert id="insert" parameterType="com.yonge.cooleshow.cms.dal.entity.HelpCenterContent">
 		insert into help_center_content
 		(id_, title_, catalog_id_,
-		create_on_, modify_on_, content_,status_,order_
+		create_on_, modify_on_, content_,status_,order_,update_by_,create_by_,catalog_type_
 		)
 		values
 		(#{id,jdbcType=INTEGER}, #{title,jdbcType=VARCHAR},
 		#{catalogId,jdbcType=INTEGER},
 		#{createOn,jdbcType=TIMESTAMP},
-		#{modifyOn,jdbcType=TIMESTAMP}, #{content,jdbcType=LONGVARCHAR},#{status,jdbcType=INTEGER},#{order,jdbcType=INTEGER}
+		#{modifyOn,jdbcType=TIMESTAMP}, #{content,jdbcType=LONGVARCHAR},#{status,jdbcType=INTEGER},#{order,jdbcType=INTEGER},#{createBy},#{updateBy},#{catalogType}
 		)
 	</insert>
 
@@ -104,28 +107,37 @@
 		update help_center_content
 		<set>
 			<if test="title != null">
-				title_ = #{title,jdbcType=VARCHAR},
+				title_ = #{title},
 			</if>
 			<if test="catalogId != null">
-				catalog_id_ = #{catalogId,jdbcType=INTEGER},
+				catalog_id_ =#{catalogId},
 			</if>
 			<if test="createOn != null">
-				create_on_ = #{createOn,jdbcType=TIMESTAMP},
+				create_on_ = #{createOn},
 			</if>
 			<if test="modifyOn != null">
-				modify_on_ = #{modifyOn,jdbcType=TIMESTAMP},
+				modify_on_ = #{modifyOn},
 			</if>
 			<if test="content != null">
-				content_ = #{content,jdbcType=LONGVARCHAR},
+				content_ = #{content},
 			</if>
 			<if test="status != null">
-				status_ = #{status,jdbcType=INTEGER},
+				status_ = #{status},
 			</if>
 			<if test="order != null">
-				order_ = #{order,jdbcType=INTEGER},
+				order_ = #{order},
+			</if>
+			<if test="updateBy != null">
+				update_by_ = #{updateBy},
+			</if>
+			<if test="createBy != null">
+				create_by_ = #{createBy},
+			</if>
+			<if test="catalogType != null and catalogType != ''">
+				catalog_type_ = #{catalogType}
 			</if>
 		</set>
-		where id_ = #{id,jdbcType=INTEGER}
+		where id_ = #{id}
 	</update>
 
 	<update id="updateBlobs" parameterType="com.yonge.cooleshow.cms.dal.entity.HelpCenterContent">
@@ -161,4 +173,9 @@
 	<update id="updateContentByCatalog" parameterType="map">
 		update help_center_content set status_=#{status} where catalog_id_=#{catalogId}
 	</update>
+
+	<update id="status">
+		update help_center_content set status_=if(status_ =0,1,0) where id_=#{catalogId}
+
+	</update>
 </mapper>

+ 46 - 76
cooleshow-cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -24,17 +24,15 @@
 		<result column="href_target_" property="hrefTarget" />
 		<result column="order_" property="order" />
 		<result column="memo_" property="memo" />
-		<result column="tenant_id_" property="tenantId" />
 		<result column="attribute1_" property="attribute1" />
 		<result column="attribute2_" property="attribute2" />
-		<result column="subject_id_list_" property="subjectIdList" />
-		<result column="organ_id_list_" property="organIdList" />
-		<result column="subject_name_" property="subjectName" />
-		<result column="organ_name_list_" property="organNameList" />
+		<result column="show_time_" property="showTime" />
+		<result column="update_by_" property="updateBy" />
+		<result column="create_by_" property="createBy" />
 	</resultMap>
 	
 	<resultMap type="com.yonge.cooleshow.cms.dto.SysNewsInformationDto" id="SysNewsInformationDto" extends="SysNewsInformation">
-		<result column="typeName" property="typeName" />
+		<result column="updateName" property="updateName" />
 		<result column="subTypeName" property="subTypeName" />
 	</resultMap>
 	
@@ -47,14 +45,13 @@
 			<if test="subType != null">
 				and sni.sub_type_ = #{subType}
 			</if>
-			<if test="tenantId != null">
-				and sni.tenant_id_ = #{tenantId}
-			</if>
 			<if test="status != null">
 				and sni.status_ = #{status, typeHandler=com.yonge.cooleshow.common.dal.CustomEnumTypeHandler}
 			</if>
 			<if test="title != null">
-				and sni.title_ like '%' #{title} '%'
+				and (sni.title_ like '%' #{title} '%'
+				or sni.id_ like concat('%',#{titile},'%')
+				)
 			</if>
 			<if test="search != null">
 				and sni.title_ like '%' #{search} '%'
@@ -62,11 +59,14 @@
 			<if test="subjectId != null">
 				and find_in_set(#{subjectId},sni.subject_id_list_)
 			</if>
-			<if test="organId != null">
-				and (find_in_set(#{organId},sni.organ_id_list_) or sni.organ_id_list_ is null)
-			</if>
-			<if test="organIdList != null">
-				and INTE_ARRAY(#{organIdList},sni.organ_id_list_)
+			<if test="platformType != null and platformType != ''">
+				<if test="platformType != 'ADMIN'" >
+					and sni.status_ = 1
+					<if test="type != 5">
+						and sni.online_time_ &lt;= now()
+						and if(sni.offline_time_ is not null,sni.offline_time_ &gt;= now(),1=1)
+					</if>
+				</if>
 			</if>
 			<if test="excludeIds!=null and excludeIds.size()>0">
 				AND sni.id_ NOT IN
@@ -74,15 +74,8 @@
 					#{excludeId}
 				</foreach>
 			</if>
-			<if test="clientName != 'manage'">
-				<choose>
-					<when test="memo != null and memo != ''">
-						and sni.memo_ = #{memo}
-					</when>
-					<otherwise>
-						and (sni.memo_ is null or sni.memo_ = '')
-					</otherwise>
-				</choose>
+			<if test="version != null and version != ''">
+				and sni.attribute1_ = #{version}
 			</if>
 		</where>
 	</sql>
@@ -99,8 +92,8 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.yonge.cooleshow.cms.dal.entity.SysNewsInformation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO sys_news_information (id_,title_,content_,cover_image_,video_cover_image_,type_,online_time_,offline_time_,sub_type_,status_,create_time_,update_time_,link_url_,href_target_,order_,del_flag_,memo_,tenant_id_,attribute1_,attribute2_,subject_id_list_,organ_id_list_)
-		VALUES(#{id},#{title},#{content},#{coverImage},#{videoCoverImage},#{type},#{onlineTime},#{offlineTime},#{subType},#{status, typeHandler=com.yonge.cooleshow.common.dal.CustomEnumTypeHandler},now(),now(),#{linkUrl},#{hrefTarget},#{order},0,#{memo},#{tenantId},#{attribute1},#{attribute2},#{subjectIdList},#{organIdList})
+		INSERT INTO sys_news_information (id_,title_,content_,cover_image_,video_cover_image_,type_,online_time_,offline_time_,sub_type_,status_,create_time_,update_time_,link_url_,href_target_,order_,del_flag_,memo_,attribute1_,attribute2_,subject_id_list_,create_by_,update_by_,show_time_)
+		VALUES(#{id},#{title},#{content},#{coverImage},#{videoCoverImage},#{type},#{onlineTime},#{offlineTime},#{subType},#{status, typeHandler=com.yonge.cooleshow.common.dal.CustomEnumTypeHandler},now(),now(),#{linkUrl},#{hrefTarget},#{order},0,#{memo},#{attribute1},#{attribute2},#{subjectIdList},#{createBy},#{updateBy},#{showTime})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -113,9 +106,6 @@
 			<if test="title != null">
 				title_ = #{title},
 			</if>
-			<if test="tenantId != null">
-				tenant_id_ = #{tenantId},
-			</if>
 			<if test="updateTime != null">
 				update_time_ = NOW(),
 			</if>
@@ -133,7 +123,7 @@
 			</if>
 				online_time_ = #{onlineTime},
 				offline_time_ = #{offlineTime},
-			<if test="subType != null">
+			<if test="subType != null and subType != ''">
 				sub_type_ = #{subType},
 			</if>
 			<if test="linkUrl != null">
@@ -160,8 +150,11 @@
 			<if test="subjectIdList != null">
 				subject_id_list_ = #{subjectIdList},
 			</if>
-			<if test="organIdList != null">
-				organ_id_list_ = #{organIdList},
+			<if test="updateBy != null">
+				update_by_ = #{updateBy},
+			</if>
+			<if test="showTime != null">
+				show_time_ = #{showTime}
 			</if>
 		</set>
 		WHERE id_ = #{id}
@@ -173,17 +166,20 @@
 	</delete>
 	
 	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="SysNewsInformation" parameterType="map">
-		SELECT sni.*,GROUP_CONCAT(distinct s.name_) subject_name_,GROUP_CONCAT(distinct o.name_) organ_name_list_ FROM sys_news_information sni left join subject s on find_in_set(s.id_,sni.subject_id_list_)
-		left join organization o on find_in_set(o.id_,sni.organ_id_list_)
+	<select id="selectPage" resultMap="SysNewsInformationDto" parameterType="map">
+		SELECT sni.*
+		, su.username_ as updateName
+		, snt.name_ as subTypeName
+		FROM sys_news_information sni
+		left join sys_news_type snt on snt.id_ = sni.sub_type_
+		left join sys_user su on sni.update_by_ = su.id_
 		<include refid="queryCondition" />
-		group by sni.id_
-		order by sni.status_ desc,sni.order_ desc,sni.update_time_ desc
+		order by sni.status_ desc,sni.order_,sni.update_time_ desc
 		<include refid="global.limit"/>
 	</select>
 	
 	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
+	<select id="selectPageCount" resultType="int">
 		SELECT COUNT(sni.id_) FROM sys_news_information sni
 		<include refid="queryCondition" />
 	</select>
@@ -205,11 +201,13 @@
 	<!-- 分页查询 -->
 	<select id="queryHomePage" resultMap="SysNewsInformation"
 		parameterType="map">
-		SELECT sni.*,GROUP_CONCAT(s.name_) subject_name_ FROM sys_news_information sni left join subject s on find_in_set(s.id_,sni.subject_id_list_) where sni.del_flag_=0
+		SELECT sni.*
+		FROM sys_news_information sni
+		where sni.del_flag_=0
 		<if test="type != null">
 			and sni.type_ = #{type}
 		</if>
-		<if test="subType != null">
+		<if test="subType != null and subType != ''">
 			and sni.sub_type_ = #{subType}
 		</if>
 		<if test="status != null">
@@ -222,9 +220,6 @@
 		<if test="search != null">
 			and sni.title_ like '%' #{search} '%'
 		</if>
-		<if test="tenantId != null">
-			and sni.tenant_id_ = #{tenantId}
-		</if>
 		<if test="excludeIds!=null and excludeIds.size()>0">
 			AND sni.id_ NOT IN
 			<foreach collection="excludeIds" item="excludeId" open="(" close=")" separator=",">
@@ -234,21 +229,8 @@
 			<if test="subjectId != null">
 				and find_in_set(#{subjectId},sni.subject_id_list_)
 			</if>
-			<if test="organId != null">
-				and (find_in_set(#{organId},sni.organ_id_list_) or sni.organ_id_list_ is null)
-			</if>
-		<if test="clientName != 'manage'">
-			<choose>
-				<when test="memo != null and memo != ''">
-					and sni.memo_ = #{memo}
-				</when>
-				<otherwise>
-					and (sni.memo_ is null or sni.memo_ = '')
-				</otherwise>
-			</choose>
-		</if>
 		group by sni.id_
-		order by sni.status_ desc,sni.order_ desc,sni.update_time_ desc
+		order by sni.status_ desc,sni.order_,sni.update_time_ desc
 		<include refid="global.limit" />
 	</select>
 
@@ -271,25 +253,9 @@
 		<if test="search != null">
 			and sni.title_ like '%' #{search} '%'
 		</if>
-		<if test="tenantId != null">
-			and sni.tenant_id_ = #{tenantId}
-		</if>
 			<if test="subjectId != null">
 				and find_in_set(#{subjectId},sni.subject_id_list_)
 			</if>
-			<if test="organId != null">
-				and (find_in_set(#{organId},sni.organ_id_list_) or sni.organ_id_list_ is null)
-			</if>
-		<if test="clientName != 'manage'">
-			<choose>
-				<when test="memo != null and memo != ''">
-					and sni.memo_ = #{memo}
-				</when>
-				<otherwise>
-					and (sni.memo_ is null or sni.memo_ = '')
-				</otherwise>
-			</choose>
-		</if>
 	</select>
 	
 	<select id="queryNeedUpdateStatusList" resultMap="SysNewsInformation" >
@@ -301,9 +267,13 @@
 	</select>
 	
 	<select id="queryById" resultMap="SysNewsInformationDto" >
-		SELECT sni.*,sntp.name_ typeName,snts.name_ subTypeName FROM sys_news_information sni 
-		left join sys_news_type sntp on sni.type_ = sntp.id_
-		left join sys_news_type snts on sni.sub_type_ = snts.id_
+		SELECT sni.*,su.username_ as updateName
+		FROM sys_news_information sni
+		left join sys_user su on sni.update_by_ = su.id_
 		where sni.id_ = #{id}
 	</select>
+
+	<update id="updateStatus">
+		UPDATE sys_news_information SET status_ = if(status_ = 0,1,0),update_time_ = NOW() WHERE id_ = #{id}
+    </update>
 </mapper>

+ 76 - 4
cooleshow-cms/src/main/resources/config/mybatis/SysNewsTypeMapper.xml

@@ -8,6 +8,7 @@
 		<result column="name_" property="name" />
 		<result column="parent_id_" property="parentId" />
 		<result column="del_flag_" property="delFlag" />
+		<result column="order_" property="order" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
@@ -31,8 +32,8 @@
 	<insert id="insert" parameterType="com.yonge.cooleshow.cms.dal.entity.SysNewsType"
 		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO sys_news_type
-		(id_,name_,parent_id_,del_flag_,create_time_,update_time_)
-		VALUES(#{id},#{name},#{parentId},#{delFlag},#{createTime},#{updateTime})
+		(id_,name_,parent_id_,del_flag_,create_time_,update_time_,order_)
+		VALUES(#{id},#{name},#{parentId},#{delFlag},#{createTime},#{updateTime},#{order})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -57,27 +58,98 @@
 			<if test="createTime != null">
 				create_time_ = #{createTime},
 			</if>
+			<if test="order != null">
+				order_ = #{order}
+			</if>
 		</set>
 		WHERE id_ = #{id}
 	</update>
 
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete">
-		DELETE FROM sys_news_type WHERE id_ = #{id}
+		update sys_news_type set del_flag_ = 1 WHERE id_ = #{id}
 	</delete>
 
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="SysNewsType" parameterType="map">
-		SELECT * FROM sys_news_type ORDER BY id_
+		SELECT * FROM sys_news_type
+
+		<include refid="queryCondition" />
+		ORDER BY order_ , id_
 		<include refid="global.limit" />
 	</select>
 
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM sys_news_type
+		<include refid="queryCondition" />
 	</select>
 	
 	<select id="queryByParentId" resultMap="SysNewsTypeTree">
 		SELECT * FROM sys_news_type where parent_id_ = #{parentId}
 	</select>
+
+	<sql id="queryCondition">
+		<where>
+			del_flag_ = 0
+			<if test="search != null and searcer != ''">
+				and (id_ like concat('%',#{search},'%') or name_ like concat('%',#{search},'%'))
+			</if>
+			<if test="parentId != null">
+				and parent_id_ = #{parentId}
+			</if>
+		</where>
+	</sql>
+
+	<select id="queryAppPage" resultMap="SysNewsTypeDto">
+		SELECT snt.id_ as sntId
+		,snt.name_ as name,
+		snt.parent_id_ as parentId,
+		snt.order_ as sntOrder,
+		snt.del_flag_ as sntDelFlag,
+		snt.create_time_ as createTime,
+		snt.update_time_ as updateTime,
+		sni.*
+		FROM sys_news_type snt
+		left join sys_news_information sni on sni.sub_type_ = snt.id_
+		where snt.del_flag_ = 0 and snt.parent_id_ = 6 and sni.del_flag_ = 0 and sni.status_ = 1
+		ORDER BY snt.order_ , sni.order_
+		<include refid="global.limit" />
+	</select>
+
+	<resultMap type="com.yonge.cooleshow.cms.dto.SysNewsTypeDto" id="SysNewsTypeDto">
+
+		<result column="sntId" property="id" />
+		<result column="name" property="name" />
+		<result column="parentId" property="parentId" />
+		<result column="sntOrder" property="order" />
+		<result column="sntDelFlag" property="delFlag" />
+		<result column="createTime" property="createTime" />
+		<result column="updateTime" property="updateTime" />
+
+		<collection property="newsInformationList"  ofType="com.yonge.cooleshow.cms.dal.entity.SysNewsInformation">
+			<result column="id_" property="id" />
+			<result column="title_" property="title" />
+			<result column="content_" property="content" />
+			<result column="cover_image_" property="coverImage" />
+			<result column="video_cover_image_" property="videoCoverImage" />
+			<result column="link_url_" property="linkUrl"/>
+			<result column="type_" property="type"/>
+			<result column="online_time_" property="onlineTime"/>
+			<result column="offline_time_" property="offlineTime"/>
+			<result column="sub_type_" property="subType"/>
+			<result column="status_" property="status" typeHandler="com.yonge.cooleshow.common.dal.CustomEnumTypeHandler" />
+			<result column="create_time_" property="createTime" />
+			<result column="update_time_" property="updateTime" />
+			<result column="del_flag_" property="delFlag" />
+			<result column="href_target_" property="hrefTarget" />
+			<result column="order_" property="order" />
+			<result column="memo_" property="memo" />
+			<result column="attribute1_" property="attribute1" />
+			<result column="attribute2_" property="attribute2" />
+			<result column="show_time_" property="showTime" />
+			<result column="update_by_" property="updateBy" />
+			<result column="create_by_" property="createBy" />
+		</collection>
+	</resultMap>
 </mapper>

+ 6 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/CommonConstants.java

@@ -46,4 +46,10 @@ public interface CommonConstants {
 	 * @updateTime 2022/3/28 16:29
 	 */
 	String REDIS_SPLIT = ":";
+	/***
+	 * 微信授权类型
+	 * @author liweifan
+	 * @updateTime 2022/4/8 15:48
+	 */
+	String WECHAT_GRANT_TYPE = "authorization_code";
 }

+ 37 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/SysConfigConstant.java → cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -1,4 +1,4 @@
-package com.yonge.cooleshow.biz.dal.constant;
+package com.yonge.cooleshow.common.constant;
 
 /**
  * 系统配置常量
@@ -97,20 +97,47 @@ public interface SysConfigConstant {
     String AUTO_PLANNING_COURSE_MAX_WEEK = "auto_planning_course_max_week";
 
     /**
-     * 管理端默认头像
+     * 默认头像
      */
-    String DEFAULT_HEARD_ADMIN = "default_heard_admin";
+    String DEFAULT_HEARD = "default_heard";
     /**
-     * 老师默认头像
+     * 默认头像-男
      */
-    String DEFAULT_HEARD_TEACHER = "default_heard_teacher";
+    String DEFAULT_HEARD_BOY = "default_heard_boy";
     /**
-     * 学生默认头像-男
+     * 默认头像-女
      */
-    String DEFAULT_HEARD_STUDENT_BOY = "default_heard_student_boy";
-    /**
-     * 学生默认头像-女
+    String DEFAULT_HEARD_GIRL = "default_heard_girl";
+
+    /***
+     * 商品vip图片
+     * @author liweifan
+     * @updateTime 2022/4/20 11:43
+     */
+    String GOOD_LOGO_VIP = "good_logo_vip";
+    /***
+     * 商品视频课图片
+     * @author liweifan
+     * @updateTime 2022/4/20 11:43
+     */
+    String GOOD_LOGO_VIDEO = "good_logo_video";
+    /***
+     * 商品陪练课图片
+     * @author liweifan
+     * @updateTime 2022/4/20 11:43
+     */
+    String GOOD_LOGO_PRACTICE = "good_logo_practice";
+    /***
+     * 商品直播课图片
+     * @author liweifan
+     * @updateTime 2022/4/20 11:43
+     */
+    String GOOD_LOGO_LIVE = "good_logo_live";
+    /***
+     * 商品曲目图片
+     * @author liweifan
+     * @updateTime 2022/4/20 11:43
      */
-    String DEFAULT_HEARD_STUDENT_GIRL = "default_heard_student_girl";
+    String GOOD_LOGO_MUSIC = "good_logo_music";
 
 }

+ 12 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java

@@ -62,6 +62,9 @@ public class BaseController {
 	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, String msg) {
 		return getResponseData(false, statusCode, null, msg);
 	}
+	public static <T> HttpResponseResult<T> failed(int code, String msg) {
+		return getResponseData(false, code, null, msg);
+	}
 
 	public static <T> HttpResponseResult<T> status(boolean flag) {
 			return flag ? succeed() : failed("操作失败");
@@ -80,6 +83,15 @@ public class BaseController {
 		return obj;
 	}
 
+	private static <T> HttpResponseResult<T> getResponseData(boolean status, int code, T data, String message) {
+		HttpResponseResult<T> obj = new HttpResponseResult<T>();
+		obj.setStatus(status);
+		obj.setCode(code);
+		obj.setData(data);
+		obj.setMsg(message);
+		return obj;
+	}
+
 	/**
 	 * 处理一般异常
 	 *

+ 10 - 13
cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java

@@ -2,28 +2,17 @@ package com.yonge.cooleshow.common.entity;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.toolset.thirdparty.exception.ThirdpartyException;
 import com.yonge.toolset.utils.http.HttpUtil;
+import com.yonge.toolset.utils.json.JsonUtil;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.springframework.context.support.DefaultMessageSourceResolvable;
 import org.springframework.http.HttpStatus;
-import org.springframework.security.access.AccessDeniedException;
-import org.springframework.validation.BindException;
-import org.springframework.validation.FieldError;
-import org.springframework.web.bind.MethodArgumentNotValidException;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-
-import javax.crypto.Mac;
-import javax.crypto.spec.SecretKeySpec;
-import javax.servlet.http.HttpServletRequest;
-import java.net.URLEncoder;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * HttpResponse 返回结果
@@ -137,6 +126,9 @@ public class HttpResponseResult<T> {
 	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, T data, String msg) {
 		return getResponseData(false, statusCode, data, msg);
 	}
+	public static <T> HttpResponseResult<T> failed(int code, T data, String msg) {
+		return new HttpResponseResult<>(false, code, data, msg);
+	}
 
 	private static <T> HttpResponseResult<T> getResponseData(boolean status, HttpStatus statusCode, T data, String message) {
 		HttpResponseResult<T> obj = new HttpResponseResult<T>();
@@ -146,4 +138,9 @@ public class HttpResponseResult<T> {
 		obj.setMsg(message);
 		return obj;
 	}
+
+	@Override
+	public String toString(){
+	    return JsonUtil.toJSONString(this, SerializerFeature.PrettyFormat);
+    }
 }

+ 34 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/PlatformEnum.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.common.enums;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-24
+ */
+public enum PlatformEnum implements BaseEnum<String,PlatformEnum>{
+
+    STUDENT("STUDENT","STUDENT"),
+    TEACHER("TEACHER","TEACHER");
+
+    private String code;
+    private String msg;
+
+    PlatformEnum(String code,String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 2 - 0
cooleshow-gateway/gateway-web/src/main/java/com/yonge/gateway/web/config/SwaggerDocumentConfig.java

@@ -24,6 +24,8 @@ public class SwaggerDocumentConfig implements SwaggerResourcesProvider {
 		resources.add(swaggerResource("STUDENT服务", "/student-server/v2/api-docs", "2.0"));
 		resources.add(swaggerResource("TEACHER服务", "/teacher-server/v2/api-docs", "2.0"));
 		resources.add(swaggerResource("ADMIN服务", "/admin-server/v2/api-docs", "2.0"));
+		resources.add(swaggerResource("MALL_ADMIN服务", "/mall-admin-server/v2/api-docs", "2.0"));
+		resources.add(swaggerResource("MALL_PORTAL服务", "/mall-portal-server/v2/api-docs", "2.0"));
 		return resources;
 	}
 

+ 67 - 0
cooleshow-mall/mall-admin/pom.xml

@@ -0,0 +1,67 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.yonge.cooleshow.mbg</groupId>
+    <artifactId>mall-admin</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
+
+    <name>mall-admin</name>
+    <description>mall-admin project for mall</description>
+
+    <parent>
+        <groupId>com.yonge.cooleshow</groupId>
+        <artifactId>cooleshow-mall</artifactId>
+        <version>1.0</version>
+    </parent>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.cooleshow</groupId>
+            <artifactId>mall-mbg</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.yonge.cooleshow</groupId>
+            <artifactId>mall-common</artifactId>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.yonge.cooleshow</groupId>-->
+<!--            <artifactId>mall-security</artifactId>-->
+<!--        </dependency>-->
+        <dependency>
+            <groupId>com.yonge.cooleshow</groupId>
+            <artifactId>auth-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>20.0</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 26 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/MallAdminApplication.java

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.admin;
+
+import com.spring4all.swagger.EnableSwagger2Doc;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * 应用启动入口
+ * Created by macro on 2018/4/26.
+ */
+@SpringBootApplication
+@EnableDiscoveryClient
+@MapperScan({"com.yonge.cooleshow.admin.dao","com.yonge.cooleshow.mbg.mapper"})
+@ComponentScan(basePackages = {"com.yonge.cooleshow.admin", "com.yonge.cooleshow.mbg", "com.yonge.cooleshow.mall.common",
+                               "com.yonge.cooleshow.common"})
+@EnableSwagger2Doc
+@EnableFeignClients("com.yonge.cooleshow")
+public class MallAdminApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(MallAdminApplication.class, args);
+    }
+}

+ 34 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/GlobalCorsConfig.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.admin.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+/**
+ * 全局跨域配置
+ * Created by macro on 2019/7/27.
+ */
+@Configuration
+public class GlobalCorsConfig {
+
+    /**
+     * 允许跨域调用的过滤器
+     */
+    @Bean
+    public CorsFilter corsFilter() {
+        CorsConfiguration config = new CorsConfiguration();
+        //允许所有域名进行跨域调用
+        config.addAllowedOrigin("*");
+        //允许跨越发送cookie
+        config.setAllowCredentials(true);
+        //放行全部原始头信息
+        config.addAllowedHeader("*");
+        //允许所有请求方法跨域调用
+        config.addAllowedMethod("*");
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", config);
+        return new CorsFilter(source);
+    }
+}

+ 41 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/ResourceServerConfig.java

@@ -0,0 +1,41 @@
+package com.yonge.cooleshow.admin.config;
+
+import com.yonge.cooleshow.common.security.BaseAccessDeniedHandler;
+import com.yonge.cooleshow.common.security.BaseAuthenticationEntryPoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+
+@Configuration
+@EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+    @Autowired
+    private BaseAccessDeniedHandler baseAccessDeniedHandler;
+
+    @Autowired
+    private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.cors().and().csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
+                .authorizeRequests()
+                .antMatchers(HttpMethod.OPTIONS)
+                .permitAll()
+            .and()
+                .authorizeRequests()
+                .antMatchers("/wechat/*","/v2/api-docs", "/code/*","/payment/callback","/admin/login")
+            .permitAll().anyRequest().authenticated().and().httpBasic();
+    }
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+        resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
+    }
+}

+ 53 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/WebMvcConfig.java

@@ -0,0 +1,53 @@
+package com.yonge.cooleshow.admin.config;
+
+import com.yonge.cooleshow.common.config.EnumConverterFactory;
+import com.yonge.cooleshow.common.config.LocalFastJsonHttpMessageConverter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.format.FormatterRegistry;
+import org.springframework.http.MediaType;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+
+	/**
+	 * 枚举类的转换器 addConverterFactory
+	 */
+	@Override
+	public void addFormatters(FormatterRegistry registry) {
+		registry.addConverterFactory(new EnumConverterFactory());
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		// addPathPatterns 用于添加拦截规则, 这里假设拦截 /url 后面的全部链接
+		List<String> includePathPatterns = new ArrayList<String>();
+		includePathPatterns.add("/**");
+
+		// excludePathPatterns 用户排除拦截
+		List<String> excludePathPatterns = new ArrayList<String>();
+		excludePathPatterns.add("/login");
+
+		// registry.addInterceptor(mdcInterceptor).addPathPatterns(includePathPatterns).excludePathPatterns(excludePathPatterns);
+
+//		registry.addInterceptor(operationLogInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
+	}
+
+	@Bean
+	public HttpMessageConverters fastJsonHttpMessageConverters() {
+		LocalFastJsonHttpMessageConverter converter = new LocalFastJsonHttpMessageConverter();
+		List<MediaType> fastMediaTypes = new ArrayList<MediaType>();
+		fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
+		converter.setSupportedMediaTypes(fastMediaTypes);
+		return new HttpMessageConverters(converter);
+	}
+}

+ 44 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/AdminStatisticalController.java

@@ -0,0 +1,44 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
+import com.yonge.cooleshow.admin.service.OmsOrderService;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.CmsPrefrenceArea;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-26
+ */
+@Controller
+@Api(tags = "首页商城统计")
+@RequestMapping("/statistical")
+public class AdminStatisticalController {
+
+    @Autowired
+    private OmsOrderService orderService;
+
+
+     // 弃用
+    @Deprecated
+    @ApiOperation("商城用户统计")
+    @RequestMapping(value = "/user", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult<List<CmsPrefrenceArea>> userStatistical(@RequestBody UserStatisticalSearch search) {
+
+        orderService.userStatistical(search);
+        return CommonResult.failed();
+
+    }
+}

+ 34 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/CmsPreferenceAreaController.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.CmsPrefrenceArea;
+import com.yonge.cooleshow.admin.service.CmsPreferenceAreaService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 商品优选管理Controller
+ * Created by macro on 2018/6/1.
+ */
+@Controller
+@Api(tags = "CmsPreferenceAreaController", description = "商品优选管理")
+@RequestMapping("/prefrenceArea")
+public class CmsPreferenceAreaController {
+    @Autowired
+    private CmsPreferenceAreaService preferenceAreaService;
+
+    @ApiOperation("获取所有商品优选")
+    @RequestMapping(value = "/listAll", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<CmsPrefrenceArea>> listAll() {
+        List<CmsPrefrenceArea> preferenceAreaList = preferenceAreaService.listAll();
+        return CommonResult.success(preferenceAreaList);
+    }
+}

+ 46 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/CmsSubjectController.java

@@ -0,0 +1,46 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.CmsSubject;
+import com.yonge.cooleshow.admin.service.CmsSubjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 商品专题管理Controller
+ * Created by macro on 2018/6/1.
+ */
+@Controller
+@Api(tags = "CmsSubjectController", description = "商品专题管理")
+@RequestMapping("/subject")
+public class CmsSubjectController {
+    @Autowired
+    private CmsSubjectService subjectService;
+
+    @ApiOperation("获取全部商品专题")
+    @RequestMapping(value = "/listAll", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<CmsSubject>> listAll() {
+        List<CmsSubject> subjectList = subjectService.listAll();
+        return CommonResult.success(subjectList);
+    }
+
+    @ApiOperation(value = "根据专题名称分页获取商品专题")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<CmsSubject>> getList(@RequestParam(value = "keyword", required = false) String keyword,
+                                                        @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                        @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {
+        List<CmsSubject> subjectList = subjectService.list(keyword, pageNum, pageSize);
+        return CommonResult.success(CommonPage.restPage(subjectList));
+    }
+}

+ 118 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/MinioController.java

@@ -0,0 +1,118 @@
+// package com.yonge.cooleshow.admin.controller;
+//
+// import cn.hutool.core.collection.CollUtil;
+// import cn.hutool.core.util.ArrayUtil;
+// import cn.hutool.json.JSONUtil;
+// import com.yonge.cooleshow.common.api.CommonResult;
+// import com.yonge.cooleshow.admin.dto.BucketPolicyConfigDto;
+// import com.yonge.cooleshow.admin.dto.MinioUploadDto;
+// import io.minio.*;
+// import io.swagger.annotations.Api;
+// import io.swagger.annotations.ApiOperation;
+// import org.slf4j.Logger;
+// import org.slf4j.LoggerFactory;
+// import org.springframework.beans.factory.annotation.Value;
+// import org.springframework.stereotype.Controller;
+// import org.springframework.web.bind.annotation.RequestMapping;
+// import org.springframework.web.bind.annotation.RequestMethod;
+// import org.springframework.web.bind.annotation.RequestParam;
+// import org.springframework.web.bind.annotation.ResponseBody;
+// import org.springframework.web.multipart.MultipartFile;
+//
+// import java.text.SimpleDateFormat;
+// import java.util.Date;
+//
+// /**
+//  * MinIO对象存储管理Controller
+//  * Created by macro on 2019/12/25.
+//  */
+// @Api(tags = "MinioController", description = "MinIO对象存储管理")
+// @Controller
+// @RequestMapping("/minio")
+// public class MinioController {
+//
+//     private static final Logger LOGGER = LoggerFactory.getLogger(MinioController.class);
+//     @Value("${minio.endpoint}")
+//     private String ENDPOINT;
+//     @Value("${minio.bucketName}")
+//     private String BUCKET_NAME;
+//     @Value("${minio.accessKey}")
+//     private String ACCESS_KEY;
+//     @Value("${minio.secretKey}")
+//     private String SECRET_KEY;
+//
+//     @ApiOperation("文件上传")
+//     @RequestMapping(value = "/upload", method = RequestMethod.POST)
+//     @ResponseBody
+//     public CommonResult upload(@RequestParam("file") MultipartFile file) {
+//         try {
+//             //创建一个MinIO的Java客户端
+//             MinioClient minioClient =MinioClient.builder()
+//                     .endpoint(ENDPOINT)
+//                     .credentials(ACCESS_KEY,SECRET_KEY)
+//                     .build();
+//             boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(BUCKET_NAME).build());
+//             if (isExist) {
+//                 LOGGER.info("存储桶已经存在!");
+//             } else {
+//                 //创建存储桶并设置只读权限
+//                 minioClient.makeBucket(MakeBucketArgs.builder().bucket(BUCKET_NAME).build());
+//                 BucketPolicyConfigDto bucketPolicyConfigDto = createBucketPolicyConfigDto(BUCKET_NAME);
+//                 SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
+//                         .bucket(BUCKET_NAME)
+//                         .config(JSONUtil.toJsonStr(bucketPolicyConfigDto))
+//                         .build();
+//                 minioClient.setBucketPolicy(setBucketPolicyArgs);
+//             }
+//             String filename = file.getOriginalFilename();
+//             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+//             // 设置存储对象名称
+//             String objectName = sdf.format(new Date()) + "/" + filename;
+//             // 使用putObject上传一个文件到存储桶中
+//             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
+//                     .bucket(BUCKET_NAME)
+//                     .object(objectName)
+//                     .contentType(file.getContentType())
+//                     .stream(file.getInputStream(), file.getSize(), ObjectWriteArgs.MIN_MULTIPART_SIZE).build();
+//             minioClient.putObject(putObjectArgs);
+//             LOGGER.info("文件上传成功!");
+//             MinioUploadDto minioUploadDto = new MinioUploadDto();
+//             minioUploadDto.setName(filename);
+//             minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
+//             return CommonResult.success(minioUploadDto);
+//         } catch (Exception e) {
+//             e.printStackTrace();
+//             LOGGER.info("上传发生错误: {}!", e.getMessage());
+//         }
+//         return CommonResult.failed();
+//     }
+//
+//     private BucketPolicyConfigDto createBucketPolicyConfigDto(String bucketName) {
+//         BucketPolicyConfigDto.Statement statement = BucketPolicyConfigDto.Statement.builder()
+//                 .Effect("Allow")
+//                 .Principal("*")
+//                 .Action("s3:GetObject")
+//                 .Resource("arn:aws:s3:::"+bucketName+"/*.**").build();
+//         return BucketPolicyConfigDto.builder()
+//                 .Version("2012-10-17")
+//                 .Statement(CollUtil.toList(statement))
+//                 .build();
+//     }
+//
+//     @ApiOperation("文件删除")
+//     @RequestMapping(value = "/delete", method = RequestMethod.POST)
+//     @ResponseBody
+//     public CommonResult delete(@RequestParam("objectName") String objectName) {
+//         try {
+//             MinioClient minioClient = MinioClient.builder()
+//                     .endpoint(ENDPOINT)
+//                     .credentials(ACCESS_KEY,SECRET_KEY)
+//                     .build();
+//             minioClient.removeObject(RemoveObjectArgs.builder().bucket(BUCKET_NAME).object(objectName).build());
+//             return CommonResult.success(null);
+//         } catch (Exception e) {
+//             e.printStackTrace();
+//         }
+//         return CommonResult.failed();
+//     }
+// }

+ 34 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsCompanyAddressController.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.OmsCompanyAddress;
+import com.yonge.cooleshow.admin.service.OmsCompanyAddressService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 收货地址管理Controller
+ * Created by macro on 2018/10/18.
+ */
+@Controller
+@Api(tags = "OmsCompanyAddressController", description = "收货地址管理")
+@RequestMapping("/companyAddress")
+public class OmsCompanyAddressController {
+    @Autowired
+    private OmsCompanyAddressService companyAddressService;
+
+    @ApiOperation("获取所有收货地址")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<OmsCompanyAddress>> list() {
+        List<OmsCompanyAddress> companyAddressList = companyAddressService.list();
+        return CommonResult.success(companyAddressList);
+    }
+}

+ 128 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderController.java

@@ -0,0 +1,128 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.*;
+import com.yonge.cooleshow.mbg.model.OmsOrder;
+import com.yonge.cooleshow.admin.service.OmsOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 订单管理Controller
+ * Created by macro on 2018/10/11.
+ */
+@Controller
+@Api(tags = "OmsOrderController", description = "订单管理")
+@RequestMapping("/order")
+public class OmsOrderController {
+    @Autowired
+    private OmsOrderService orderService;
+
+    @ApiOperation("查询订单")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<OmsOrder>> list(OmsOrderQueryParam queryParam,
+                                                   @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                   @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<OmsOrder> orderList = orderService.list(queryParam, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(orderList));
+    }
+
+    @ApiOperation("远程查询订单成功的用户和时间信息")
+    @PostMapping(value = "/userOrderInfoList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "startTime", dataType = "LocalDateTime", value = "订单开始时间", required = true),
+            @ApiImplicitParam(name = "endTime", dataType = "LocalDateTime", value = "订单结束时间",required = true),
+            @ApiImplicitParam(name = "userIdList", dataType = "List", value = "用户id集合",required = true),
+    })
+    @ResponseBody
+    public CommonResult<List<Map<String,Object>>> userOrderInfoList(@RequestBody Map<String,Object> param) {
+        List<Map<String,Object>> orderList = orderService.userOrderInfoList(param);
+        return CommonResult.success(orderList);
+    }
+
+    @ApiOperation("批量发货")
+    @RequestMapping(value = "/update/delivery", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delivery(@RequestBody List<OmsOrderDeliveryParam> deliveryParamList) {
+        int count = orderService.delivery(deliveryParamList);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量关闭订单")
+    @RequestMapping(value = "/update/close", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult close(@RequestParam("ids") List<Long> ids, @RequestParam String note) {
+        int count = orderService.close(ids, note);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量删除订单")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = orderService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取订单详情:订单信息、商品信息、操作记录")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<OmsOrderDetail> detail(@PathVariable Long id) {
+        OmsOrderDetail orderDetailResult = orderService.detail(id);
+        return CommonResult.success(orderDetailResult);
+    }
+
+    @ApiOperation("修改收货人信息")
+    @RequestMapping(value = "/update/receiverInfo", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateReceiverInfo(@RequestBody OmsReceiverInfoParam receiverInfoParam) {
+        int count = orderService.updateReceiverInfo(receiverInfoParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改订单费用信息")
+    @RequestMapping(value = "/update/moneyInfo", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateReceiverInfo(@RequestBody OmsMoneyInfoParam moneyInfoParam) {
+        int count = orderService.updateMoneyInfo(moneyInfoParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("备注订单")
+    @RequestMapping(value = "/update/note", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateNote(@RequestParam("id") Long id,
+                                   @RequestParam("note") String note,
+                                   @RequestParam("status") Integer status) {
+        int count = orderService.updateNote(id, note, status);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+}

+ 69 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderReturnApplyController.java

@@ -0,0 +1,69 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.OmsOrderReturnApplyResult;
+import com.yonge.cooleshow.admin.dto.OmsReturnApplyQueryParam;
+import com.yonge.cooleshow.admin.dto.OmsUpdateStatusParam;
+import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
+import com.yonge.cooleshow.admin.service.OmsOrderReturnApplyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 订单退货申请管理Controller
+ * Created by macro on 2018/10/18.
+ */
+@Controller
+@Api(tags = "OmsOrderReturnApplyController", description = "订单退货申请管理")
+@RequestMapping("/returnApply")
+public class OmsOrderReturnApplyController {
+    @Autowired
+    private OmsOrderReturnApplyService returnApplyService;
+
+    @ApiOperation("分页查询退货申请")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<OmsOrderReturnApply>> list(OmsReturnApplyQueryParam queryParam,
+                                                              @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                              @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<OmsOrderReturnApply> returnApplyList = returnApplyService.list(queryParam, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(returnApplyList));
+    }
+
+    @ApiOperation("批量删除退货申请")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = returnApplyService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取退货申请详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult getItem(@PathVariable Long id) {
+        OmsOrderReturnApplyResult result = returnApplyService.getItem(id);
+        return CommonResult.success(result);
+    }
+
+    @ApiOperation("修改退货申请状态")
+    @RequestMapping(value = "/update/status/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateStatus(@PathVariable Long id, @RequestBody OmsUpdateStatusParam statusParam) {
+        int count = returnApplyService.updateStatus(id, statusParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+}

+ 87 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderReturnReasonController.java

@@ -0,0 +1,87 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.OmsOrderReturnReason;
+import com.yonge.cooleshow.admin.service.OmsOrderReturnReasonService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 退货原因管理Controller
+ * Created by macro on 2018/10/17.
+ */
+@Controller
+@Api(tags = "OmsOrderReturnReasonController", description = "退货原因管理")
+@RequestMapping("/returnReason")
+public class OmsOrderReturnReasonController {
+    @Autowired
+    private OmsOrderReturnReasonService orderReturnReasonService;
+
+    @ApiOperation("添加退货原因")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody OmsOrderReturnReason returnReason) {
+        int count = orderReturnReasonService.create(returnReason);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改退货原因")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody OmsOrderReturnReason returnReason) {
+        int count = orderReturnReasonService.update(id, returnReason);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量删除退货原因")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = orderReturnReasonService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("分页查询退货原因")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<OmsOrderReturnReason>> list(@RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                               @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<OmsOrderReturnReason> reasonList = orderReturnReasonService.list(pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(reasonList));
+    }
+
+    @ApiOperation("获取单个退货原因详情信息")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<OmsOrderReturnReason> getItem(@PathVariable Long id) {
+        OmsOrderReturnReason reason = orderReturnReasonService.getItem(id);
+        return CommonResult.success(reason);
+    }
+
+    @ApiOperation("修改退货原因启用状态")
+    @RequestMapping(value = "/update/status", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateStatus(@RequestParam(value = "status") Integer status,
+                                     @RequestParam("ids") List<Long> ids) {
+        int count = orderReturnReasonService.updateStatus(ids, status);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+}

+ 41 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderSettingController.java

@@ -0,0 +1,41 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.OmsOrderSetting;
+import com.yonge.cooleshow.admin.service.OmsOrderSettingService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 订单设置管理Controller
+ * Created by macro on 2018/10/16.
+ */
+@Controller
+@Api(tags = "OmsOrderSettingController", description = "订单设置管理")
+@RequestMapping("/orderSetting")
+public class OmsOrderSettingController {
+    @Autowired
+    private OmsOrderSettingService orderSettingService;
+
+    @ApiOperation("获取指定订单设置")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<OmsOrderSetting> getItem(@PathVariable Long id) {
+        OmsOrderSetting orderSetting = orderSettingService.getItem(id);
+        return CommonResult.success(orderSetting);
+    }
+
+    @ApiOperation("修改指定订单设置")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody OmsOrderSetting orderSetting) {
+        int count = orderSettingService.update(id,orderSetting);
+        if(count>0){
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+}

+ 45 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OssController.java

@@ -0,0 +1,45 @@
+package com.yonge.cooleshow.admin.controller;
+
+
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.OssCallbackResult;
+import com.yonge.cooleshow.admin.dto.OssPolicyResult;
+import com.yonge.cooleshow.admin.service.OssService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Oss对象存储管理Controller
+ * Created by macro on 2018/4/26.
+ */
+@Controller
+@Api(tags = "OssController", description = "Oss管理")
+@RequestMapping("/aliyun/oss")
+public class OssController {
+    @Autowired
+    private OssService ossService;
+
+    @ApiOperation(value = "Oss上传签名生成")
+    @RequestMapping(value = "/policy", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<OssPolicyResult> policy() {
+        OssPolicyResult result = ossService.policy();
+        return CommonResult.success(result);
+    }
+
+    @ApiOperation(value = "Oss上传成功回调")
+    @RequestMapping(value = "callback", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult<OssCallbackResult> callback(HttpServletRequest request) {
+        OssCallbackResult ossCallbackResult = ossService.callback(request);
+        return CommonResult.success(ossCallbackResult);
+    }
+
+}

+ 130 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsBrandController.java

@@ -0,0 +1,130 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.PmsBrandParam;
+import com.yonge.cooleshow.mbg.model.PmsBrand;
+import com.yonge.cooleshow.admin.service.PmsBrandService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商品品牌管理Controller
+ * Created by macro on 2018/4/26.
+ */
+@Controller
+@Api(tags = "PmsBrandController", description = "商品品牌管理")
+@RequestMapping("/brand")
+public class PmsBrandController {
+    @Autowired
+    private PmsBrandService brandService;
+
+    @ApiOperation(value = "获取全部品牌列表")
+    @RequestMapping(value = "/listAll", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsBrand>> getList() {
+        return CommonResult.success(brandService.listAllBrand());
+    }
+
+    @ApiOperation(value = "添加品牌")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@Validated @RequestBody PmsBrandParam pmsBrand) {
+        CommonResult commonResult;
+        int count = brandService.createBrand(pmsBrand);
+        if (count == 1) {
+            commonResult = CommonResult.success(count);
+        } else {
+            commonResult = CommonResult.failed();
+        }
+        return commonResult;
+    }
+
+    @ApiOperation(value = "更新品牌")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable("id") Long id,
+                               @Validated @RequestBody PmsBrandParam pmsBrandParam) {
+        CommonResult commonResult;
+        int count = brandService.updateBrand(id, pmsBrandParam);
+        if (count == 1) {
+            commonResult = CommonResult.success(count);
+        } else {
+            commonResult = CommonResult.failed();
+        }
+        return commonResult;
+    }
+
+    @ApiOperation(value = "删除品牌")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult delete(@PathVariable("id") Long id) {
+        int count = brandService.deleteBrand(id);
+        if (count == 1) {
+            return CommonResult.success(null);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation(value = "根据品牌名称分页获取品牌列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsBrand>> getList(@RequestParam(value = "keyword", required = false) String keyword,
+                                                      @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                      @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {
+        List<PmsBrand> brandList = brandService.listBrand(keyword, pageNum, pageSize);
+        return CommonResult.success(CommonPage.restPage(brandList));
+    }
+
+    @ApiOperation(value = "根据编号查询品牌信息")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsBrand> getItem(@PathVariable("id") Long id) {
+        return CommonResult.success(brandService.getBrand(id));
+    }
+
+    @ApiOperation(value = "批量删除品牌")
+    @RequestMapping(value = "/delete/batch", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult deleteBatch(@RequestParam("ids") List<Long> ids) {
+        int count = brandService.deleteBrand(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation(value = "批量更新显示状态")
+    @RequestMapping(value = "/update/showStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateShowStatus(@RequestParam("ids") List<Long> ids,
+                                   @RequestParam("showStatus") Integer showStatus) {
+        int count = brandService.updateShowStatus(ids, showStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation(value = "批量更新厂家制造商状态")
+    @RequestMapping(value = "/update/factoryStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateFactoryStatus(@RequestParam("ids") List<Long> ids,
+                                      @RequestParam("factoryStatus") Integer factoryStatus) {
+        int count = brandService.updateFactoryStatus(ids, factoryStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+}

+ 86 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductAttributeCategoryController.java

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.PmsProductAttributeCategoryItem;
+import com.yonge.cooleshow.mbg.model.PmsProductAttributeCategory;
+import com.yonge.cooleshow.admin.service.PmsProductAttributeCategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商品属性分类管理Controller
+ * Created by macro on 2018/4/26.
+ */
+@Controller
+@Api(tags = "PmsProductAttributeCategoryController", description = "商品属性分类管理")
+@RequestMapping("/productAttribute/category")
+public class PmsProductAttributeCategoryController {
+    @Autowired
+    private PmsProductAttributeCategoryService productAttributeCategoryService;
+
+    @ApiOperation("添加商品属性分类")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestParam String name) {
+        int count = productAttributeCategoryService.create(name);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改商品属性分类")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestParam String name) {
+        int count = productAttributeCategoryService.update(id, name);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("删除单个商品属性分类")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = productAttributeCategoryService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("获取单个商品属性分类信息")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsProductAttributeCategory> getItem(@PathVariable Long id) {
+        PmsProductAttributeCategory productAttributeCategory = productAttributeCategoryService.getItem(id);
+        return CommonResult.success(productAttributeCategory);
+    }
+
+    @ApiOperation("分页获取所有商品属性分类")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProductAttributeCategory>> getList(@RequestParam(defaultValue = "5") Integer pageSize, @RequestParam(defaultValue = "1") Integer pageNum) {
+        List<PmsProductAttributeCategory> productAttributeCategoryList = productAttributeCategoryService.getList(pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(productAttributeCategoryList));
+    }
+
+    @ApiOperation("获取所有商品属性分类及其下属性")
+    @RequestMapping(value = "/list/withAttr", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProductAttributeCategoryItem>> getListWithAttr() {
+        List<PmsProductAttributeCategoryItem> productAttributeCategoryResultList = productAttributeCategoryService.getListWithAttr();
+        return CommonResult.success(productAttributeCategoryResultList);
+    }
+}

+ 93 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductAttributeController.java

@@ -0,0 +1,93 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.PmsProductAttributeParam;
+import com.yonge.cooleshow.admin.dto.ProductAttrInfo;
+import com.yonge.cooleshow.mbg.model.PmsProductAttribute;
+import com.yonge.cooleshow.admin.service.PmsProductAttributeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商品属性管理Controller
+ * Created by macro on 2018/4/26.
+ */
+@Controller
+@Api(tags = "PmsProductAttributeController", description = "商品属性管理")
+@RequestMapping("/productAttribute")
+public class PmsProductAttributeController {
+    @Autowired
+    private PmsProductAttributeService productAttributeService;
+
+    @ApiOperation("根据分类查询属性列表或参数列表")
+    @ApiImplicitParams({@ApiImplicitParam(name = "type", value = "0表示属性,1表示参数", required = true, paramType = "query", dataType = "integer")})
+    @RequestMapping(value = "/list/{cid}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProductAttribute>> getList(@PathVariable Long cid,
+                                                                 @RequestParam(value = "type") Integer type,
+                                                                 @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                                 @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<PmsProductAttribute> productAttributeList = productAttributeService.getList(cid, type, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(productAttributeList));
+    }
+
+    @ApiOperation("添加商品属性信息")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody PmsProductAttributeParam productAttributeParam) {
+        int count = productAttributeService.create(productAttributeParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改商品属性信息")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody PmsProductAttributeParam productAttributeParam) {
+        int count = productAttributeService.update(id, productAttributeParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("查询单个商品属性")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsProductAttribute> getItem(@PathVariable Long id) {
+        PmsProductAttribute productAttribute = productAttributeService.getItem(id);
+        return CommonResult.success(productAttribute);
+    }
+
+    @ApiOperation("批量删除商品属性")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = productAttributeService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("根据商品分类的id获取商品属性及属性分类")
+    @RequestMapping(value = "/attrInfo/{productCategoryId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<ProductAttrInfo>> getAttrInfo(@PathVariable Long productCategoryId) {
+        List<ProductAttrInfo> productAttrInfoList = productAttributeService.getProductAttrInfo(productCategoryId);
+        return CommonResult.success(productAttrInfoList);
+    }
+}

+ 116 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductCategoryController.java

@@ -0,0 +1,116 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.PmsProductCategoryParam;
+import com.yonge.cooleshow.admin.dto.PmsProductCategoryWithChildrenItem;
+import com.yonge.cooleshow.mbg.model.PmsProductCategory;
+import com.yonge.cooleshow.admin.service.PmsProductCategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商品分类管理Controller
+ * Created by macro on 2018/4/26.
+ */
+@Controller
+@Api(tags = "PmsProductCategoryController", description = "商品分类管理")
+@RequestMapping("/productCategory")
+public class PmsProductCategoryController {
+    @Autowired
+    private PmsProductCategoryService productCategoryService;
+
+    @ApiOperation("添加商品分类")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@Validated @RequestBody PmsProductCategoryParam productCategoryParam) {
+        int count = productCategoryService.create(productCategoryParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改商品分类")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id,
+                         @Validated
+                         @RequestBody PmsProductCategoryParam productCategoryParam) {
+        int count = productCategoryService.update(id, productCategoryParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("分页查询商品分类")
+    @RequestMapping(value = "/list/{parentId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProductCategory>> getList(@PathVariable Long parentId,
+                                                                @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                                @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<PmsProductCategory> productCategoryList = productCategoryService.getList(parentId, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(productCategoryList));
+    }
+
+    @ApiOperation("根据id获取商品分类")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsProductCategory> getItem(@PathVariable Long id) {
+        PmsProductCategory productCategory = productCategoryService.getItem(id);
+        return CommonResult.success(productCategory);
+    }
+
+    @ApiOperation("删除商品分类")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = productCategoryService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改导航栏显示状态")
+    @RequestMapping(value = "/update/navStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateNavStatus(@RequestParam("ids") List<Long> ids, @RequestParam("navStatus") Integer navStatus) {
+        int count = productCategoryService.updateNavStatus(ids, navStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改显示状态")
+    @RequestMapping(value = "/update/showStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateShowStatus(@RequestParam("ids") List<Long> ids, @RequestParam("showStatus") Integer showStatus) {
+        int count = productCategoryService.updateShowStatus(ids, showStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("查询所有一级分类及子分类")
+    @RequestMapping(value = "/list/withChildren", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProductCategoryWithChildrenItem>> listWithChildren() {
+        List<PmsProductCategoryWithChildrenItem> list = productCategoryService.listWithChildren();
+        return CommonResult.success(list);
+    }
+}

+ 144 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductController.java

@@ -0,0 +1,144 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.PmsProductParam;
+import com.yonge.cooleshow.admin.dto.PmsProductQueryParam;
+import com.yonge.cooleshow.admin.dto.PmsProductResult;
+import com.yonge.cooleshow.mbg.model.PmsProduct;
+import com.yonge.cooleshow.admin.service.PmsProductService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商品管理Controller
+ * Created by macro on 2018/4/26.
+ */
+@Controller
+@Api(tags = "PmsProductController", description = "商品管理")
+@RequestMapping("/product")
+public class PmsProductController {
+    @Autowired
+    private PmsProductService productService;
+
+    @ApiOperation("创建商品")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody PmsProductParam productParam) {
+        int count = productService.create(productParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("根据商品id获取商品编辑信息")
+    @RequestMapping(value = "/updateInfo/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsProductResult> getUpdateInfo(@PathVariable Long id) {
+        PmsProductResult productResult = productService.getUpdateInfo(id);
+        return CommonResult.success(productResult);
+    }
+
+    @ApiOperation("更新商品")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody PmsProductParam productParam) {
+        int count = productService.update(id, productParam);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("查询商品")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProduct>> getList(PmsProductQueryParam productQueryParam,
+                                                        @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                        @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<PmsProduct> productList = productService.list(productQueryParam, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(productList));
+    }
+
+    @ApiOperation("根据商品名称或货号模糊查询")
+    @RequestMapping(value = "/simpleList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProduct>> getList(String keyword) {
+        List<PmsProduct> productList = productService.list(keyword);
+        return CommonResult.success(productList);
+    }
+
+    @ApiOperation("批量修改审核状态")
+    @RequestMapping(value = "/update/verifyStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateVerifyStatus(@RequestParam("ids") List<Long> ids,
+                                           @RequestParam("verifyStatus") Integer verifyStatus,
+                                           @RequestParam("detail") String detail) {
+        int count = productService.updateVerifyStatus(ids, verifyStatus, detail);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("批量上下架商品")
+    @RequestMapping(value = "/update/publishStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updatePublishStatus(@RequestParam("ids") List<Long> ids,
+                                            @RequestParam("publishStatus") Integer publishStatus) {
+        int count = productService.updatePublishStatus(ids, publishStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("批量推荐商品")
+    @RequestMapping(value = "/update/recommendStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateRecommendStatus(@RequestParam("ids") List<Long> ids,
+                                              @RequestParam("recommendStatus") Integer recommendStatus) {
+        int count = productService.updateRecommendStatus(ids, recommendStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("批量设为新品")
+    @RequestMapping(value = "/update/newStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateNewStatus(@RequestParam("ids") List<Long> ids,
+                                        @RequestParam("newStatus") Integer newStatus) {
+        int count = productService.updateNewStatus(ids, newStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("批量修改删除状态")
+    @RequestMapping(value = "/update/deleteStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateDeleteStatus(@RequestParam("ids") List<Long> ids,
+                                           @RequestParam("deleteStatus") Integer deleteStatus) {
+        int count = productService.updateDeleteStatus(ids, deleteStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+}

+ 43 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsSkuStockController.java

@@ -0,0 +1,43 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.PmsSkuStock;
+import com.yonge.cooleshow.admin.service.PmsSkuStockService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商品SKU库存管理Controller
+ * Created by macro on 2018/4/27.
+ */
+@Controller
+@Api(tags = "PmsSkuStockController", description = "sku商品库存管理")
+@RequestMapping("/sku")
+public class PmsSkuStockController {
+    @Autowired
+    private PmsSkuStockService skuStockService;
+
+    @ApiOperation("根据商品ID及sku编码模糊搜索sku库存")
+    @RequestMapping(value = "/{pid}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsSkuStock>> getList(@PathVariable Long pid, @RequestParam(value = "keyword",required = false) String keyword) {
+        List<PmsSkuStock> skuStockList = skuStockService.getList(pid, keyword);
+        return CommonResult.success(skuStockList);
+    }
+    @ApiOperation("批量更新sku库存信息")
+    @RequestMapping(value ="/update/{pid}",method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long pid,@RequestBody List<PmsSkuStock> skuStockList){
+        int count = skuStockService.update(pid,skuStockList);
+        if(count>0){
+            return CommonResult.success(count);
+        }else{
+            return CommonResult.failed();
+        }
+    }
+}

+ 78 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsCouponController.java

@@ -0,0 +1,78 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.SmsCouponParam;
+import com.yonge.cooleshow.mbg.model.SmsCoupon;
+import com.yonge.cooleshow.admin.service.SmsCouponService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 优惠券管理Controller
+ * Created by macro on 2018/8/28.
+ */
+@Controller
+@Api(tags = "SmsCouponController", description = "优惠券管理")
+@RequestMapping("/coupon")
+public class SmsCouponController {
+    @Autowired
+    private SmsCouponService couponService;
+    @ApiOperation("添加优惠券")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult add(@RequestBody SmsCouponParam couponParam) {
+        int count = couponService.create(couponParam);
+        if(count>0){
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("删除优惠券")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = couponService.delete(id);
+        if(count>0){
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改优惠券")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id,@RequestBody SmsCouponParam couponParam) {
+        int count = couponService.update(id,couponParam);
+        if(count>0){
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("根据优惠券名称和类型分页获取优惠券列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<SmsCoupon>> list(
+            @RequestParam(value = "name",required = false) String name,
+            @RequestParam(value = "type",required = false) Integer type,
+            @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+            @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsCoupon> couponList = couponService.list(name,type,pageSize,pageNum);
+        return CommonResult.success(CommonPage.restPage(couponList));
+    }
+
+    @ApiOperation("获取单个优惠券的详细信息")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<SmsCouponParam> getItem(@PathVariable Long id) {
+        SmsCouponParam couponParam = couponService.getItem(id);
+        return CommonResult.success(couponParam);
+    }
+}

+ 40 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsCouponHistoryController.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.SmsCouponHistory;
+import com.yonge.cooleshow.admin.service.SmsCouponHistoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 优惠券领取记录管理Controller
+ * Created by macro on 2018/11/6.
+ */
+@Controller
+@Api(tags = "SmsCouponHistoryController", description = "优惠券领取记录管理")
+@RequestMapping("/couponHistory")
+public class SmsCouponHistoryController {
+    @Autowired
+    private SmsCouponHistoryService historyService;
+
+    @ApiOperation("根据优惠券id,使用状态,订单编号分页获取领取记录")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<SmsCouponHistory>> list(@RequestParam(value = "couponId", required = false) Long couponId,
+                                                           @RequestParam(value = "useStatus", required = false) Integer useStatus,
+                                                           @RequestParam(value = "orderSn", required = false) String orderSn,
+                                                           @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                           @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsCouponHistory> historyList = historyService.list(couponId, useStatus, orderSn, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(historyList));
+    }
+}

+ 87 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsFlashPromotionController.java

@@ -0,0 +1,87 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.SmsFlashPromotion;
+import com.yonge.cooleshow.admin.service.SmsFlashPromotionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 限时购活动管理Controller
+ * Created by macro on 2018/11/16.
+ */
+@Controller
+@Api(tags = "SmsFlashPromotionController", description = "限时购活动管理")
+@RequestMapping("/flash")
+public class SmsFlashPromotionController {
+    @Autowired
+    private SmsFlashPromotionService flashPromotionService;
+
+    @ApiOperation("添加活动")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody SmsFlashPromotion flashPromotion) {
+        int count = flashPromotionService.create(flashPromotion);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("编辑活动")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public Object update(@PathVariable Long id, @RequestBody SmsFlashPromotion flashPromotion) {
+        int count = flashPromotionService.update(id, flashPromotion);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("删除活动")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public Object delete(@PathVariable Long id) {
+        int count = flashPromotionService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改上下线状态")
+    @RequestMapping(value = "/update/status/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public Object update(@PathVariable Long id, Integer status) {
+        int count = flashPromotionService.updateStatus(id, status);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取活动详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public Object getItem(@PathVariable Long id) {
+        SmsFlashPromotion flashPromotion = flashPromotionService.getItem(id);
+        return CommonResult.success(flashPromotion);
+    }
+
+    @ApiOperation("根据活动名称分页查询")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public Object getItem(@RequestParam(value = "keyword", required = false) String keyword,
+                          @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                          @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsFlashPromotion> flashPromotionList = flashPromotionService.list(keyword, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(flashPromotionList));
+    }
+}

+ 78 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsFlashPromotionProductRelationController.java

@@ -0,0 +1,78 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.SmsFlashPromotionProduct;
+import com.yonge.cooleshow.mbg.model.SmsFlashPromotionProductRelation;
+import com.yonge.cooleshow.admin.service.SmsFlashPromotionProductRelationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 限时购和商品关系管理Controller
+ * Created by macro on 2018/11/16.
+ */
+@Controller
+@Api(tags = "SmsFlashPromotionProductRelationController", description = "限时购和商品关系管理")
+@RequestMapping("/flashProductRelation")
+public class SmsFlashPromotionProductRelationController {
+    @Autowired
+    private SmsFlashPromotionProductRelationService relationService;
+
+    @ApiOperation("批量选择商品添加关联")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody List<SmsFlashPromotionProductRelation> relationList) {
+        int count = relationService.create(relationList);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改关联信息")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody SmsFlashPromotionProductRelation relation) {
+        int count = relationService.update(id, relation);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("删除关联")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = relationService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取管理商品促销信息")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<SmsFlashPromotionProductRelation> getItem(@PathVariable Long id) {
+        SmsFlashPromotionProductRelation relation = relationService.getItem(id);
+        return CommonResult.success(relation);
+    }
+
+    @ApiOperation("分页查询不同场次关联及商品信息")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<SmsFlashPromotionProduct>> list(@RequestParam(value = "flashPromotionId") Long flashPromotionId,
+                                                                   @RequestParam(value = "flashPromotionSessionId") Long flashPromotionSessionId,
+                                                                   @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                                   @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsFlashPromotionProduct> flashPromotionProductList = relationService.list(flashPromotionId, flashPromotionSessionId, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(flashPromotionProductList));
+    }
+}

+ 93 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsFlashPromotionSessionController.java

@@ -0,0 +1,93 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.SmsFlashPromotionSessionDetail;
+import com.yonge.cooleshow.mbg.model.SmsFlashPromotionSession;
+import com.yonge.cooleshow.admin.service.SmsFlashPromotionSessionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 限时购场次管理Controller
+ * Created by macro on 2018/11/16.
+ */
+@Controller
+@Api(tags = "SmsFlashPromotionSessionController", description = "限时购场次管理")
+@RequestMapping("/flashSession")
+public class SmsFlashPromotionSessionController {
+    @Autowired
+    private SmsFlashPromotionSessionService flashPromotionSessionService;
+
+    @ApiOperation("添加场次")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody SmsFlashPromotionSession promotionSession) {
+        int count = flashPromotionSessionService.create(promotionSession);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改场次")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody SmsFlashPromotionSession promotionSession) {
+        int count = flashPromotionSessionService.update(id, promotionSession);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改启用状态")
+    @RequestMapping(value = "/update/status/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateStatus(@PathVariable Long id, Integer status) {
+        int count = flashPromotionSessionService.updateStatus(id, status);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("删除场次")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = flashPromotionSessionService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取场次详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<SmsFlashPromotionSession> getItem(@PathVariable Long id) {
+        SmsFlashPromotionSession promotionSession = flashPromotionSessionService.getItem(id);
+        return CommonResult.success(promotionSession);
+    }
+
+    @ApiOperation("获取全部场次")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<SmsFlashPromotionSession>> list() {
+        List<SmsFlashPromotionSession> promotionSessionList = flashPromotionSessionService.list();
+        return CommonResult.success(promotionSessionList);
+    }
+
+    @ApiOperation("获取全部可选场次及其数量")
+    @RequestMapping(value = "/selectList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<SmsFlashPromotionSessionDetail>> selectList(Long flashPromotionId) {
+        List<SmsFlashPromotionSessionDetail> promotionSessionList = flashPromotionSessionService.selectList(flashPromotionId);
+        return CommonResult.success(promotionSessionList);
+    }
+}

+ 85 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeAdvertiseController.java

@@ -0,0 +1,85 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.SmsHomeAdvertise;
+import com.yonge.cooleshow.admin.service.SmsHomeAdvertiseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 首页轮播广告管理Controller
+ * Created by macro on 2018/11/7.
+ */
+@Controller
+@Api(tags = "SmsHomeAdvertiseController", description = "首页轮播广告管理")
+@RequestMapping("/home/advertise")
+public class SmsHomeAdvertiseController {
+    @Autowired
+    private SmsHomeAdvertiseService advertiseService;
+
+    @ApiOperation("添加广告")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody SmsHomeAdvertise advertise) {
+        int count = advertiseService.create(advertise);
+        if (count > 0)
+            return CommonResult.success(count);
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("删除广告")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = advertiseService.delete(ids);
+        if (count > 0)
+            return CommonResult.success(count);
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改上下线状态")
+    @RequestMapping(value = "/update/status/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateStatus(@PathVariable Long id, Integer status) {
+        int count = advertiseService.updateStatus(id, status);
+        if (count > 0)
+            return CommonResult.success(count);
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取广告详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<SmsHomeAdvertise> getItem(@PathVariable Long id) {
+        SmsHomeAdvertise advertise = advertiseService.getItem(id);
+        return CommonResult.success(advertise);
+    }
+
+    @ApiOperation("修改广告")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody SmsHomeAdvertise advertise) {
+        int count = advertiseService.update(id, advertise);
+        if (count > 0)
+            return CommonResult.success(count);
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("分页查询广告")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<SmsHomeAdvertise>> list(@RequestParam(value = "name", required = false) String name,
+                                                           @RequestParam(value = "type", required = false) Integer type,
+                                                           @RequestParam(value = "endTime", required = false) String endTime,
+                                                           @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                           @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsHomeAdvertise> advertiseList = advertiseService.list(name, type, endTime, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(advertiseList));
+    }
+}

+ 80 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeBrandController.java

@@ -0,0 +1,80 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.SmsHomeBrand;
+import com.yonge.cooleshow.admin.service.SmsHomeBrandService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 首页品牌管理Controller
+ * Created by macro on 2018/11/6.
+ */
+@Controller
+@Api(tags = "SmsHomeBrandController", description = "首页品牌管理")
+@RequestMapping("/home/brand")
+public class SmsHomeBrandController {
+    @Autowired
+    private SmsHomeBrandService homeBrandService;
+
+    @ApiOperation("添加首页推荐品牌")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody List<SmsHomeBrand> homeBrandList) {
+        int count = homeBrandService.create(homeBrandList);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改推荐品牌排序")
+    @RequestMapping(value = "/update/sort/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateSort(@PathVariable Long id, Integer sort) {
+        int count = homeBrandService.updateSort(id, sort);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量删除推荐品牌")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = homeBrandService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量修改推荐品牌状态")
+    @RequestMapping(value = "/update/recommendStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateRecommendStatus(@RequestParam("ids") List<Long> ids, @RequestParam Integer recommendStatus) {
+        int count = homeBrandService.updateRecommendStatus(ids, recommendStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("分页查询推荐品牌")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<SmsHomeBrand>> list(@RequestParam(value = "brandName", required = false) String brandName,
+                                                       @RequestParam(value = "recommendStatus", required = false) Integer recommendStatus,
+                                                       @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                       @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsHomeBrand> homeBrandList = homeBrandService.list(brandName, recommendStatus, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(homeBrandList));
+    }
+}

+ 80 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeNewProductController.java

@@ -0,0 +1,80 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.SmsHomeNewProduct;
+import com.yonge.cooleshow.admin.service.SmsHomeNewProductService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 首页新品管理Controller
+ * Created by macro on 2018/11/6.
+ */
+@Controller
+@Api(tags = "SmsHomeNewProductController", description = "首页新品管理")
+@RequestMapping("/home/newProduct")
+public class SmsHomeNewProductController {
+    @Autowired
+    private SmsHomeNewProductService homeNewProductService;
+
+    @ApiOperation("添加首页新品")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody List<SmsHomeNewProduct> homeNewProductList) {
+        int count = homeNewProductService.create(homeNewProductList);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改首页新品排序")
+    @RequestMapping(value = "/update/sort/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateSort(@PathVariable Long id, Integer sort) {
+        int count = homeNewProductService.updateSort(id, sort);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量删除首页新品")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = homeNewProductService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量修改首页新品状态")
+    @RequestMapping(value = "/update/recommendStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateRecommendStatus(@RequestParam("ids") List<Long> ids, @RequestParam Integer recommendStatus) {
+        int count = homeNewProductService.updateRecommendStatus(ids, recommendStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("分页查询首页新品")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<SmsHomeNewProduct>> list(@RequestParam(value = "productName", required = false) String productName,
+                                                            @RequestParam(value = "recommendStatus", required = false) Integer recommendStatus,
+                                                            @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                            @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsHomeNewProduct> homeNewProductList = homeNewProductService.list(productName, recommendStatus, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(homeNewProductList));
+    }
+}

+ 80 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeRecommendProductController.java

@@ -0,0 +1,80 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.SmsHomeRecommendProduct;
+import com.yonge.cooleshow.admin.service.SmsHomeRecommendProductService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 首页人气推荐管理Controller
+ * Created by macro on 2018/11/6.
+ */
+@Controller
+@Api(tags = "SmsHomeRecommendProductController", description = "首页人气推荐管理")
+@RequestMapping("/home/recommendProduct")
+public class SmsHomeRecommendProductController {
+    @Autowired
+    private SmsHomeRecommendProductService recommendProductService;
+
+    @ApiOperation("添加首页推荐")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody List<SmsHomeRecommendProduct> homeRecommendProductList) {
+        int count = recommendProductService.create(homeRecommendProductList);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改推荐排序")
+    @RequestMapping(value = "/update/sort/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateSort(@PathVariable Long id, Integer sort) {
+        int count = recommendProductService.updateSort(id, sort);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量删除推荐")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = recommendProductService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量修改推荐状态")
+    @RequestMapping(value = "/update/recommendStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateRecommendStatus(@RequestParam("ids") List<Long> ids, @RequestParam Integer recommendStatus) {
+        int count = recommendProductService.updateRecommendStatus(ids, recommendStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("分页查询推荐")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<SmsHomeRecommendProduct>> list(@RequestParam(value = "productName", required = false) String productName,
+                                                                  @RequestParam(value = "recommendStatus", required = false) Integer recommendStatus,
+                                                                  @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                                  @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsHomeRecommendProduct> homeRecommendProductList = recommendProductService.list(productName, recommendStatus, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(homeRecommendProductList));
+    }
+}

+ 80 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsHomeRecommendSubjectController.java

@@ -0,0 +1,80 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.SmsHomeRecommendSubject;
+import com.yonge.cooleshow.admin.service.SmsHomeRecommendSubjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 首页专题推荐管理Controller
+ * Created by macro on 2018/11/6.
+ */
+@Controller
+@Api(tags = "SmsHomeRecommendSubjectController", description = "首页专题推荐管理")
+@RequestMapping("/home/recommendSubject")
+public class SmsHomeRecommendSubjectController {
+    @Autowired
+    private SmsHomeRecommendSubjectService recommendSubjectService;
+
+    @ApiOperation("添加首页推荐专题")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody List<SmsHomeRecommendSubject> homeRecommendSubjectList) {
+        int count = recommendSubjectService.create(homeRecommendSubjectList);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改推荐排序")
+    @RequestMapping(value = "/update/sort/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateSort(@PathVariable Long id, Integer sort) {
+        int count = recommendSubjectService.updateSort(id, sort);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量删除推荐")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        int count = recommendSubjectService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量修改推荐状态")
+    @RequestMapping(value = "/update/recommendStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateRecommendStatus(@RequestParam("ids") List<Long> ids, @RequestParam Integer recommendStatus) {
+        int count = recommendSubjectService.updateRecommendStatus(ids, recommendStatus);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("分页查询推荐")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<SmsHomeRecommendSubject>> list(@RequestParam(value = "subjectName", required = false) String subjectName,
+                                                                  @RequestParam(value = "recommendStatus", required = false) Integer recommendStatus,
+                                                                  @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                                  @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<SmsHomeRecommendSubject> homeRecommendSubjectList = recommendSubjectService.list(subjectName, recommendStatus, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(homeRecommendSubjectList));
+    }
+}

+ 187 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsAdminController.java

@@ -0,0 +1,187 @@
+package com.yonge.cooleshow.admin.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.yonge.cooleshow.admin.dto.UmsAdminLoginParam;
+import com.yonge.cooleshow.admin.service.UmsAdminService;
+import com.yonge.cooleshow.admin.service.UmsRoleService;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mall.common.api.ResultCode;
+import com.yonge.cooleshow.mbg.model.UmsAdmin;
+import com.yonge.cooleshow.mbg.model.UmsRole;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 后台用户管理Controller
+ * Created by macro on 2018/4/26.
+ */
+@Controller
+@Api(tags = "UmsAdminController", description = "后台用户管理")
+@RequestMapping("/admin")
+public class UmsAdminController {
+    @Autowired
+    private UmsAdminService adminService;
+    @Autowired
+    private UmsRoleService roleService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+
+    @ApiOperation(value = "登录以后返回token")
+    @RequestMapping(value = "/login", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult login(@Validated @RequestBody UmsAdminLoginParam umsAdminLoginParam) {
+
+        Map<String, String> tokenMap = new HashMap<>();
+        tokenMap.put("token", "token");
+        tokenMap.put("tokenHead", "tokenHead");
+        return CommonResult.success(tokenMap);
+    }
+
+
+    @ApiOperation(value = "刷新token")
+    @RequestMapping(value = "/refreshToken", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult refreshToken(String refreshToken, String clientId, String clientSecret) {
+
+        HttpResponseResult httpResponseResult = sysUserFeignService.refreshToken(refreshToken, clientId, clientSecret);
+        if (httpResponseResult.getStatus()) {
+            return CommonResult.success(httpResponseResult.getData());
+        } else {
+            return CommonResult.failed(httpResponseResult.getMsg());
+        }
+    }
+
+    @ApiOperation(value = "获取当前登录用户信息")
+    @RequestMapping(value = "/info", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult getAdminInfo() {
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return CommonResult.failed(ResultCode.FORBIDDEN, "请登录");
+        }
+
+        adminService.saveAdmin();
+
+        UmsAdmin umsAdmin = adminService.getAdminById(sysUser.getId());
+        if (umsAdmin == null) {
+            return CommonResult.failed("用户同步失败");
+        }
+        if (umsAdmin.getStatus() == 0) {
+            return CommonResult.failed("用户被禁用");
+        }
+        Map<String, Object> data = new HashMap<>();
+        data.put("username", umsAdmin.getUsername());
+        data.put("menus", roleService.getMenuList(umsAdmin.getId()));
+        data.put("icon", umsAdmin.getIcon());
+        List<UmsRole> roleList = adminService.getRoleList(umsAdmin.getId());
+        if(CollUtil.isNotEmpty(roleList)){
+            List<String> roles = roleList.stream().map(UmsRole::getName).collect(Collectors.toList());
+            data.put("roles",roles);
+        }
+        return CommonResult.success(data);
+    }
+
+    @ApiOperation(value = "登出功能")
+    @RequestMapping(value = "/logout", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult logout(HttpServletRequest request) {
+        // HttpResponseResult<String> logout = sysUserFeignService.remoteExit();
+
+        HttpResponseResult<String> logout = sysUserFeignService.logout();
+        if (logout.getStatus()) {
+            return CommonResult.success(logout.getData());
+        } else {
+            return CommonResult.failed(logout.getMsg());
+        }
+    }
+
+    @ApiOperation("根据用户名或姓名分页获取用户列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<UmsAdmin>> list(@RequestParam(value = "keyword", required = false) String keyword,
+                                                   @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                   @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<UmsAdmin> adminList = adminService.list(keyword, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(adminList));
+    }
+
+    @ApiOperation("获取指定用户信息")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<UmsAdmin> getItem(@PathVariable Long id) {
+        UmsAdmin admin = adminService.getItem(id);
+        return CommonResult.success(admin);
+    }
+
+    @ApiOperation("修改指定用户信息")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody UmsAdmin admin) {
+        int count = adminService.update(id, admin);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("删除指定用户信息")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = adminService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改帐号状态")
+    @RequestMapping(value = "/updateStatus/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateStatus(@PathVariable Long id,@RequestParam(value = "status") Integer status) {
+        UmsAdmin umsAdmin = new UmsAdmin();
+        umsAdmin.setStatus(status);
+        int count = adminService.update(id,umsAdmin);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("给用户分配角色")
+    @RequestMapping(value = "/role/update", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateRole(@RequestParam("adminId") Long adminId,
+                                   @RequestParam("roleIds") List<Long> roleIds) {
+        int count = adminService.updateRole(adminId, roleIds);
+        if (count >= 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取指定用户的角色")
+    @RequestMapping(value = "/role/{adminId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsRole>> getRoleList(@PathVariable Long adminId) {
+        List<UmsRole> roleList = adminService.getRoleList(adminId);
+        return CommonResult.success(roleList);
+    }
+
+}

+ 35 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsMemberLevelController.java

@@ -0,0 +1,35 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.UmsMemberLevel;
+import com.yonge.cooleshow.admin.service.UmsMemberLevelService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 会员等级管理Controller
+ * Created by macro on 2018/4/26.
+ */
+@Controller
+@Api(tags = "UmsMemberLevelController", description = "会员等级管理")
+@RequestMapping("/memberLevel")
+public class UmsMemberLevelController {
+    @Autowired
+    private UmsMemberLevelService memberLevelService;
+
+    @ApiOperation("查询所有会员等级")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsMemberLevel>> list(@RequestParam("defaultStatus") Integer defaultStatus) {
+        List<UmsMemberLevel> memberLevelList = memberLevelService.list(defaultStatus);
+        return CommonResult.success(memberLevelList);
+    }
+}

+ 102 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsMenuController.java

@@ -0,0 +1,102 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.admin.dto.UmsMenuNode;
+import com.yonge.cooleshow.mbg.model.UmsMenu;
+import com.yonge.cooleshow.admin.service.UmsMenuService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 后台菜单管理Controller
+ * Created by macro on 2020/2/4.
+ */
+@Controller
+@Api(tags = "UmsMenuController", description = "后台菜单管理")
+@RequestMapping("/menu")
+public class UmsMenuController {
+
+    @Autowired
+    private UmsMenuService menuService;
+
+    @ApiOperation("添加后台菜单")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody UmsMenu umsMenu) {
+        int count = menuService.create(umsMenu);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改后台菜单")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id,
+                               @RequestBody UmsMenu umsMenu) {
+        int count = menuService.update(id, umsMenu);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("根据ID获取菜单详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<UmsMenu> getItem(@PathVariable Long id) {
+        UmsMenu umsMenu = menuService.getItem(id);
+        return CommonResult.success(umsMenu);
+    }
+
+    @ApiOperation("根据ID删除后台菜单")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = menuService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("分页查询后台菜单")
+    @RequestMapping(value = "/list/{parentId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<UmsMenu>> list(@PathVariable Long parentId,
+                                                  @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                  @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<UmsMenu> menuList = menuService.list(parentId, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(menuList));
+    }
+
+    @ApiOperation("树形结构返回所有菜单列表")
+    @RequestMapping(value = "/treeList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsMenuNode>> treeList() {
+        List<UmsMenuNode> list = menuService.treeList();
+        return CommonResult.success(list);
+    }
+
+    @ApiOperation("修改菜单显示状态")
+    @RequestMapping(value = "/updateHidden/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateHidden(@PathVariable Long id, @RequestParam("hidden") Integer hidden) {
+        int count = menuService.updateHidden(id, hidden);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+}

+ 69 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsResourceCategoryController.java

@@ -0,0 +1,69 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.UmsResourceCategory;
+import com.yonge.cooleshow.admin.service.UmsResourceCategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 后台资源分类管理Controller
+ * Created by macro on 2020/2/5.
+ */
+@Controller
+@Api(tags = "UmsResourceCategoryController", description = "后台资源分类管理")
+@RequestMapping("/resourceCategory")
+public class UmsResourceCategoryController {
+    @Autowired
+    private UmsResourceCategoryService resourceCategoryService;
+
+    @ApiOperation("查询所有后台资源分类")
+    @RequestMapping(value = "/listAll", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsResourceCategory>> listAll() {
+        List<UmsResourceCategory> resourceList = resourceCategoryService.listAll();
+        return CommonResult.success(resourceList);
+    }
+
+    @ApiOperation("添加后台资源分类")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody UmsResourceCategory umsResourceCategory) {
+        int count = resourceCategoryService.create(umsResourceCategory);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改后台资源分类")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id,
+                               @RequestBody UmsResourceCategory umsResourceCategory) {
+        int count = resourceCategoryService.update(id, umsResourceCategory);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("根据ID删除后台资源")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = resourceCategoryService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+}

+ 91 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsResourceController.java

@@ -0,0 +1,91 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.UmsResource;
+import com.yonge.cooleshow.admin.service.UmsResourceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 后台资源管理Controller
+ * Created by macro on 2020/2/4.
+ */
+@Controller
+@Api(tags = "UmsResourceController", description = "后台资源管理")
+@RequestMapping("/resource")
+public class UmsResourceController {
+
+    @Autowired
+    private UmsResourceService resourceService;
+
+    @ApiOperation("添加后台资源")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody UmsResource umsResource) {
+        int count = resourceService.create(umsResource);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改后台资源")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id,
+                               @RequestBody UmsResource umsResource) {
+        int count = resourceService.update(id, umsResource);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("根据ID获取资源详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<UmsResource> getItem(@PathVariable Long id) {
+        UmsResource umsResource = resourceService.getItem(id);
+        return CommonResult.success(umsResource);
+    }
+
+    @ApiOperation("根据ID删除后台资源")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = resourceService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("分页模糊查询后台资源")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<UmsResource>> list(@RequestParam(required = false) Long categoryId,
+                                                      @RequestParam(required = false) String nameKeyword,
+                                                      @RequestParam(required = false) String urlKeyword,
+                                                      @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                      @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<UmsResource> resourceList = resourceService.list(categoryId,nameKeyword, urlKeyword, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(resourceList));
+    }
+
+    @ApiOperation("查询所有后台资源")
+    @RequestMapping(value = "/listAll", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsResource>> listAll() {
+        List<UmsResource> resourceList = resourceService.listAll();
+        return CommonResult.success(resourceList);
+    }
+}

+ 125 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsRoleController.java

@@ -0,0 +1,125 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.*;
+import com.yonge.cooleshow.admin.service.UmsRoleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 后台用户角色管理Controller
+ * Created by macro on 2018/9/30.
+ */
+@Controller
+@Api(tags = "UmsRoleController", description = "后台用户角色管理")
+@RequestMapping("/role")
+public class UmsRoleController {
+    @Autowired
+    private UmsRoleService roleService;
+
+    @ApiOperation("添加角色")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody UmsRole role) {
+        int count = roleService.create(role);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改角色")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody UmsRole role) {
+        int count = roleService.update(id, role);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("批量删除角色")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        if (ids.stream().anyMatch(id -> id.equals(1L))) {
+            return CommonResult.failed("默认角色不能删除");
+        }
+        int count = roleService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取所有角色")
+    @RequestMapping(value = "/listAll", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsRole>> listAll() {
+        List<UmsRole> roleList = roleService.list();
+        return CommonResult.success(roleList);
+    }
+
+    @ApiOperation("根据角色名称分页获取角色列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<UmsRole>> list(@RequestParam(value = "keyword", required = false) String keyword,
+                                                  @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                  @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<UmsRole> roleList = roleService.list(keyword, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(roleList));
+    }
+
+    @ApiOperation("修改角色状态")
+    @RequestMapping(value = "/updateStatus/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateStatus(@PathVariable Long id, @RequestParam(value = "status") Integer status) {
+        UmsRole umsRole = new UmsRole();
+        umsRole.setStatus(status);
+        int count = roleService.update(id, umsRole);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取角色相关菜单")
+    @RequestMapping(value = "/listMenu/{roleId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsMenu>> listMenu(@PathVariable Long roleId) {
+        List<UmsMenu> roleList = roleService.listMenu(roleId);
+        return CommonResult.success(roleList);
+    }
+
+    @ApiOperation("获取角色相关资源")
+    @RequestMapping(value = "/listResource/{roleId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsResource>> listResource(@PathVariable Long roleId) {
+        List<UmsResource> roleList = roleService.listResource(roleId);
+        return CommonResult.success(roleList);
+    }
+
+    @ApiOperation("给角色分配菜单")
+    @RequestMapping(value = "/allocMenu", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult allocMenu(@RequestParam Long roleId, @RequestParam List<Long> menuIds) {
+        int count = roleService.allocMenu(roleId, menuIds);
+        return CommonResult.success(count);
+    }
+
+    @ApiOperation("给角色分配资源")
+    @RequestMapping(value = "/allocResource", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult allocResource(@RequestParam Long roleId, @RequestParam List<Long> resourceIds) {
+        int count = roleService.allocResource(roleId, resourceIds);
+        return CommonResult.success(count);
+    }
+
+}

+ 18 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dao/CmsPreferenceAreaProductRelationDao.java

@@ -0,0 +1,18 @@
+package com.yonge.cooleshow.admin.dao;
+
+import com.yonge.cooleshow.mbg.model.CmsPrefrenceAreaProductRelation;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 优选和商品关系自定义Dao
+ * Created by macro on 2018/4/26.
+ */
+public interface CmsPreferenceAreaProductRelationDao {
+    /**
+     * 批量创建
+     */
+    int insertList(@Param(
+            "preferenceAreaProductRelationList") List<CmsPrefrenceAreaProductRelation> preferenceAreaProductRelationList);
+}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini