diff --git a/pom.xml b/pom.xml
index 20a488232..5060140ef 100644
--- a/pom.xml
+++ b/pom.xml
@@ -175,7 +175,26 @@
jjwt
${jjwt.version}
-
+
+ com.auth0
+ java-jwt
+ 3.4.0
+
+
+ cn.hutool
+ hutool-all
+ 5.7.12
+
+
+
+ com.alibaba
+ easyexcel
+ 3.2.1
+
com.alibaba
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
index e7fe34c5d..2f945a5d8 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
@@ -1,5 +1,6 @@
package com.ruoyi.system.api;
+import com.ruoyi.system.api.model.WxLoginUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@@ -31,6 +32,9 @@ public interface RemoteUserService
@GetMapping("/user/info/{username}")
public R getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+ @PostMapping("/wxLogin/getWxUserInfo")
+ public R getWxUserInfo(@RequestBody LoginUser wxLoginBody, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
/**
* 注册用户信息
*
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
index 8fd6c6775..714aa2972 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
@@ -31,6 +31,11 @@ public class RemoteUserFallbackFactory implements FallbackFactory getWxUserInfo(LoginUser wxLoginBody,String source) {
+ return R.fail("获取用户失败:" + throwable.getMessage());
+ }
+
@Override
public R registerUserInfo(SysUser sysUser, String source)
{
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/WxLoginUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/WxLoginUser.java
new file mode 100644
index 000000000..813671dba
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/WxLoginUser.java
@@ -0,0 +1,148 @@
+package com.ruoyi.system.api.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @author 吴一博
+ * @date 2023年07月07日 17:53
+ * @Description
+ */
+public class WxLoginUser {
+ /**
+ * 用户ID
+ */
+ private Long userId;
+ /**
+ * 微信多平台用户唯一ID
+ */
+ private String unionid;
+
+ /**
+ * 微信用户唯一OPEN_ID
+ */
+ private String openId;
+
+ /**
+ * 用户名称
+ */
+ private String userName;
+ /**
+ * 用户真实姓名
+ */
+ private String realName;
+ /**
+ * 登录账号
+ */
+ private String loginName;
+
+ /**
+ * 角色ID列表
+ */
+ private List roleCodes;
+ /**
+ * token
+ */
+
+ @ApiModelProperty(value = "token")
+ private String accessToken;
+ /**
+ *刷新token
+ */
+
+ @ApiModelProperty(value = "刷新token")
+ private String refreshToken;
+ /**
+ *用户所拥有的菜单权限(给前端控制菜单和按钮的显示和隐藏)
+ */
+ /*@Setter
+ @Getter
+ @ApiModelProperty(value = "用户所拥有的菜单权限(给前端控制菜单和按钮的显示和隐藏)")
+ private List list;*/
+
+ /**
+ * wx 登录 后返回的 session_key
+ */
+ private String sessionKey;
+
+ public Long getUserId() {
+ return userId;
+ }
+
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+
+ public String getUnionid() {
+ return unionid;
+ }
+
+ public void setUnionid(String unionid) {
+ this.unionid = unionid;
+ }
+
+ public String getOpenId() {
+ return openId;
+ }
+
+ public void setOpenId(String openId) {
+ this.openId = openId;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getRealName() {
+ return realName;
+ }
+
+ public void setRealName(String realName) {
+ this.realName = realName;
+ }
+
+ public String getLoginName() {
+ return loginName;
+ }
+
+ public void setLoginName(String loginName) {
+ this.loginName = loginName;
+ }
+
+ public List getRoleCodes() {
+ return roleCodes;
+ }
+
+ public void setRoleCodes(List roleCodes) {
+ this.roleCodes = roleCodes;
+ }
+
+ public String getAccessToken() {
+ return accessToken;
+ }
+
+ public void setAccessToken(String accessToken) {
+ this.accessToken = accessToken;
+ }
+
+ public String getRefreshToken() {
+ return refreshToken;
+ }
+
+ public void setRefreshToken(String refreshToken) {
+ this.refreshToken = refreshToken;
+ }
+
+ public String getSessionKey() {
+ return sessionKey;
+ }
+
+ public void setSessionKey(String sessionKey) {
+ this.sessionKey = sessionKey;
+ }
+}
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/WxLoginController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/WxLoginController.java
new file mode 100644
index 000000000..9756ba528
--- /dev/null
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/WxLoginController.java
@@ -0,0 +1,75 @@
+package com.ruoyi.auth.controller;
+
+/**
+ * @author 吴一博
+ * @date 2023年07月07日 17:47
+ * @Description
+ */
+
+import com.ruoyi.auth.form.WxLoginBody;
+import com.ruoyi.auth.service.SysLoginService;
+import com.ruoyi.auth.service.WxLoginService;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.system.api.model.LoginUser;
+import com.ruoyi.system.api.model.WxLoginUser;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.security.InvalidParameterException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 微信小程序登录Controller
+ *
+ * @author wyb
+ * @date 2023-07-06
+ */
+@RestController
+@RequestMapping(value="/wxLogin")
+@Api(description = "微信小程序-登录接口")
+public class WxLoginController {
+
+ @Resource
+ private WxLoginService wxLoginService;
+ @Autowired
+ private TokenService tokenService;
+ @ApiOperation("wx用户登录")
+ @PostMapping("/loginInFromWx")
+ @ResponseBody
+ public R> loginInFromWx(@RequestBody LoginUser entity) {
+ LoginUser loginUser = wxLoginService.loginInFromWx(entity);
+ return R.ok(tokenService.createToken(loginUser));
+ }
+
+
+ @PostMapping("/user/register")
+ @ApiOperation(value = "wx用户注册接口")
+ public AjaxResult register(@RequestBody WxLoginBody entity) {
+ //loginFeign.register(entity);
+ return AjaxResult.success("注册成功");
+ }
+
+ @ApiOperation("用户登出")
+ @GetMapping("/loginOut")
+ @ResponseBody
+ public AjaxResult loginOut(@PathVariable("id") Long id) throws Exception {
+ return AjaxResult.success("登出成功");
+ }
+}
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/form/WxLoginBody.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/WxLoginBody.java
new file mode 100644
index 000000000..ed65dafea
--- /dev/null
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/WxLoginBody.java
@@ -0,0 +1,114 @@
+package com.ruoyi.auth.form;
+
+import io.swagger.annotations.ApiModelProperty;
+import jdk.nashorn.internal.objects.annotations.Getter;
+import jdk.nashorn.internal.objects.annotations.Setter;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * @author 吴一博
+ * @date 2023年07月07日 17:49
+ * @Description
+ */
+public class WxLoginBody {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 账号(手机号/微信code)
+ */
+
+ @ApiModelProperty(value="账号(手机号/微信code)",required=false)
+ @NotBlank(message = "登录账号不能为空")
+ private String loginName;
+ /**
+ * 登录密码
+ */
+
+ @ApiModelProperty(value = "用户密码")
+ private String password;
+ /**
+ * 用户手机号(微信登录需要传)
+ */
+
+ @ApiModelProperty(value = "用户手机号")
+ private String telephone;
+ /**
+ *头像(微信登录需要传)
+ */
+ private String avatar;
+ /**
+ *性别(微信登录需要传)
+ */
+
+ private Integer gender;
+ /**
+ *昵称(微信登录需要传)
+ */
+
+ private String nickname;
+ /**
+ * 登录类型(1:pc;2:wx)
+ */
+
+ @ApiModelProperty(value = "登录类型(1:pc;2:wx)")
+ @NotBlank(message = "登录类型不能为空")
+ private String type;
+
+ public String getLoginName() {
+ return loginName;
+ }
+
+ public void setLoginName(String loginName) {
+ this.loginName = loginName;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getTelephone() {
+ return telephone;
+ }
+
+ public void setTelephone(String telephone) {
+ this.telephone = telephone;
+ }
+
+ public String getAvatar() {
+ return avatar;
+ }
+
+ public void setAvatar(String avatar) {
+ this.avatar = avatar;
+ }
+
+ public Integer getGender() {
+ return gender;
+ }
+
+ public void setGender(Integer gender) {
+ this.gender = gender;
+ }
+
+ public String getNickname() {
+ return nickname;
+ }
+
+ public void setNickname(String nickname) {
+ this.nickname = nickname;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+}
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/WxLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/WxLoginService.java
new file mode 100644
index 000000000..ae78ef44c
--- /dev/null
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/WxLoginService.java
@@ -0,0 +1,26 @@
+package com.ruoyi.auth.service;
+
+import com.ruoyi.auth.form.WxLoginBody;
+import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.RemoteUserService;
+import com.ruoyi.system.api.model.LoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author 吴一博
+ * @date 2023年07月07日 17:52
+ * @Description
+ */
+@Component
+public class WxLoginService {
+ @Autowired
+ private RemoteUserService remoteUserService;
+ public LoginUser loginInFromWx(LoginUser entity) {
+ // 查询用户信息
+ R userResult = remoteUserService.getWxUserInfo(entity,SecurityConstants.INNER);
+ LoginUser userInfo = userResult.getData();
+ return userInfo;
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
index c7e1f34ed..d1f1c1e86 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
@@ -121,10 +121,133 @@ public class Constants
* 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
*/
public static final String[] JOB_WHITELIST_STR = { "com.ruoyi" };
-
/**
* 定时任务违规的字符
*/
public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework", "org.apache", "com.ruoyi.common.core.utils.file" };
+
+
+ /**
+ * 用户ID key
+ */
+ public static final String JWT_USER_ID="user_id";
+ /**
+ * 用户ID key
+ */
+ public static final String JWT_USER_NAME="user_name";
+ /**
+ * 用户ID key
+ */
+ public static final String JWT_LOGIN_NAME="login_name";
+
+ /**
+ * 真实姓名
+ */
+ public static final String JWT_REAL_NAME="real_name";
+
+ /**
+ * 微信多平台唯一ID key
+ */
+ public static final String JWT_UNIONID="unionid";
+ /**
+ * 登录微信后的session_key
+ */
+ public static final String JWT_SESSION_KEY = "session_key";
+
+ /**
+ * 登录微信后的open_id
+ */
+ public static final String JWT_OPEN_ID = "open_id";
+ /**
+ * 小程序ACCESS_TOKEN缓存key
+ */
+ public static final String WX_APPLETS_REDIS_ACCESS_TOKEN_KEY="wx.applets.access.token.key";
+ /**
+ * 微信小程序--服务器验证专用token
+ */
+ public static final String WX_APPLETS_TOKEN="oHDqn56DWSxUHyiOnqLAyawfUj0k";
+ /**
+ * 微信小程序--开发者账号的appid
+ */
+ public static final String WX_APPLETS_APP_ID="wxd4300820f84a6d6b";
+ /**
+ * 微信小程序--开发者账号的AppSecret
+ */
+ public static final String WX_APPLETS_APP_SERCERT="16daf686025b3d9755976d79615b254f";
+
+ /**
+ * 公众号ACCESS_TOKEN缓存key
+ */
+ public static final String WX_OFFICIAL_ACCOUNT_REDIS_ACCESS_TOKEN_KEY="wx.officialAccount.access.token.key";
+ /**
+ * 微信公众号--服务器验证专用token
+ */
+ public static final String WX_OFFICIAL_ACCOUNT_TOKEN="oHDqn56DWSxUHyiOnqLAyawfUj0k";
+ /**
+ * 微信公众号--开发者账号的appid
+ */
+ public static final String WX_OFFICIAL_ACCOUNT_APPID ="wx42f8776ad330e623";
+ /**
+ * 微信公众号--开发者账号的AppSecret
+ */
+ public static final String WX_OFFICIAL_ACCOUNT_APPSECRET="6dd7ea55e17ec30df20164f1de1e9e5f";
+
+ /**
+ * 赛会: 赛会创建-防重提交缓存key
+ */
+ public static final String COMPETITION_CREATE_KEY = "competition:create:code:";
+ /**
+ * 赛会: 赛会创建时保存的短信验证码缓存key
+ */
+ public static final String ESTABLISH_COMPETITION_SMS_CAPTCHA = "competition:verifyCode:";
+
+ /**
+ * 赛会: 球队申请加入赛会-短信验证码缓存key
+ */
+ public static final String COMPETITION_TEAM_CAPTCHA = "competition:team:verifyCode:";
+ /**
+ * 赛会:球队-球员申请加入球队-短信验证码缓存key
+ */
+ public static final String COMPETITION_TEAM_MEMBER_CAPTCHA = "competition:team:member:verifyCode:";
+ /**
+ * 球队加入验证码过期时间-有效期 (秒)
+ */
+ public static final Long COMPETITION_TEAM_MEMBER_CAPTCHA_EXPIRES = 300L;
+ /**
+ * 泡泡短信平台-url前缀
+ */
+ public static final String SMS_PAOPAO_URL = "http://47.94.229.220:7862/sms";
+ /**
+ * 泡泡短信平台-account
+ */
+ public static final String SMS_PAOPAO_ACCOUNT = "911136";
+ /**
+ * 泡泡短信平台-密码 password
+ */
+ public static final String SMS_PAOPAO_PASSWORD = "MMfZ3p";
+ /**
+ * 泡泡短信平台-接入号 extno
+ */
+ public static final String SMS_PAOPAO_EXTNO = "106901911136";
+ /**
+ * 泡泡短信平台-有效期 (秒)
+ */
+ public static final Long SMS_PAOPAO_EXPIRES = 900L;
+ /**
+ * 短信签名
+ */
+ public static final String SMS_PAOPAO_SIGN="【篮球Zone】";
+ /**
+ * 存放赛程循环赛的锁的key
+ */
+ public static final String ARRANGE_TEAM_GROUP_SCHEDULE="arrange:team:group:schedule:";
+ /**
+ * Redis 存放乐橙云 管理员token
+ */
+ public static final String LECHANGE_ACCESSTOKEN = "lechange:accesstoken";
+ /**
+ * Redis 存放乐橙云 轻应用播放token
+ */
+ public static final String LECHANGE_LIVE_KITTOKEN = "lechange:live:kittoken";
}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java
index 780f65e93..dee842d2d 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java
@@ -11,6 +11,8 @@ import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.annotation.InnerAuth;
+import static com.ruoyi.common.core.constant.SecurityConstants.FROM_SOURCE;
+
/**
* 内部服务调用验证处理
*
@@ -23,7 +25,7 @@ public class InnerAuthAspect implements Ordered
@Around("@annotation(innerAuth)")
public Object innerAround(ProceedingJoinPoint point, InnerAuth innerAuth) throws Throwable
{
- String source = ServletUtils.getRequest().getHeader(SecurityConstants.FROM_SOURCE);
+ String source = ServletUtils.getRequest().getHeader(FROM_SOURCE);
// 内部请求验证
if (!StringUtils.equals(SecurityConstants.INNER, source))
{
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index b3093c9cd..544028268 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -4,6 +4,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
+
+import com.ruoyi.system.api.model.WxLoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.common.core.constant.CacheConstants;
@@ -44,8 +46,8 @@ public class TokenService
public Map createToken(LoginUser loginUser)
{
String token = IdUtils.fastUUID();
- Long userId = loginUser.getSysUser().getUserId();
- String userName = loginUser.getSysUser().getUserName();
+ Long userId = loginUser.getUserid();
+ String userName = loginUser.getUsername();
loginUser.setToken(token);
loginUser.setUserid(userId);
loginUser.setUsername(userName);
@@ -62,9 +64,9 @@ public class TokenService
Map rspMap = new HashMap();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("expires_in", expireTime);
+ rspMap.put("user",loginUser);
return rspMap;
}
-
/**
* 获取用户身份信息
*
diff --git a/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/apiConstants/ApiTerminal.java b/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/apiConstants/ApiTerminal.java
new file mode 100644
index 000000000..1ccf7fedc
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/apiConstants/ApiTerminal.java
@@ -0,0 +1,10 @@
+package com.ruoyi.common.swagger.apiConstants;
+/**
+ * @description API 接口使用终端
+ * @author 吴一博
+ * @date 2023/7/4 10:18
+ */
+public class ApiTerminal {
+ public static final String wxMiniProgram="微信小程序-";
+ public static final String pc="PC端-";
+}
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index b29962c70..377683b97 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/ruoyi-modules/ruoyi-system/pom.xml
@@ -71,7 +71,18 @@
com.ruoyi
ruoyi-common-log
-
+
+ com.auth0
+ java-jwt
+
+
+ cn.hutool
+ hutool-all
+
+
+ com.alibaba
+ easyexcel
+
com.ruoyi
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingInfoDetailController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingInfoDetailController.java
new file mode 100644
index 000000000..02e1e340e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingInfoDetailController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.system.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.system.domain.BuildingInfoDetail;
+import com.ruoyi.system.service.IBuildingInfoDetailService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author ruoyi
+ * @date 2023-07-06
+ */
+@RestController
+@RequestMapping("/buildingInfoDetail")
+public class BuildingInfoDetailController extends BaseController
+{
+ @Autowired
+ private IBuildingInfoDetailService buildingInfoDetailService;
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @RequiresPermissions("system:detail:list")
+ @GetMapping("/list")
+ public TableDataInfo list(BuildingInfoDetail buildingInfoDetail)
+ {
+ startPage();
+ List list = buildingInfoDetailService.selectBuildingInfoDetailList(buildingInfoDetail);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出【请填写功能名称】列表
+ */
+ @RequiresPermissions("system:detail:export")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BuildingInfoDetail buildingInfoDetail)
+ {
+ List list = buildingInfoDetailService.selectBuildingInfoDetailList(buildingInfoDetail);
+ ExcelUtil util = new ExcelUtil(BuildingInfoDetail.class);
+ util.exportExcel(response, list, "【请填写功能名称】数据");
+ }
+
+ /**
+ * 获取【请填写功能名称】详细信息
+ */
+ @RequiresPermissions("system:detail:query")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return AjaxResult.success(buildingInfoDetailService.selectBuildingInfoDetailById(id));
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @RequiresPermissions("system:detail:add")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody BuildingInfoDetail buildingInfoDetail)
+ {
+ return toAjax(buildingInfoDetailService.insertBuildingInfoDetail(buildingInfoDetail));
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @RequiresPermissions("system:detail:edit")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BuildingInfoDetail buildingInfoDetail)
+ {
+ return toAjax(buildingInfoDetailService.updateBuildingInfoDetail(buildingInfoDetail));
+ }
+
+ /**
+ * 删除【请填写功能名称】
+ */
+ @RequiresPermissions("system:detail:remove")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(buildingInfoDetailService.deleteBuildingInfoDetailByIds(ids));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingLabelController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingLabelController.java
new file mode 100644
index 000000000..8e3eaef1c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingLabelController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.system.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.system.domain.BuildingLabel;
+import com.ruoyi.system.service.IBuildingLabelService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author ruoyi
+ * @date 2023-07-04
+ */
+@RestController
+@RequestMapping("/label")
+public class BuildingLabelController extends BaseController
+{
+ @Autowired
+ private IBuildingLabelService buildingLabelService;
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @RequiresPermissions("system:label:list")
+ @GetMapping("/list")
+ public TableDataInfo list(BuildingLabel buildingLabel)
+ {
+ startPage();
+ List list = buildingLabelService.selectBuildingLabelList(buildingLabel);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出【请填写功能名称】列表
+ */
+ @RequiresPermissions("system:label:export")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BuildingLabel buildingLabel)
+ {
+ List list = buildingLabelService.selectBuildingLabelList(buildingLabel);
+ ExcelUtil util = new ExcelUtil(BuildingLabel.class);
+ util.exportExcel(response, list, "【请填写功能名称】数据");
+ }
+
+ /**
+ * 获取【请填写功能名称】详细信息
+ */
+ @RequiresPermissions("system:label:query")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return AjaxResult.success(buildingLabelService.selectBuildingLabelById(id));
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @RequiresPermissions("system:label:add")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody BuildingLabel buildingLabel)
+ {
+ return toAjax(buildingLabelService.insertBuildingLabel(buildingLabel));
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @RequiresPermissions("system:label:edit")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BuildingLabel buildingLabel)
+ {
+ return toAjax(buildingLabelService.updateBuildingLabel(buildingLabel));
+ }
+
+ /**
+ * 删除【请填写功能名称】
+ */
+ @RequiresPermissions("system:label:remove")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(buildingLabelService.deleteBuildingLabelByIds(ids));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingTeamRelController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingTeamRelController.java
new file mode 100644
index 000000000..56e4d9159
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/BuildingTeamRelController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.system.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.system.domain.BuildingTeamRel;
+import com.ruoyi.system.service.IBuildingTeamRelService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author ruoyi
+ * @date 2023-07-04
+ */
+@RestController
+@RequestMapping("/buildingTeamRel")
+public class BuildingTeamRelController extends BaseController
+{
+ @Autowired
+ private IBuildingTeamRelService buildingTeamRelService;
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @RequiresPermissions("system:rel:list")
+ @GetMapping("/list")
+ public TableDataInfo list(BuildingTeamRel buildingTeamRel)
+ {
+ startPage();
+ List list = buildingTeamRelService.selectBuildingTeamRelList(buildingTeamRel);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出【请填写功能名称】列表
+ */
+ @RequiresPermissions("system:rel:export")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BuildingTeamRel buildingTeamRel)
+ {
+ List list = buildingTeamRelService.selectBuildingTeamRelList(buildingTeamRel);
+ ExcelUtil util = new ExcelUtil(BuildingTeamRel.class);
+ util.exportExcel(response, list, "【请填写功能名称】数据");
+ }
+
+ /**
+ * 获取【请填写功能名称】详细信息
+ */
+ @RequiresPermissions("system:rel:query")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return AjaxResult.success(buildingTeamRelService.selectBuildingTeamRelById(id));
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @RequiresPermissions("system:rel:add")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody BuildingTeamRel buildingTeamRel)
+ {
+ return toAjax(buildingTeamRelService.insertBuildingTeamRel(buildingTeamRel));
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @RequiresPermissions("system:rel:edit")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BuildingTeamRel buildingTeamRel)
+ {
+ return toAjax(buildingTeamRelService.updateBuildingTeamRel(buildingTeamRel));
+ }
+
+ /**
+ * 删除【请填写功能名称】
+ */
+ @RequiresPermissions("system:rel:remove")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(buildingTeamRelService.deleteBuildingTeamRelByIds(ids));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CameraInfoController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CameraInfoController.java
new file mode 100644
index 000000000..f593cb9ec
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CameraInfoController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.system.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.system.domain.CameraInfo;
+import com.ruoyi.system.service.ICameraInfoService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author ruoyi
+ * @date 2023-07-04
+ */
+@RestController
+@RequestMapping("/cameraInfo")
+public class CameraInfoController extends BaseController
+{
+ @Autowired
+ private ICameraInfoService cameraInfoService;
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @RequiresPermissions("system:info:list")
+ @GetMapping("/list")
+ public TableDataInfo list(CameraInfo cameraInfo)
+ {
+ startPage();
+ List list = cameraInfoService.selectCameraInfoList(cameraInfo);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出【请填写功能名称】列表
+ */
+ @RequiresPermissions("system:info:export")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, CameraInfo cameraInfo)
+ {
+ List list = cameraInfoService.selectCameraInfoList(cameraInfo);
+ ExcelUtil util = new ExcelUtil(CameraInfo.class);
+ util.exportExcel(response, list, "【请填写功能名称】数据");
+ }
+
+ /**
+ * 获取【请填写功能名称】详细信息
+ */
+ @RequiresPermissions("system:info:query")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return AjaxResult.success(cameraInfoService.selectCameraInfoById(id));
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @RequiresPermissions("system:info:add")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody CameraInfo cameraInfo)
+ {
+ return toAjax(cameraInfoService.insertCameraInfo(cameraInfo));
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @RequiresPermissions("system:info:edit")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody CameraInfo cameraInfo)
+ {
+ return toAjax(cameraInfoService.updateCameraInfo(cameraInfo));
+ }
+
+ /**
+ * 删除【请填写功能名称】
+ */
+ @RequiresPermissions("system:info:remove")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(cameraInfoService.deleteCameraInfoByIds(ids));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionController.java
index b5fa43730..77949d011 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionController.java
@@ -1,28 +1,58 @@
package com.ruoyi.system.controller;
-import java.util.List;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.security.InvalidParameterException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
import java.io.IOException;
+import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletResponse;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.system.UserInfo;
+import com.alibaba.csp.sentinel.util.IdUtil;
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.core.constant.Constants;
+import com.ruoyi.common.core.exception.CheckedException;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.common.swagger.apiConstants.ApiTerminal;
import com.ruoyi.system.api.domain.vo.WxAppletsCodeVo;
+import com.ruoyi.system.api.model.LoginUser;
+import com.ruoyi.system.api.model.WxLoginUser;
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.domain.vo.*;
+import com.ruoyi.system.service.*;
+import com.ruoyi.system.utils.LoginUserUtil;
+import com.ruoyi.system.utils.UtilTool;
+import io.seata.core.model.Result;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ooxml.POIXMLDocumentPart;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.*;
+import org.aspectj.weaver.loadtime.Aj;
+import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
-import com.ruoyi.system.domain.Competition;
-import com.ruoyi.system.service.ICompetitionService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
/**
* 比赛信息Controller
@@ -36,6 +66,24 @@ public class CompetitionController extends BaseController
{
@Autowired
private ICompetitionService competitionService;
+ @Autowired
+ private ICompetitionOfTeamService competitionOfTeamService;
+ @Autowired
+ private ICompetitionMembersService competitionMembersService;
+ @Autowired
+ private IWxUserService wxUserService;
+
+ @Autowired
+ private RedisService redisService;
+ @Autowired
+ private SmsService smsService;
+
+ @Value("${image.location.linux}")
+ private String linuxLocation;
+ @Value("${image.location.windows}")
+ private String winLocation;
+ @Value("${image.domainName}")
+ private String domainName;
/**
* 查询比赛信息列表
@@ -66,19 +114,50 @@ public class CompetitionController extends BaseController
* 获取比赛信息详细信息
*/
@RequiresPermissions("system:competition:query")
- @GetMapping(value = "/{id}")
+ @GetMapping(value = "/getInfo/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(competitionService.selectCompetitionById(id));
}
-
+ @ApiOperation(ApiTerminal.wxMiniProgram+"根据ID查询比赛详情")
+ @GetMapping("/detail/{id}")
+ @ResponseBody
+ public AjaxResult detail(@PathVariable("id") Long id){
+ CompetitionResponse competition = competitionService.getCompetitionById(id);
+ return AjaxResult.success(competition);
+ }
+ @PostMapping("/getMyJoinCompetition")
+ @ResponseBody
+ @ApiOperation(value = ApiTerminal.wxMiniProgram+"分页获取我参与过的比赛列表")
+ public TableDataInfo getMyJoinCompetition(@RequestBody CompetitionVo entity) {
+ startPage();
+ //关键字word包含:球队名称、地点名称、球馆名称,支持模糊搜索;
+ entity.setIsDeleted(0);
+ List list = competitionService.getMyJoinCompetition(entity);
+ return getDataTable(list);
+ }
+ @ApiOperation(ApiTerminal.wxMiniProgram+"创建约战")
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult add(@RequestBody Competition entity) {
+ return AjaxResult.success(competitionService.add(entity));
+ }
+ @ApiOperation(ApiTerminal.wxMiniProgram+"获取自动生成的赛会唯一编码")
+ @GetMapping("/genCompetitionCode")
+ @ResponseBody
+ public AjaxResult genCompetitionCode() {
+ DateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+ System.out.println(sdf.format(new Date()) + RandomStringUtils.randomNumeric(6));
+ String code = "B" + sdf.format(new Date()) + RandomStringUtils.randomNumeric(6);
+ return AjaxResult.success(code);
+ }
/**
* 新增比赛信息
*/
@RequiresPermissions("system:competition:add")
@Log(title = "比赛信息", businessType = BusinessType.INSERT)
@PostMapping
- public AjaxResult add(@RequestBody Competition competition)
+ public AjaxResult addCompetition(@RequestBody Competition competition)
{
return toAjax(competitionService.insertCompetition(competition));
}
@@ -97,7 +176,7 @@ public class CompetitionController extends BaseController
@RequiresPermissions("system:competition:edit")
@Log(title = "比赛信息", businessType = BusinessType.UPDATE)
@PutMapping
- public AjaxResult edit(@RequestBody Competition competition)
+ public AjaxResult editCompetition(@RequestBody Competition competition)
{
return toAjax(competitionService.updateCompetition(competition));
}
@@ -112,4 +191,453 @@ public class CompetitionController extends BaseController
{
return toAjax(competitionService.deleteCompetitionByIds(ids));
}
+
+ @ApiOperation(ApiTerminal.wxMiniProgram+"应战确认")
+ @PostMapping("/challengeConfirm")
+ @ResponseBody
+ public AjaxResult challengeConfirm(@RequestBody Competition entity) throws Exception {
+ if (UtilTool.isNull(entity)) {
+ throw new InvalidParameterException("参数异常,非法操作!");
+ } else if (entity.getId() == null) {
+ throw new InvalidParameterException("约战id不能为空");
+ } else if (entity.getGuestTeamId() == null) {
+ throw new InvalidParameterException("应战teamId不能为空");
+ }
+ return AjaxResult.success(competitionService.challengeConfirm(entity));
+ }
+ @ApiOperation(ApiTerminal.wxMiniProgram+"创建赛会")
+ @PostMapping("/establishCompetition")
+ @ResponseBody
+ public AjaxResult establishCompetition(@RequestBody CompetitionVo entity){
+ //校验数据字段
+ if (StringUtils.isEmpty(entity)) {
+ throw new InvalidParameterException("参数异常,非法操作!");
+ }
+ if (StringUtils.isEmpty(entity.getCompetitionName())) {
+ throw new InvalidParameterException("赛会名称【competitionName】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getCityCode())) {
+ throw new InvalidParameterException("举办城市【cityCode】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getCompetitionType())) {
+ throw new InvalidParameterException("赛制【competitionType】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getEnrollBeginTime())) {
+ throw new InvalidParameterException("报名开始时间【EnrollBeginTime】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getEnrollEndTime())) {
+ throw new InvalidParameterException("报名结束时间【EnrollEndTime】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getCompetitionBeginTime())) {
+ throw new InvalidParameterException("比赛开始时间【CompetitionBeginTime】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getCompetitionEndTime())) {
+ throw new InvalidParameterException("比赛结束时间【CompetitionEndTime】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getContacts())) {
+ throw new InvalidParameterException("赛会联系人【Contacts】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getContactsAreaCode())) {
+ throw new InvalidParameterException("赛会联系人电话区号【ContactsAreaCode】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getContactsTel())) {
+ throw new InvalidParameterException("赛会联系人电话【ContactsTel】不能为空!");
+ } else if (StringUtils.isEmpty(entity.getCaptcha())) {
+ throw new InvalidParameterException("短信验证码【Captcha】不能为空!");
+ }
+ //获取短信验证码校验短信验证码是否有效
+ Object captcha = redisService.getCacheObject(Constants.ESTABLISH_COMPETITION_SMS_CAPTCHA + entity.getContactsTel());
+ if (!entity.getCaptcha().equals(String.valueOf(captcha))) {
+ throw new ServiceException("短信验证码【"+entity.getCaptcha()+"】已过期或有误!请重新获取!");
+ }
+ return AjaxResult.success(competitionService.establishCompetition(entity));
+ }
+
+ @PostMapping("/getCompetitionByCondition")
+ @ApiOperation(ApiTerminal.wxMiniProgram+"获取赛会数据")
+ @ResponseBody
+ public TableDataInfo getCompetitionByCondition(@RequestBody CompetitionVo competition){
+ startPage();
+ competition.setIsDeleted(0);
+ List list = competitionService.getCompetitionByCondition(competition);
+ return getDataTable(list);
+ }
+ @PostMapping("/getAllCompetition")
+ @ResponseBody
+ @ApiOperation(value = ApiTerminal.wxMiniProgram+"分页获取所有比赛列表")
+ public TableDataInfo getAllCompetition(@RequestBody CompetitionVo entity) {
+ entity.setIsDeleted(0);
+ List list = competitionService.getCompetitionByCondition(entity);
+ return getDataTable(list);
+ }
+ @ApiOperation(ApiTerminal.wxMiniProgram+"编辑")
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult edit(@RequestBody Competition entity) throws Exception {
+ if (StringUtils.isEmpty(entity)) {
+ throw new ServiceException("参数异常,非法操作!");
+ }
+ if (StringUtils.isEmpty(entity.getId())) {
+ throw new ServiceException("id为空!");
+ }
+ competitionService.edit(entity);
+ return AjaxResult.success();
+ }
+
+ @PostMapping("/sendSms")
+ @ApiOperation(ApiTerminal.wxMiniProgram+"创建赛会-发送手机验证码")
+ @ResponseBody
+ public AjaxResult sendSms(@RequestBody Sms sms) throws Exception {
+ if (StringUtils.isEmpty(sms)) {
+ throw new InvalidParameterException("sms is empty!");
+ } else if (StringUtils.isEmpty(sms.getMb())) {
+ throw new InvalidParameterException("手机号码不能为空!");
+ }
+ //生成6位随机数
+ int randomNums = (int) ((Math.random() * 9 + 1) * 100000);
+ if (StringUtils.isEmpty(sms.getMs())) {
+ StringBuffer msg = new StringBuffer(Constants.SMS_PAOPAO_SIGN);
+ msg.append("你的验证码为");
+ msg.append(randomNums);
+ msg.append(",有效时间");
+ msg.append(Constants.SMS_PAOPAO_EXPIRES / 60);
+ msg.append("分钟,请勿泄露给他人");
+ sms.setMs(msg.toString());
+ } else {
+ sms.setMs(sms.getMs().replace("{}", String.valueOf(randomNums)));
+ }
+ SmsResponse smsResponse = smsService.sendSms(sms);
+ if (smsResponse.getStatus() == 0) {
+ //保存到缓存
+ redisService.setCacheObject(Constants.ESTABLISH_COMPETITION_SMS_CAPTCHA + sms.getMb(), randomNums, Constants.SMS_PAOPAO_EXPIRES, TimeUnit.SECONDS);
+ }
+ return AjaxResult.success(smsResponse);
+ }
+
+ @PostMapping("/teamEnrollExcleImport")
+ @ResponseBody
+ @ApiOperation(value = ApiTerminal.wxMiniProgram+"导入球队报名excel(包含图片)")
+ public AjaxResult teamEnrollExcleImport(
+ @RequestParam(value = "competitionId", required = true) Long competitionId,
+ @RequestParam("file") MultipartFile file) throws Exception {
+ CompetitionExcleVo excleVo = new CompetitionExcleVo();
+ String fileName = file.getOriginalFilename();
+
+ String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+ //System.out.println("获取到精确到日的时间格式为"+time);
+ String[] str = time.split("-");//根据‘-’进行拆分字符串 拆分出来的日期有,年,日,月,根据年日月创建文件夹
+ String datePath = "/" + str[0] + "/" + str[1] + "/" + str[2] + "/";
+ // 上传文件为空
+ if (StringUtils.isEmpty(fileName)) {
+ throw new CheckedException("没有导入文件");
+ }
+ // 上传文件名格式不正确
+ if (fileName.lastIndexOf(".") != -1 && !".xlsx".equals(fileName.substring(fileName.lastIndexOf(".")))) {
+ throw new CheckedException("文件名格式不正确, 请使用后缀名为.xlsx的文件");
+ }
+ String filePath = getFilePath(file);
+ Sheet sheet = null;
+ Workbook wb = null;
+ //读图片--开始
+ Map maplist = null;
+ BufferedInputStream inputStream = new BufferedInputStream(file.getInputStream());
+ // 判断用07还是03的方法获取图片
+ if (filePath.endsWith("xls")) {
+ wb = new HSSFWorkbook(inputStream);
+ sheet = wb.getSheetAt(0);
+ maplist = getPictures03((HSSFSheet) sheet);
+ } else if (filePath.endsWith("xlsx")) {
+ wb = new XSSFWorkbook(inputStream);
+ sheet = wb.getSheetAt(0);
+ maplist = getPictures07((XSSFSheet) sheet);
+ } else {
+ throw new CheckedException("Excel文件格式不支持");
+ }
+ //读图片--结束
+ // printImg(maplist);
+ //获得数据的总行数
+ int totalRowNum = sheet.getLastRowNum();
+ //todo 获取赛事编码
+ Row row1 = sheet.getRow(1);
+ Cell cell1 = row1.getCell(5);
+ if (cell1 == null) {
+ throw new CheckedException("赛事编码不能为空");
+ }
+ cell1.setCellType(CellType.STRING);
+ String competitionCode = cell1.getStringCellValue().toString();
+ if (StringUtils.isEmpty(competitionCode)) {
+ throw new CheckedException("赛事编码不能为空");
+ }
+ System.out.println("赛事编码" + competitionCode);
+ Row row5 = sheet.getRow(5);
+ Cell cell5_1 = row5.getCell(0);
+ if (cell5_1 == null) {
+ throw new CheckedException("球队logo不能为空");
+ }
+ cell5_1.setCellType(CellType.STRING);
+ //todo 获取赛事信息
+ Competition competition = competitionService.selectCompetitionById(competitionId);
+ //校验比赛编码是否是本
+ BeanUtil.copyProperties(competition, excleVo);
+ if (UtilTool.isNull(competition)) {
+ throw new CheckedException("赛会信息不存在;");
+ }
+ if (!competition.getCompetitionCode().equals(competitionCode)) {
+ throw new CheckedException("导入的文件中的赛事编码错误");
+ }
+ Cell cell5_2 = row5.getCell(1);
+ if (cell5_2 == null) {
+ throw new CheckedException("球队名称不能为空");
+ }
+ cell5_2.setCellType(CellType.STRING);
+ String teamName = cell5_2.getStringCellValue().trim();
+ if (StringUtils.isEmpty(teamName)) {
+ throw new CheckedException("球队名称不能为空");
+ }
+ //球队队长
+ Cell cell5_2_1 = row5.getCell(4);
+ String captain = "";
+ if (cell5_2_1 != null) {
+ captain = cell5_2_1.getStringCellValue();
+ }
+ Cell cell5_3 = row5.getCell(5);
+ if (cell5_3 == null) {
+ throw new CheckedException("球队领队不能为空");
+ }
+ cell5_3.setCellType(CellType.STRING);
+ String teamLeader = cell5_3.getStringCellValue();
+ if (StringUtils.isEmpty(teamLeader)) {
+ throw new CheckedException("球队领队不能为空");
+ }
+ Cell cell5_4 = row5.getCell(6);
+ if (cell5_4 == null) {
+ throw new CheckedException("球队领队手机号码不能为空");
+ }
+ cell5_4.setCellType(CellType.STRING);
+ String teamLeaderTel = cell5_4.getStringCellValue().toString();
+ if (StringUtils.isEmpty(teamLeaderTel)) {
+ throw new CheckedException("球队队长手机号码不能为空");
+ }
+ Cell cell5_5 = row5.getCell(7);
+ if (cell5_5 == null) {
+ throw new CheckedException("球队人数不能为空");
+ }
+ cell5_5.setCellType(CellType.STRING);
+ String teamUserNum = cell5_5.getStringCellValue();
+ if (StringUtils.isEmpty(teamUserNum)) {
+ throw new CheckedException("球队人数不能为空");
+ }
+ //todo 获取到数据后,开始保存数据
+ LoginUser user = SecurityUtils.getLoginUser();
+ CompetitionOfTeamVo team = new CompetitionOfTeamVo();
+ team.setTeamName(teamName);
+ team.setRemark("导入方式报名");
+ team.setContactsTel(teamLeaderTel);
+ team.setContacts(teamLeader);
+ team.setCaptain(captain);
+ team.setCreatedTime(new Date());
+ team.setCreatedBy(String.valueOf(user.getUserid()));
+ team.setCreatedTime(new Date());
+ team.setSerialNumber(Integer.parseInt(teamUserNum));
+ team.setCompetitionId(competition.getId());
+ //保存图片
+ PictureData pictureData = maplist.get("5_0");
+ if (pictureData == null) {
+ throw new CheckedException("球队logo不能为空");
+ }
+ byte[] data = pictureData.getData();
+ //得到保存的file
+ String osPath = linuxLocation;
+ String os = System.getProperty("os.name");
+ if (os.toLowerCase().startsWith("win")) {
+ osPath = winLocation;
+ }
+ String newFileName = UUID.randomUUID() + "_5.jpg";
+ String uploadpath = UtilTool.getFileUploadPath(osPath);
+ File file2 = UtilTool.bytesToFile(data, uploadpath, newFileName);
+ team.setTeamLogo(domainName + datePath + newFileName);
+ team.setStatus(0);
+ System.out.println(JSON.toJSONString(team));
+ //todo 保存球队数据;
+ CompetitionOfTeam competitionOfTeam = competitionOfTeamService.selectOneByTeamName(teamName);
+ if (UtilTool.isNotNull(competitionOfTeam)) {
+ team.setId(competitionOfTeam.getId());
+ competitionOfTeamService.updateCompetitionOfTeam(team);
+ }else {
+ competitionOfTeamService.insertCompetitionOfTeam(team);
+ }
+ excleVo.setOfTeam(team);
+ //todo 清空球员数据
+ competitionMembersService.deleteByMembers(competition.getId(), team.getId());
+ //要获得属性
+ List membersVos = new ArrayList<>();
+ for (int i = 8; i < totalRowNum; i++) {
+ CompetitionMembers membersVo = new CompetitionMembers();
+ membersVo.setCompetitionId(competition.getId());
+ //membersVo.setCompetitionTeamId(team.getId());
+ membersVo.setCompetitionOfTeamId(team.getId());
+ membersVo.setCompetitionNature(1);
+ membersVo.setCreatedBy(String.valueOf(user.getUserid()));
+ membersVo.setCreatedTime(new Date());
+ //获得第i行对象
+ Row row = sheet.getRow(i);
+ //真实姓名
+ Cell cell = row.getCell(1);
+ if (cell != null) {
+ cell.setCellType(CellType.STRING);
+ }
+ membersVo.setRealName(cell.getStringCellValue());
+ if (StringUtils.isEmpty(membersVo.getRealName())) {
+ break;
+ }
+ //球衣号码
+ cell = row.getCell(2);
+ if (cell != null) {
+ cell.setCellType(CellType.STRING);
+ membersVo.setJerseyNumber(cell.getStringCellValue());
+ }
+ //位置
+ cell = row.getCell(3);
+ if (cell != null) {
+ cell.setCellType(CellType.STRING);
+ membersVo.setTeamPosition(cell.getStringCellValue());
+ }
+ //身高
+ cell = row.getCell(4);
+ if (cell != null) {
+ cell.setCellType(CellType.STRING);
+ membersVo.setHeight(new BigDecimal(cell.getStringCellValue()));
+ }
+ //体重
+ cell = row.getCell(5);
+ if (cell != null) {
+ cell.setCellType(CellType.STRING);
+ membersVo.setWeight(new BigDecimal(cell.getStringCellValue()));
+ }
+ //证件号码
+ cell = row.getCell(6);
+ if (cell != null) {
+ membersVo.setIdType("身份证");
+ membersVo.setIdCardNo(cell.getStringCellValue());
+ }
+ //电话
+ cell = row.getCell(7);
+ if (cell != null) {
+ membersVo.setContactsAreaCode("86");
+ membersVo.setContactsTel(String.valueOf(((XSSFCell) cell).getRawValue()));
+ }
+ //电话
+ cell = row.getCell(8);
+ if (cell != null) {
+ membersVo.setIdCardNo(String.valueOf(((XSSFCell) cell).getRawValue()));
+ }
+ //membersVo.setAvatar(domainName+datePath+newFileName);
+ //保存图片
+ PictureData pictureData2 = maplist.get(i + "_0");
+ if (pictureData2 == null) {
+
+ }
+ byte[] data2 = pictureData2.getData();
+ String newFileName2 = UUID.randomUUID() + "_0.jpg";
+ String uploadpath2 = UtilTool.getFileUploadPath(osPath);
+ File file3 = UtilTool.bytesToFile(data2, uploadpath2, newFileName2);
+ membersVo.setPersonalPhoto(domainName + datePath + newFileName2);
+ membersVo.setCreatedTime(new Date());
+ //默认球员是已确认状态
+ membersVo.setStatus(1);
+ System.out.println(JSON.toJSONString((membersVo)));
+ membersVo.setCreatedBy(String.valueOf(user.getUserid()));
+ membersVos.add(membersVo);
+ competitionMembersService.insertCompetitionMembers(membersVo);
+ }
+
+ excleVo.setTeamMemberList(membersVos);
+ //todo 发个短信通知管理员
+ Sms sms = new Sms();
+ StringBuffer msg = new StringBuffer(Constants.SMS_PAOPAO_SIGN);
+ msg.append("赛会[");
+ msg.append(competition.getCompetitionName());
+ msg.append("]");
+ msg.append("已有球队[");
+ msg.append(teamName);
+ msg.append("]申请出战,请尽快审批处理!");
+ sms.setMs(msg.toString());
+ WxUser userInfo = wxUserService.selectWxUserById(12L);
+ sms.setMobile(userInfo.getTelephone());
+ sms.setMb(userInfo.getTelephone());
+ /* SmsResponse smsResponse = smsFeign.sendSms(sms);
+ if (smsResponse.getStatus() == 0) {
+ //保存到缓存
+ // redisUtil.set(Constant.ESTABLISH_COMPETITION_SMS_CAPTCHA+sms.getMb(), randomNums,Constant.SMS_PAOPAO_EXPIRES);
+ }*/
+ //使用完成关闭
+ wb.close();
+ if (inputStream != null) {
+ inputStream.close();
+ }
+ return AjaxResult.success(excleVo);
+ }
+
+ /**
+ * 获取03图片和位置 (xls) clerk
+ *
+ * @param sheet
+ * @return
+ * @throws IOException
+ */
+ public static Map getPictures03(HSSFSheet sheet) throws IOException {
+ Map map = new HashMap();
+ List list = sheet.getDrawingPatriarch().getChildren();
+
+ for (HSSFShape shape : list) {
+ if (shape instanceof HSSFPicture) {
+ HSSFPicture picture = (HSSFPicture) shape;
+ HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();
+ HSSFPictureData pdata = picture.getPictureData();
+ String key = cAnchor.getRow1() + "_" + cAnchor.getCol1(); // 行号-列号
+ map.put(key, pdata);
+ }
+ }
+ return map;
+ }
+
+ /**
+ * 获取Excel2007图片
+ *
+ * @param sheet 当前sheet对象
+ * @return Map key:图片单元格索引(0_1)String,value:图片流PictureData
+ */
+ public static Map getPictures07(XSSFSheet sheet) {
+ int sheetNum = 0;
+ Map sheetIndexPicMap = new HashMap();
+ for (POIXMLDocumentPart dr : sheet.getRelations()) {
+ if (dr instanceof XSSFDrawing) {
+ XSSFDrawing drawing = (XSSFDrawing) dr;
+ List shapes = drawing.getShapes();
+
+ for (XSSFShape shape : shapes) {
+ XSSFPicture pic = (XSSFPicture) shape;
+ XSSFClientAnchor anchor = pic.getPreferredSize();
+ CTMarker ctMarker = anchor.getFrom();
+
+ String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol();
+ if (sheetNum == ctMarker.getCol()) {
+ sheetIndexPicMap.put(picIndex, pic.getPictureData());
+
+ }
+
+ }
+ }
+ }
+ return sheetIndexPicMap;
+ }
+
+ private String getFilePath(MultipartFile file) {
+ String dirPath = FileUtil.getTmpDirPath();
+ try {
+ InputStream inputStream = file.getInputStream();
+ File fromStream = FileUtil.writeFromStream(inputStream, dirPath + "/" + IdUtils.simpleUUID() + file.getOriginalFilename());
+ return fromStream.getAbsolutePath();
+ } catch (IOException e) {
+ throw new CheckedException("导入文件异常");
+ }
+ }
+ @GetMapping("/getTeamEnrollExcleImpData")
+ @ApiOperation(value = ApiTerminal.wxMiniProgram+"获取通过excle导入的报名球队以及队员数据")
+ public AjaxResult getTeamEnrollExcleImpData(@RequestParam("competitionId") Long competitionId, @RequestParam("userId") Long userId) {
+ CompetitionExcleVo excleVo = competitionService.getTeamEnrollExcleImpData(competitionId, userId);
+ return AjaxResult.success(excleVo);
+ }
+
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionMembersController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionMembersController.java
index 860303818..aab172227 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionMembersController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionMembersController.java
@@ -3,15 +3,13 @@ package com.ruoyi.system.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.swagger.apiConstants.ApiTerminal;
+import com.ruoyi.system.domain.vo.CompetitionMembersVo;
+import io.seata.core.model.Result;
+import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
@@ -102,4 +100,12 @@ public class CompetitionMembersController extends BaseController
{
return toAjax(competitionMembersService.deleteCompetitionMembersByIds(ids));
}
+ @PostMapping("/getJoinCompetitionMembersPage")
+ @ResponseBody
+ @ApiOperation(value = ApiTerminal.wxMiniProgram+"分页获取参与比赛的人员列表")
+ public TableDataInfo getJoinCompetitionMembersPage(@RequestBody CompetitionMembersVo entity){
+ startPage();
+ List list = competitionMembersService.getJoinCompetitionMembersPage(entity);
+ return getDataTable(list);
+ }
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionOfTeamController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionOfTeamController.java
index 7188d7594..8ec9a3b41 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionOfTeamController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CompetitionOfTeamController.java
@@ -1,20 +1,37 @@
package com.ruoyi.system.controller;
-import java.util.List;
+import java.net.URLEncoder;
+import java.security.InvalidParameterException;
+import java.util.*;
import java.io.IOException;
+import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.util.MapUtils;
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.core.constant.Constants;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.common.swagger.apiConstants.ApiTerminal;
+import com.ruoyi.system.domain.Competition;
+import com.ruoyi.system.domain.CompetitionTeamGroup;
+import com.ruoyi.system.domain.Sms;
+import com.ruoyi.system.domain.vo.CompetitionOfTeamGroupVo;
import com.ruoyi.system.domain.vo.CompetitionOfTeamVo;
+import com.ruoyi.system.domain.vo.SmsResponse;
+import com.ruoyi.system.service.ICompetitionService;
+import com.ruoyi.system.service.ICompetitionTeamGroupService;
+import com.ruoyi.system.service.SmsService;
+import com.ruoyi.system.utils.LoginUserUtil;
+import com.ruoyi.system.utils.UtilTool;
+import io.seata.core.model.Result;
+import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
@@ -37,7 +54,18 @@ public class CompetitionOfTeamController extends BaseController
{
@Autowired
private ICompetitionOfTeamService competitionOfTeamService;
-
+ @Autowired
+ private ICompetitionService competitionService;
+ @Autowired
+ private ICompetitionTeamGroupService competitionTeamGroupService;
+ @Autowired
+ private SmsService smsService;
+ @Value("${image.location.linux}")
+ private String linuxLocation;
+ @Value("${image.location.windows}")
+ private String winLocation;
+ @Value("${image.domainName}")
+ private String domainName;
/**
* 查询赛会中-参赛队伍列表
*/
@@ -127,4 +155,167 @@ public class CompetitionOfTeamController extends BaseController
{
return toAjax(competitionOfTeamService.deleteCompetitionOfTeamByIds(ids));
}
+
+ @ApiOperation(ApiTerminal.wxMiniProgram+"新增")
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult add(@RequestBody CompetitionTeamGroup entity) throws Exception {
+ entity.setCreatedTime(new Date());
+ entity.setCreatedBy(String.valueOf(SecurityUtils.getLoginUser().getUserid()));
+ return AjaxResult.success(competitionTeamGroupService.add(entity));
+ }
+ @ApiOperation(ApiTerminal.wxMiniProgram+"编辑")
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editCompetitionOfTeam(@RequestBody CompetitionOfTeam entity) throws Exception {
+ if(StringUtils.isEmpty(entity)){
+ throw new ServiceException("参数异常,非法操作!");
+ }
+ if(StringUtils.isEmpty(entity.getId())){
+ throw new ServiceException("id为空!");
+ }
+ return AjaxResult.success(competitionOfTeamService.edit(entity));
+ }
+ @PostMapping("/getJoinCompetitionTeam")
+ @ResponseBody
+ @ApiOperation(value = ApiTerminal.wxMiniProgram+"分页获取参与比赛的球队列表")
+ public TableDataInfo getJoinCompetitionTeam(@RequestBody CompetitionOfTeam entity){
+ startPage();
+ //关键字word包含:球队名称、地点名称、球馆名称,支持模糊搜索;
+ List list = competitionOfTeamService.getJoinCompetitionTeam(entity);
+ return getDataTable(list);
+ }
+ @ApiOperation(ApiTerminal.wxMiniProgram+"参赛球队审批")
+ @PostMapping("/teamApprove")
+ @ResponseBody
+ public AjaxResult approve(@RequestBody CompetitionOfTeam entity) throws Exception {
+ if(StringUtils.isEmpty(entity)){
+ throw new ServiceException("参数异常,非法操作!");
+ }
+ if(StringUtils.isEmpty(entity.getId())){
+ throw new InvalidParameterException("id为空!");
+ }if(StringUtils.isEmpty(entity.getStatus())){
+ throw new InvalidParameterException("status为空!");
+ }
+ CompetitionOfTeam old = competitionOfTeamService.selectCompetitionOfTeamById(entity.getId());
+ Competition competition = competitionService.selectCompetitionById(old.getCompetitionId());
+ StringBuffer msg = new StringBuffer(Constants.SMS_PAOPAO_SIGN);
+ if(old.getStatus().intValue()!=entity.getStatus()){
+ String passMsg = "已通过,让我们携手共创新的荣耀";
+ if(entity.getStatus()==-1){
+ passMsg = "已被驳回,原因是:"+entity.getRemark();
+ }
+ competitionOfTeamService.edit(entity);
+ //todo 发个短信通知管理员
+ Sms sms = new Sms();
+ msg.append("你的球队[");
+ msg.append(old.getTeamName());
+ msg.append("]加入赛会[");
+ msg.append(competition.getCompetitionName());
+ msg.append("]的申请");
+ msg.append(passMsg);
+ sms.setMs(msg.toString());
+ sms.setMb(old.getContactsTel());
+ SmsResponse smsResponse = smsService.sendSms(sms);
+ }
+ return AjaxResult.success(Boolean.TRUE);
+ }
+ @PostMapping("/getJoinCompetitionGroupTeam")
+ @ResponseBody
+ @ApiOperation(value = ApiTerminal.wxMiniProgram+"获取赛事中参与的球队的分组数据")
+ public AjaxResult getJoinCompetitionGroupTeam(@RequestBody CompetitionOfTeamVo entity){
+ //关键字word包含:球队名称、地点名称、球馆名称,支持模糊搜索;
+// List competitionOfTeamVos = competitionOfTeamFeign.getJoinCompetitionGroupTeam(entity);
+// List isNotGroupList = list.stream().filter(a -> StringUtils.isEmpty(a.getCompetitionGroup())).collect(Collectors.toList());
+// List list1 = list.stream().filter(a -> !StringUtils.isEmpty(a.getCompetitionGroup())).collect(Collectors.toList());
+// //1.根据字符串类型日期分组,并按照日期升序排序,返回TreeMap,map的key为字符串日期,value为list
+// TreeMap> dataGroupMap = list1.stream().collect(Collectors.groupingBy(a->a.getCompetitionGroup(), TreeMap::new,Collectors.toList()));
+// List