|
@@ -0,0 +1,250 @@
|
|
|
+package cn.rankin.userservice.controller;
|
|
|
+
|
|
|
+import cn.rankin.common.utils.api.model.APIResult;
|
|
|
+import cn.rankin.common.utils.api.page.Page;
|
|
|
+import cn.rankin.common.utils.dto.user.TerminalUserDTO;
|
|
|
+import cn.rankin.common.utils.dto.user.TerminalUserSearchDTO;
|
|
|
+import cn.rankin.common.utils.enums.BaseOrderEnum;
|
|
|
+import cn.rankin.common.utils.util.HttpUtil;
|
|
|
+import cn.rankin.common.utils.util.SecurityUtil;
|
|
|
+import cn.rankin.userservice.code.UserServiceAPICode;
|
|
|
+import cn.rankin.userservice.dto.RemoteUser;
|
|
|
+import cn.rankin.userservice.entity.Campus;
|
|
|
+import cn.rankin.userservice.entity.Merchant;
|
|
|
+import cn.rankin.userservice.entity.TerminalUser;
|
|
|
+import cn.rankin.userservice.proxy.RemoteUserProxy;
|
|
|
+import cn.rankin.userservice.service.CampusService;
|
|
|
+import cn.rankin.userservice.service.MerchantService;
|
|
|
+import cn.rankin.userservice.service.TerminalUserService;
|
|
|
+import cn.rankin.userservice.utils.StudentNumberUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.transaction.Transactional;
|
|
|
+import javax.validation.Valid;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@RestController
|
|
|
+@RequestMapping(value = "/user")
|
|
|
+public class TerminalUserController {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TerminalUserService terminalUserService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CampusService campusService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MerchantService merchantService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RemoteUserProxy remoteUserProxy;
|
|
|
+
|
|
|
+ @RequestMapping(value = "/list", method = RequestMethod.GET)
|
|
|
+ public APIResult<Page<TerminalUser>> search(TerminalUserSearchDTO terminalUserSearchDTO) {
|
|
|
+ TerminalUser terminalUser = new TerminalUser();
|
|
|
+
|
|
|
+ String code = terminalUserSearchDTO.getCode();
|
|
|
+ String campusId = terminalUserSearchDTO.getCampusId();
|
|
|
+ if (!StringUtils.isEmpty(code)) {
|
|
|
+ terminalUser.setCode("%" + code + "%");
|
|
|
+ }else if (!StringUtils.isEmpty(campusId)) {
|
|
|
+ terminalUser.setCampusId(campusId);
|
|
|
+ }
|
|
|
+
|
|
|
+ String merchantId = terminalUserSearchDTO.getMerchantId();
|
|
|
+ if (!StringUtils.isEmpty(merchantId)) {
|
|
|
+ terminalUser.setMerchantId(merchantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ LinkedHashMap<String, BaseOrderEnum> sort = new LinkedHashMap<>();
|
|
|
+ sort.put("gmtModified", BaseOrderEnum.DESC);
|
|
|
+
|
|
|
+ APIResult<Page<TerminalUser>> result = terminalUserService.search(terminalUser, terminalUserSearchDTO.getPageNo(), terminalUserSearchDTO.getPageSize(), sort);
|
|
|
+ if (result.getSuccess()) {
|
|
|
+ List<TerminalUser> terminalUserList = result.getData().getList();
|
|
|
+ setUserInfo(terminalUserList);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @RequestMapping(method = RequestMethod.POST)
|
|
|
+ public APIResult<TerminalUser> create(HttpServletRequest request, @RequestBody @Valid TerminalUserDTO terminalUserDTO) {
|
|
|
+ String campusId = terminalUserDTO.getCampusId();
|
|
|
+ if (StringUtils.isEmpty(campusId)) {
|
|
|
+ return APIResult.error(UserServiceAPICode.PARAMETER_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
+ Campus campus = campusService.findOne(campusId);
|
|
|
+ if (campus == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ String merchantId = campus.getMerchantId();
|
|
|
+ Merchant merchant = merchantService.findOne(merchantId);
|
|
|
+
|
|
|
+ if (merchant == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 开始生成学号
|
|
|
+ Integer serialNo = terminalUserService.getSerialNo(campusId);
|
|
|
+ String code = StudentNumberUtil.getStudentNo(campus.getCode(), serialNo);
|
|
|
+
|
|
|
+ // 设置学号
|
|
|
+ terminalUserDTO.setCode(code);
|
|
|
+ terminalUserDTO.setSerialNo(serialNo);
|
|
|
+ terminalUserDTO.setMerchantId(merchantId);
|
|
|
+
|
|
|
+ // 设置名字
|
|
|
+ String name = terminalUserDTO.getName();
|
|
|
+ if (StringUtils.isEmpty(name)) {
|
|
|
+ terminalUserDTO.setName(StudentNumberUtil.toChinese(serialNo, "教室"));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 存储数据库
|
|
|
+ APIResult<TerminalUser> result = terminalUserService.create(terminalUserDTO);
|
|
|
+ if (!result.getSuccess()) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ TerminalUser terminalUser = result.getData();
|
|
|
+ setUserInfo(terminalUser, campus, merchant);
|
|
|
+
|
|
|
+ // 远程注册
|
|
|
+ APIResult<RemoteUser> remoteUserAPIResult = remoteUserProxy.register(terminalUser, HttpUtil.getClientIp(request), "0");
|
|
|
+ if (!remoteUserAPIResult.getSuccess()) {
|
|
|
+ log.error(JSON.toJSONString(remoteUserAPIResult));
|
|
|
+ return APIResult.error(UserServiceAPICode.REMOTE_USER_REGISTER_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 再存储远程uid
|
|
|
+ terminalUserService.addUid(terminalUser.getId(), remoteUserAPIResult.getData().getUid());
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(method = RequestMethod.PUT)
|
|
|
+ public APIResult<TerminalUser> update(HttpServletRequest request, @RequestBody TerminalUserDTO terminalUserDTO) {
|
|
|
+ String id = terminalUserDTO.getId();
|
|
|
+ if (StringUtils.isEmpty(id)) {
|
|
|
+ return APIResult.error(UserServiceAPICode.PARAMETER_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
+ TerminalUser terminalUser = terminalUserService.findOne(id);
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ String newPassword = terminalUserDTO.getPassword();
|
|
|
+ if (!StringUtils.isEmpty(newPassword)) {
|
|
|
+ String prePassword = terminalUser.getPassword();
|
|
|
+ if (!prePassword.equals(newPassword)) {
|
|
|
+ APIResult result = remoteUserProxy.changePassword(terminalUser, newPassword, HttpUtil.getClientIp(request), "0");
|
|
|
+ if (!result.getSuccess()) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ APIResult<TerminalUser> result = terminalUserService.update(terminalUserDTO);
|
|
|
+ if (result.getSuccess()) {
|
|
|
+ setUserInfo(result.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/{id}", method = RequestMethod.GET)
|
|
|
+ public APIResult<TerminalUser> getUser(@PathVariable("id") String id) {
|
|
|
+ TerminalUser terminalUser = terminalUserService.findOne(id);
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ setUserInfo(terminalUser);
|
|
|
+ return APIResult.ok(terminalUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 禁用终端用户
|
|
|
+ @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
|
|
|
+ public APIResult<Boolean> delete(@PathVariable("id") String id) {
|
|
|
+ return terminalUserService.delete(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void setUserInfo(TerminalUser terminalUser, Campus campus, Merchant merchant) {
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (campus != null) {
|
|
|
+ terminalUser.setContactName(campus.getContactName());
|
|
|
+ terminalUser.setMobile(campus.getMobile());
|
|
|
+ terminalUser.setCampusName(campus.getName());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (merchant != null) {
|
|
|
+ terminalUser.setMerchantName(merchant.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setUserInfo(TerminalUser terminalUser) {
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Campus campus = campusService.findOne(terminalUser.getCampusId());
|
|
|
+ if (campus != null) {
|
|
|
+ terminalUser.setContactName(campus.getContactName());
|
|
|
+ terminalUser.setMobile(campus.getMobile());
|
|
|
+ terminalUser.setCampusName(campus.getName());
|
|
|
+ }
|
|
|
+
|
|
|
+ Merchant merchant = merchantService.findOne(campus.getMerchantId());
|
|
|
+ if (merchant != null) {
|
|
|
+ terminalUser.setMerchantName(merchant.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setUserInfo(List<TerminalUser> terminalUserList) {
|
|
|
+ if (CollectionUtils.isEmpty(terminalUserList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> campusIdList = new ArrayList<>();
|
|
|
+ List<String> merchantIdList = new ArrayList<>();
|
|
|
+
|
|
|
+ terminalUserList.forEach(terminalUser -> {
|
|
|
+ campusIdList.add(terminalUser.getCampusId());
|
|
|
+ merchantIdList.add(terminalUser.getMerchantId());
|
|
|
+ });
|
|
|
+
|
|
|
+ Map<String, Campus> campusMap = campusService.getCampusMap(campusIdList);
|
|
|
+ Map<String, Merchant> merchantMap = merchantService.getMerchantMap(merchantIdList);
|
|
|
+
|
|
|
+ for (TerminalUser terminalUser : terminalUserList) {
|
|
|
+ Campus campus = campusMap.get(terminalUser.getCampusId());
|
|
|
+ if (campus != null) {
|
|
|
+ terminalUser.setContactName(campus.getContactName());
|
|
|
+ terminalUser.setMobile(campus.getMobile());
|
|
|
+ terminalUser.setCampusName(campus.getName());
|
|
|
+ }
|
|
|
+
|
|
|
+ Merchant merchant = merchantMap.get(terminalUser.getMerchantId());
|
|
|
+ if (merchant != null) {
|
|
|
+ terminalUser.setMerchantName(merchant.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|