虹软激活

This commit is contained in:
张博 2024-11-08 13:29:08 +08:00
parent 9e7941ddca
commit 06f8a78e6a
22 changed files with 1721 additions and 26 deletions

View File

@ -1019,17 +1019,14 @@ public class AppApiController {
@PostMapping("/remove")
public R removeBind(@LoginUser AppUserEntity user, @RequestBody List<Map<String,Object>> params) {
//AppUserScopeEntity userScopeEntity = appUserScopeService.getById(user.getCurrentScopeId());
Map<String,Object> opParams = new HashMap<>();
/*Map<String,Object> opParams = new HashMap<>();
opParams.put("operation","delUserContactData");
opParams.put("accountNumber",globalValue.accountNumber);
opParams.put("passKey", KeysEntity.passKey);
opParams.put("empowerText",KeysEntity.empowerText);
List<Map<String,Object>> dataInfo = new ArrayList<>();
Map<String,Object> info = new HashMap<>();
List<String> list = new ArrayList<>();
params.forEach(item -> {
list.add(item.get("personId").toString());
});
List<TenRelation> relations = relationService.list(new LambdaQueryWrapper<TenRelation>()
.eq(TenRelation::getParentId,user.getUserId())
.in(TenRelation::getStudentId,list));
@ -1044,7 +1041,11 @@ public class AppApiController {
}
if(!jsonObject.getJSONArray("errInfo").isEmpty()) {
return R.error("同步联系人失败");
}
}*/
List<String> list = new ArrayList<>();
params.forEach(item -> {
list.add(item.get("personId").toString());
});
relationService.remove(new LambdaQueryWrapper<TenRelation>()
.eq(TenRelation::getParentId,user.getUserId())
.in(TenRelation::getStudentId,list));

View File

@ -0,0 +1,12 @@
package net.shapelight.modules.appparent.annotation;
import java.lang.annotation.*;
/**
* app登录效验
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Login {
}

View File

@ -0,0 +1,15 @@
package net.shapelight.modules.appparent.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 登录用户信息
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {
}

View File

@ -0,0 +1,32 @@
package net.shapelight.modules.appparent.config;
import net.shapelight.modules.appparent.interceptor.AuthorizationInterceptor;
import net.shapelight.modules.appparent.resolver.LoginUserHandlerMethodArgumentResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* MVC配置
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private AuthorizationInterceptor authorizationInterceptor;
@Autowired
private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authorizationInterceptor).addPathPatterns("/app/**");
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(loginUserHandlerMethodArgumentResolver);
}
}

View File

@ -0,0 +1,553 @@
package net.shapelight.modules.appparent.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import net.shapelight.common.config.GlobalValue;
import net.shapelight.common.config.MinioConfig;
import net.shapelight.common.utils.*;
import net.shapelight.modules.app.service.AppUserService;
import net.shapelight.modules.appparent.annotation.Login;
import net.shapelight.modules.appparent.annotation.LoginUser;
import net.shapelight.modules.nettyapi.service.ServerApiService;
import net.shapelight.modules.sys.entity.SysDeviceAppEntity;
import net.shapelight.modules.sys.service.SysDeviceAppService;
import net.shapelight.modules.sys.service.SysUserService;
import net.shapelight.modules.ten.entity.*;
import net.shapelight.modules.ten.service.*;
import net.shapelight.modules.tripartitePlatform.operatorPlatform.OpFeignClient;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
/**
* APP测试接口
*/
@RestController
@RequestMapping("/parent/app")
@Api("APP接口")
public class AppApiController {
@Autowired
private TenPersonService tenPersonService;
@Autowired
private TenCellService tenCellService;
@Autowired
private TenBuildService tenBuildService;
@Autowired
private TenRoomService tenRoomService;
@Autowired
private TenDeviceService tenDeviceService;
@Autowired
private MinioConfig minioConfig;
@Autowired
private MinioClient minioClient;
@Autowired
private TenNoticeService tenNoticeService;
@Autowired
private TenFeedbackService tenFeedbackService;
@Autowired
private TenRepairService tenRepairService;
@Autowired
private GlobalValue globalValue;
@Autowired
private TenRecordService tenRecordService;
@Autowired
private SysUserService sysUserService;
@Autowired
private SysDeviceAppService sysDeviceAppService;
@Autowired
private ServerApiService serverApiService;
@Autowired
private TenCellDeptService tenCellDeptService;
@Autowired
private TenLabelService tenLabelService;
@Autowired
private RedisUtils redisUtils;
@Autowired
private TenParentService tenParentService;
@Autowired
private TenRelationService relationService;
@Qualifier("net.shapelight.modules.tripartitePlatform.operatorPlatform.OpFeignClient")
@Autowired
private OpFeignClient opFeignClient;
@Autowired
private AppUserService appUserService;
@Login
@GetMapping("systeminfo")
// @ApiOperation("获取系统消息")
public R systeminfo(@LoginUser TenParent user) {
if(user == null){
return R.error("用户不存在");
}
List<TenParent> list = tenParentService.list();
return R.ok().put("data", list);
}
@PostMapping("checkCellAdmin")
@ApiOperation("验证小区管理员是否正确")
@ApiImplicitParams({
@ApiImplicitParam(name = "adminMobile", value = "管理员手机号", paramType = "query", dataType = "String", required = true),
})
public R checkCellAdmin(@RequestBody Map params) {
String adminMobile = (String) params.get("adminMobile");
String cellId = appUserService.checkCellAdmin(adminMobile);
String tenantId = String.valueOf(tenCellService.getById(cellId).getTenantId());
if (cellId != null && !cellId.isEmpty()) {
Map<String, Object> cellMap = new HashMap<>();
cellMap.put("cellId", cellId);
cellMap.put("tenantId",tenantId);
return R.ok().put("data", cellMap);
} else {
return R.error("验证失败,请检查输入是否正确或者联系校园管理员");
}
}
@PostMapping("/registerUser")
@ApiOperation("注册用户")
@Transactional
public R registerUser(@RequestBody TenPersonEntity tenPerson) {
//1.验证用户名
TenParent parent = tenParentService.getOne(new LambdaQueryWrapper<TenParent>().eq(TenParent::getUserName,tenPerson.getUsername()));
if (parent != null) {
return R.error("用户名已经注册");
}
//2.验证手机号
parent = tenParentService.findByMobile(tenPerson.getMobile());
if (parent != null) {
return R.error("手机号已经注册");
}
TenParent tenParent = new TenParent();
parent.setUserName(tenPerson.getUsername());
parent.setMobile(tenPerson.getMobile());
//sha256加密
// String salt = RandomStringUtils.randomAlphanumeric(20);
// appUser.setPassword(new Sha256Hash(entity.getPassword(), salt).toHex());
// appUser.setSalt(salt);
parent.setPassword(DigestUtils.sha256Hex(tenPerson.getPassword()));
parent.setCreateTime(new Date());
parent.setCellId(tenPerson.getCellId());
tenParent.setName(tenPerson.getName());
tenParent.setGender(tenPerson.getGender());
tenParent.setIdCard(tenPerson.getIdCard());
tenParent.setRegisterType(Constant.RESGISTER_TYPE_APP);
tenParentService.save(tenParent);
return R.ok();
}
/**
* 下拉框选择楼栋单元
*/
@PostMapping("/build/selectByCellId")
@ApiOperation(value = "下拉选择楼栋,通过选择小区联动查询", response = TenBuildEntity.class)
@ApiImplicitParams({
@ApiImplicitParam(name = "cellId", value = "小区ID", paramType = "query", dataType = "String", required = true),
})
public R selectByCellId(@RequestBody Map params) {
String cellIdStr = (String) params.get("cellId");
Long cellId = Long.parseLong(cellIdStr);
// TenCellEntity cell = tenCellService.getById(cellId);
// String tenantId = cell.getTenantId()+"";
//Map<String,Object> params = new HashMap<>();
// params.put("tenantId",tenantId+"");
List<TenBuildEntity> buildList = tenBuildService.selectByCellId(cellId);
for(TenBuildEntity buildEntity: buildList){
buildEntity.setName(buildEntity.getName()+buildEntity.getUnit()+"单元");
}
return R.ok().put("data", buildList);
}
/**
* 下拉框选择房间
*/
@PostMapping("/room/select")
@ApiOperation(value = "下拉选择房间名称,通过单元楼层", response = TenBuildEntity.class)
@ApiImplicitParams({
@ApiImplicitParam(name = "cellId", value = "小区ID", paramType = "query", dataType = "String", required = true),
@ApiImplicitParam(name = "buildId", value = "楼栋ID", paramType = "query", dataType = "String", required = true),
@ApiImplicitParam(name = "layer", value = "楼层", paramType = "query", dataType = "String", required = true),
})
public R select(@RequestBody Map params) {
Long cellId = Long.parseLong((String) params.get("cellId"));
Long buildId = Long.parseLong((String) params.get("buildId"));
Integer layer = Integer.parseInt((String) params.get("layer"));
List<TenRoomEntity> buildList = tenRoomService.getLayerRooms(buildId, cellId);
return R.ok().put("data", buildList);
}
@Login
@PostMapping("addVisitor")
@ApiOperation("添加访客")
public R addVisitor(@LoginUser TenParent user, @RequestBody TenPersonEntity tenPerson) throws Exception {
// public static final int PERSON_TYPE_OWNER = 5000; //业主
// public static final int PERSON_TYPE_MEMBER = 5001; //家属住户
// public static final int PERSON_TYPE_TENANT = 5002; //租户
// public static final int PERSON_TYPE_GUEST = 5005; //访客
tenPerson.setLabelId(Constant.PERSON_TYPE_GUEST);
tenPerson.setAppFlag(Constant.APP_LOGIN_NO);
// TenPersonEntity tenPersonEntity = tenPersonService.findByName(tenPerson.getName(),
// tenPerson.getRoomId(),tenPerson.getCellId());
// if(tenPersonEntity!=null){
// return R.error("姓名在此房间已存在");
// }
long id = new SnowflakeIdWorker().nextId();
tenPerson.setPersonId(id);
tenPerson.setUuid(UUIDUtil.uuid());
//tenPerson.setCellId(appUserScopeEntity.getCellId());
//tenPerson.setTenantId(appUserScopeEntity.get());
// tenPerson.setCreateBy(user.getUsername());
tenPerson.setCreateTime(new Date());
tenPerson.setRegisterType(Constant.RESGISTER_TYPE_APP);
/*Date now = new Date();
tenPerson.setLiveStart(new Date());
tenPerson.setLiveEnd(new Date(now.getTime()+3600000L));*/
tenPerson.setCreateBy(user.getUserId().toString());
tenPerson.setStatus(2);
tenPerson.setPersonType(Constant.PERSON_TYPE_GUEST);
String res;
try {
res = tenPersonService.save(tenPerson);
} catch (Exception e) {
return R.error(e.getMessage());
}
if (res!=null) {
return R.error(res);
}
return R.ok();
}
@PostMapping("/uploadImage")
@ApiOperation("上传临时人员照片")
public R uploadImage(@RequestParam("file") MultipartFile file) {
//String tenantId = getUser().getTenantId()+"";
if (file.isEmpty() || file.getSize() == 0) {
return R.error("文件不能为空");
}
try {
// MinioClient minioClient = MinioUtil.getMinioClient();
String extension = FilenameUtils.getExtension(file.getOriginalFilename()); //后缀名
String fileName = "temp/" + "t_" + UUIDUtil.uuid() + "." + extension;
InputStream inputStream = file.getInputStream();
PutObjectOptions putObjectOptions = new PutObjectOptions(inputStream.available(), -1);
putObjectOptions.setContentType(file.getContentType());
minioClient.putObject(
minioConfig.getBucketName(), fileName, inputStream, putObjectOptions) ;
inputStream.close();
return R.ok().put("data", fileName);
} catch (Exception e) {
return R.error(e.getMessage());
}
}
@Login
@PostMapping("addPerson")
@ApiOperation("管理员添加人员")
public R addPerson(@LoginUser TenParent user, @RequestBody TenPersonEntity tenPerson) throws Exception {
if(user == null){
return R.error("用户不存在");
}
if(tenPerson.getPersonType() == 5000 || tenPerson.getPersonType() == 5001 || tenPerson.getPersonType() == 5002){
TenLabelEntity labelEntity = tenLabelService.getOne(new QueryWrapper<TenLabelEntity>()
.eq("type",tenPerson.getPersonType())
.eq("cell_id",user.getCellId()));
if(labelEntity!=null){
tenPerson.setLabelId(labelEntity.getLabelId().intValue());
}
}
if(tenPerson.getPersonType() == 5000){
tenPerson.setAppFlag(Constant.APP_LOGIN_YES);
}else{
tenPerson.setAppFlag(Constant.APP_LOGIN_NO);
}
if(tenPerson.getIdCard()!=null){
if(tenPerson.getIdCard().length() == 15){
String id18 = Convert.toEighteen(tenPerson.getIdCard());
tenPerson.setIdCard(id18);
}
}
//验证app人员是否注册
if (tenPerson.getAppFlag()==Constant.APP_LOGIN_YES) {
//1.验证用户名
TenParent appUser = tenParentService.getOne(new LambdaQueryWrapper<TenParent>().eq(TenParent::getUserName,tenPerson.getUsername()));
if (appUser!=null) {
return R.error("用户名已经注册");
}
//2.验证手机号
appUser = tenParentService.findByMobile(tenPerson.getMobile());
if (appUser!=null) {
return R.error("手机号已经注册");
}
}
TenPersonEntity tenPersonEntity = tenPersonService.findByName(tenPerson.getName(),
tenPerson.getRoomId(),tenPerson.getCellId());
if(tenPersonEntity!=null){
return R.error("姓名在此房间已存在");
}
if(tenPerson.getIdCard()!=null){
// TenPersonEntity tenPersonIdcard = tenPersonService.findByIdCard(tenPerson.getIdCard(),
// tenPerson.getRoomId(),tenPerson.getCellId());
// if(tenPersonIdcard!=null){
// return R.error("身份证在此房间已存在");
// }
List<TenPersonEntity> list = tenPersonService.findByIdCardAndDept(tenPerson.getIdCard(),tenPerson.getDeptId());
if(list.size()>0){
return R.error("身份证在此组织已存在");
}
}
long id = new SnowflakeIdWorker().nextId();
tenPerson.setPersonId(id);
tenPerson.setUuid(UUIDUtil.uuid());
//tenPerson.setTenantId(user.getTenantId());
tenPerson.setCreateBy(user.getUserName());
tenPerson.setCreateTime(new Date());
tenPerson.setRegisterType(Constant.RESGISTER_TYPE_APP);
tenPerson.setStatus(Constant.PESON_SUATUS_NOMOR);
String res;
try {
res = tenPersonService.save(tenPerson);
} catch (Exception e) {
return R.error(e.getMessage());
}
if (res!=null) {
return R.error(res);
}
return R.ok();
}
@Login
@PostMapping("getPersons")
@ApiOperation("获取人员列表")
@ApiImplicitParams({
@ApiImplicitParam(name="limit",value = "每页条数",paramType = "query",dataType = "String",required = true),
@ApiImplicitParam(name="page",value = "页码",paramType = "query",dataType = "String",required = true),
@ApiImplicitParam(name="key",value = "关键字",paramType = "query",dataType = "String",required = true),
})
public R getPersons(@LoginUser TenParent user, @RequestBody Map<String, Object> params) {
String key = (String)params.get("key");
List<TenRelation> relationList = null;
if(params.get("status")!=null) {
relationList = relationService.list(new LambdaQueryWrapper<TenRelation>()
.eq(TenRelation::getParentId,user.getUserId())
.eq(TenRelation::getStatus,params.get("status")));
} else {
relationList = relationService.list(new LambdaQueryWrapper<TenRelation>()
.eq(TenRelation::getParentId,user.getUserId()));
}
if(!relationList.isEmpty()) {
List<Long> list = relationList.stream().map(TenRelation::getStudentId).collect(Collectors.toList());
params.put("cellId",user.getCellId());
params.put("personIds",list.stream().distinct().collect(Collectors.toList()));
PageUtils page = tenPersonService.selectBypersonIds(params);
return R.ok().put("data",page);
}
return R.ok().put("data",new PageUtils(new ArrayList<>(),0,0,0));
}
@Login
@PostMapping("getGuest")
@ApiOperation("业主获取访客列表")
@ApiImplicitParams({
@ApiImplicitParam(name="limit",value = "每页条数",paramType = "query",dataType = "String",required = true),
@ApiImplicitParam(name="page",value = "页码",paramType = "query",dataType = "String",required = true),
@ApiImplicitParam(name="key",value = "关键字",paramType = "query",dataType = "String",required = true),
})
public R getGuest(@LoginUser TenParent user, @RequestBody Map<String, Object> params) {
String key = (String)params.get("key");
params.put("cellId", user.getCellId().toString());
params.put("createBy", user.getId().toString());
PageUtils page = tenPersonService.selectByCreateByQueryPage(params);
return R.ok().put("data", page);
}
@Login
@PostMapping("/uploadPublicImage")
@ApiOperation("上传公共照片")
public R uploadImage(@LoginUser TenParent user, @RequestParam("file") MultipartFile file) {
if(user == null){
return R.error("用户不存在");
}
//String tenantId = getUser().getTenantId()+"";
Long cellId = user.getCellId();
if (file.isEmpty() || file.getSize() == 0) {
return R.error("文件不能为空");
}
try {
String userFileUrl = globalValue.getImagesDir() + "/" +
cellId.toString() + "/" + Constant.IMAGE_DIR_REPAIR+"/";
String extension = FilenameUtils.getExtension(file.getOriginalFilename()); //后缀名
String fileName = userFileUrl + UUIDUtil.uuid() + "." + extension;
InputStream inputStream = file.getInputStream();
PutObjectOptions putObjectOptions = new PutObjectOptions(inputStream.available(), -1);
putObjectOptions.setContentType(file.getContentType());
minioClient.putObject(
minioConfig.getBucketName(), fileName, inputStream, putObjectOptions);
inputStream.close();
return R.ok().put("data", fileName);
} catch (Exception e) {
return R.error(e.getMessage());
}
}
// @Login
@PostMapping("/getFeature")
@ApiOperation("获取版本")
@ApiImplicitParams({
@ApiImplicitParam(name = "appName", value = "XAEJ", paramType = "query", dataType = "String", required = true),
})
public R getFeature(@LoginUser TenParent user, @RequestBody Map param) {
String appName = (String)param.get("appName");
SysDeviceAppEntity app = sysDeviceAppService.getOne(new QueryWrapper<SysDeviceAppEntity>()
.eq("app_name",appName));
String version = "1";
if(app!=null){
version = app.getVersion();
}
return R.ok().put("data",version);
}
@Login
@PostMapping("/binding")
@ApiOperation("绑定学员")
@ApiImplicitParams({
@ApiImplicitParam(name = "cellId", value = "学校ID", paramType = "query", dataType = "String", required = true),
@ApiImplicitParam(name = "studentId", value = "学号", paramType = "query", dataType = "String", required = true)
})
public R binding(@LoginUser TenParent user, @RequestBody Map<String,Object> params) {
Long cellId = user.getCellId();
if(params.get("ryId")==null) {
return R.error("请输入学号");
}
if(params.get("idCard")==null) {
return R.error("请输入身份证号");
}
String ryId = params.get("ryId").toString();
String idCard = params.get("idCard").toString();
TenPersonEntity entity = tenPersonService.getByRyId(ryId,cellId,idCard);
if(entity == null) {
return R.error("学生未录入");
}
TenRelation tenRelation =relationService.getOne(new LambdaQueryWrapper<TenRelation>()
.eq(TenRelation::getParentId,user.getUserId())
.eq(TenRelation::getStudentId,entity.getPersonId()));
if(tenRelation!=null) {
if(tenRelation.getStatus()==2) {
return R.error("您已提交绑定审批,请耐心等待");
}
if(tenRelation.getStatus()==1) {
return R.error("该学生已和您绑定");
}
}
TenRelation relation = new TenRelation();
relation.setParentId(user.getUserId());
relation.setStudentId(entity.getPersonId());
relation.setCreateTime(new Date());
relation.setStatus(2);
relation.setRelation(params.get("salutation").toString());
relationService.save(relation);
return R.ok();
}
@Login
@PostMapping("/remove")
public R removeBind(@LoginUser TenParent user, @RequestBody List<Map<String,Object>> params) {
//AppUserScopeEntity userScopeEntity = appUserScopeService.getById(user.getCurrentScopeId());
/* Map<String,Object> opParams = new HashMap<>();
opParams.put("operation","delUserContactData");
opParams.put("accountNumber",globalValue.accountNumber);
opParams.put("passKey", KeysEntity.passKey);
opParams.put("empowerText",KeysEntity.empowerText);
List<Map<String,Object>> dataInfo = new ArrayList<>();
Map<String,Object> info = new HashMap<>();
List<String> list = new ArrayList<>();
params.forEach(item -> {
list.add(item.get("personId").toString());
});
List<TenRelation> relations = relationService.list(new LambdaQueryWrapper<TenRelation>()
.eq(TenRelation::getParentId,user.getUserId())
.in(TenRelation::getStudentId,list));
relations.forEach(relation -> {
info.put("objectUuid",relation.getId().toString());
dataInfo.add(info);
});
opParams.put("dataInfo",dataInfo);
JSONObject jsonObject = opFeignClient.submitData(opParams);
if(!jsonObject.getString("shrgStatus").equals("S")) {
return R.error("同步联系人失败");
}
if(!jsonObject.getJSONArray("errInfo").isEmpty()) {
return R.error("同步联系人失败");
}*/
List<String> list = new ArrayList<>();
params.forEach(item -> {
list.add(item.get("personId").toString());
});
relationService.remove(new LambdaQueryWrapper<TenRelation>()
.eq(TenRelation::getParentId,user.getUserId())
.in(TenRelation::getStudentId,list));
return R.ok();
}
@Login
@GetMapping("/selectByCellId/{cellId}")
@ApiOperation(value = "下拉选择楼栋,通过选择小区联动查询",response = TenBuildEntity.class)
public R selectByCellId(@LoginUser TenParent user, @PathVariable("cellId") Long cellId){
List<TenBuildEntity> buildList = tenBuildService.selectByCellId(cellId);
// for(TenBuildEntity buildEntity: buildList){
// buildEntity.setName(buildEntity.getName()+buildEntity.getUnit()+"单元");
// }
return R.ok().put("data", buildList);
}
/**
* 下拉框选择
*/
@Login
@GetMapping("/select/{cellId}/{buildId}")
@ApiOperation(value = "下拉选择房间名称,通过单元楼层",response = TenBuildEntity.class)
public R select(@PathVariable("cellId") Long cellId,
@PathVariable("buildId") Long buildId){
List<TenRoomEntity> buildList = tenRoomService.getLayerRooms(buildId,cellId);
return R.ok().put("data", buildList);
}
}

View File

@ -0,0 +1,16 @@
package net.shapelight.modules.appparent.controller;
public class AppComm {
public static int FLAG_DEVICE_ALART = 2;
public static int FLAG_APP_TO_SERVER = 0;
public static int FLAG_SERVER_TO_DEVICE = 1;
public static int FLAG_RESPONSED = 3;
public static int FLAG_ALERT_MSG_DELETE = 4;
public static String STRING_ALEAM = "告警";
public static String TYPE_MOVECAR = "movecar";
public static String SIGNAL_STATUS_ON = "正常";
public static String SIGNAL_STATUS_OFF = "离线";
public static String SIGNAL_STATUS_ERROR = "异常";
public static String SIGNAL_STATUS_INIT = "初始导入";
}

View File

@ -0,0 +1,156 @@
package net.shapelight.modules.appparent.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.minio.MinioClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import net.shapelight.common.config.GlobalValue;
import net.shapelight.common.config.MinioConfig;
import net.shapelight.common.utils.Constant;
import net.shapelight.common.utils.MyDateUtils;
import net.shapelight.common.utils.PageUtils;
import net.shapelight.common.utils.R;
import net.shapelight.modules.appparent.annotation.Login;
import net.shapelight.modules.appparent.annotation.LoginUser;
import net.shapelight.modules.appparent.entity.AppUserEntity;
import net.shapelight.modules.appparent.entity.AppUserScopeEntity;
import net.shapelight.modules.appparent.service.AppUserScopeService;
import net.shapelight.modules.appparent.service.AppUserService;
import net.shapelight.modules.ten.entity.*;
import net.shapelight.modules.ten.service.*;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* APP测试接口
*/
@RestController
@RequestMapping("/parent/app")
@Api("APP接口")
public class AppInfoApiController {
@Autowired
private TenCellService tenCellService;
@Autowired
private AppUserScopeService appUserScopeService;
@Autowired
private TenNoticeService tenNoticeService;
@Autowired
private TenRecordService tenRecordService;
@Autowired
private TenRelationService relationService;
@Login
@PostMapping("listNotice")
@ApiOperation(value = "查看公告",response = TenNoticeEntity.class)
// @ApiImplicitParams({
// @ApiImplicitParam(name="cellId",value = "小区",paramType = "query",dataType = "String",required = true)
// })
public R listNotice(@LoginUser TenParent user, @RequestBody Map<String, Object> params) {
if(user == null){
return R.error("用户不存在");
}
Long cellId = user.getCellId();
params.put("cellId",cellId);
List<TenNoticeEntity> list = new ArrayList<>();
//业主显示发不时间到了的公告
list = tenNoticeService.list(new QueryWrapper<TenNoticeEntity>()
.eq("cell_id", cellId)
.le("publish_time", new Date())
.orderByDesc("publish_time")
.last("LIMIT 10"));
return R.ok().put("data", list);
}
@Login
@PostMapping("listNoticeTop")
@ApiOperation(value = "查看公告一条",response = TenNoticeEntity.class)
public R listNoticeTop(@LoginUser TenParent user, @RequestBody Map<String, Object> params) {
if(user == null){
return R.error("用户不存在");
}
Long cellId = user.getCellId();
params.put("cellId",cellId);
List<TenNoticeEntity> list = tenNoticeService.list(new QueryWrapper<TenNoticeEntity>()
.eq("cell_id",cellId)
.le("publish_time",new Date())
.orderByDesc("publish_time")
.last("LIMIT 1"));
return R.ok().put("data",list);
}
@Login
@PostMapping("/openDoorRecordList")
@ApiOperation(value = "查询开门记录分页",response = TenRecordEntity.class)
@ApiImplicitParams({
@ApiImplicitParam(name="limit",value = "每页条数",paramType = "query",dataType = "String",required = true),
@ApiImplicitParam(name="page",value = "页码",paramType = "query",dataType = "String",required = true),
@ApiImplicitParam(name="name",value = "姓名",paramType = "query",dataType = "String",required = true),
@ApiImplicitParam(name="during",value = "时间段0当天1本周2本月",paramType = "query",dataType = "String",required = true),
// @ApiImplicitParam(name="recordTimeStart",value = "开始时间",paramType = "query",dataType = "String",required = true),
// @ApiImplicitParam(name="recordTimeEnd",value = "结束时间",paramType = "query",dataType = "String",required = true),
})
public R openDoorRecordList(@LoginUser AppUserEntity user, @RequestBody Map<String, Object> params){
if(user == null){
return R.error("用户不存在");
}
AppUserScopeEntity scope = appUserScopeService.getById(user.getCurrentScopeId());
TenCellEntity cellEntity = tenCellService.getById(scope.getCellId());
if(cellEntity!=null){
params.put("cellId",cellEntity.getCellId());
int during = Integer.parseInt((String)params.get("during"));
String recordTimeStart = null;
String recordTimeEnd = null;
if(during == 0){ //当天
recordTimeStart = MyDateUtils.getCurrentDayStartTime();
recordTimeEnd = MyDateUtils.getCurrentDayEndTime();
}else if(during == 1){ //本周
recordTimeStart = MyDateUtils.getCurrentWeekStartTime();
recordTimeEnd = MyDateUtils.getCurrentWeekEndTime();
}else if(during == 2){ //本月
recordTimeStart = MyDateUtils.getCurrentMonthStartTime();
recordTimeEnd = MyDateUtils.getCurrentMonthEndTime();
}
params.put("recordTimeStart",recordTimeStart);
params.put("recordTimeEnd",recordTimeEnd);
///小区管理员
if(scope.getRoleId() == Constant.ROLE_TEN_CELL){
params.put("cellId",scope.getCellId().toString());
PageUtils page = tenRecordService.queryPage(params);
return R.ok().put("data", page);
}
//业主
else if(scope.getRoleId() == Constant.PERSON_TYPE_PARENT){
List<TenRelation> relationList = relationService.list(new LambdaQueryWrapper<TenRelation>()
.eq(TenRelation::getParentId,user.getUserId()).eq(TenRelation::getStatus,1));
if(!relationList.isEmpty()) {
List<Long> list = relationList.stream().map(TenRelation::getStudentId).collect(Collectors.toList());
params.put("tenantId",user.getTenantId());
params.put("personIds",list);
PageUtils page = tenRecordService.getByPersonIds(params);
return R.ok().put("data", page);
}
}
}
return R.ok().put("data",new PageUtils(new ArrayList<>(),0,0,0));
}
}

View File

@ -0,0 +1,96 @@
package net.shapelight.modules.appparent.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.shapelight.common.utils.IpUtils;
import net.shapelight.common.utils.R;
import net.shapelight.common.utils.ServletUtils;
import net.shapelight.common.validator.ValidatorUtils;
import net.shapelight.modules.appparent.annotation.Login;
import net.shapelight.modules.appparent.annotation.LoginUser;
import net.shapelight.modules.appparent.entity.AppUserEntity;
import net.shapelight.modules.appparent.form.LoginForm;
import net.shapelight.modules.appparent.service.AppUserService;
import net.shapelight.modules.appparent.utils.JwtUtils;
import net.shapelight.modules.ten.entity.TenParent;
import net.shapelight.modules.ten.service.TenParentService;
import net.shapelight.modules.vo.TokenVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
/**
* APP登录授权
*/
@RestController
@RequestMapping("/parent/app")
@Api("APP登录接口")
public class AppLoginController {
@Autowired
private AppUserService userService;
@Autowired
private JwtUtils jwtUtils;
// @Autowired
// PushService pushService;
@Autowired
TenParentService parentService;
/**
* 登录
*/
@PostMapping("login")
@ApiOperation("登录")
public R login(@RequestBody LoginForm form){
//表单校验
ValidatorUtils.validateEntity(form);
//用户登录
TenParent user = parentService.login(form);
//生成token
String token = jwtUtils.generateToken(user.getUserId());
TokenVo tokenVo = new TokenVo();
tokenVo.setToken(token);
tokenVo.setExpire((int)jwtUtils.getExpire());
String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
user.setLoginTime(new Date());
user.setLoginIp(ip);
parentService.saveOrUpdate(user);
return R.ok().put("data",tokenVo);
}
/*
* Token登陆
*/
@Login
@GetMapping("checkin")
@ApiOperation("获取用户信息")
public R userInfo(@LoginUser TenParent user){
// if(user == null){
// return R.error(401,"用户不存在");
// }
if(user == null){
return R.error("用户不存在");
}
String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
user.setLoginTime(new Date());
user.setLoginIp(ip);
//TenParent parent = parentService.getOne(new LambdaQueryWrapper<TenParent>().eq(TenParent::getUserId,user.getUserId()));
//user.setParent(parent);
parentService.saveOrUpdate(user);
return R.ok().put("data", user);
}
// @Login
// @PostMapping("logout")
// @ApiOperation("退出登陆")
// //public R updateMobile(@LoginUser UserEntity user,HttpServletRequest request,String mobile, String password,String smscode){
// public R logout(HttpServletRequest request, @LoginUser AppUserEntity user){
// //删除这个用户的rid
// String token = request.getHeader("token");
//// pushService.deleteFromToken(token);
// return R.ok();
// }
}

View File

@ -0,0 +1,266 @@
package net.shapelight.modules.appparent.controller;
//import net.shapelight.common.utils.AliyunSmsUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import net.shapelight.common.utils.R;
import net.shapelight.common.utils.RedisUtils;
import net.shapelight.modules.appparent.annotation.Login;
import net.shapelight.modules.appparent.annotation.LoginUser;
import net.shapelight.modules.appparent.entity.AppUserEntity;
import net.shapelight.modules.appparent.service.AppUserService;
import net.shapelight.modules.appparent.utils.MonyunSmsUtils;
import net.shapelight.modules.ten.entity.TenParent;
import net.shapelight.modules.ten.service.TenParentService;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/**
* 注册
*/
@RestController
@RequestMapping("/parent/app")
@Api("APP注册接口")
public class AppRegisterController {
@Autowired
private AppUserService userService;
@Autowired
private RedisUtils redisUtils;
@Autowired
private TenParentService parentService;
@PostMapping("sendsms")
@ApiOperation("获取验证码")
@ApiImplicitParams({
@ApiImplicitParam(name = "mobile", value = "手机号", paramType = "query", dataType = "String", required = true),
@ApiImplicitParam(name = "type", value = "类型1注册2忘记密码", paramType = "query", dataType = "String", required = true)
})
public R sendsms(@RequestBody Map<String, Object> params) {
//验证手机是否注册
String mobile = (String) params.get("mobile");
int type = (Integer) params.get("type");
//type=1 //注册
//type=2 //忘记密码
//type=1 //修改绑定的手机
if (type == 1) {//注册//修改绑定的手机
AppUserEntity user = userService.findByMobile(mobile);
if (user != null) {
return R.error("手机号码已注册");
}
} else if (type == 2) {//忘记密码
AppUserEntity user = userService.findByMobile(mobile);
if (user == null) {
return R.error("当前手机号未被使用");
}
} else {
return R.error("未知类型");
}
String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);
int result = MonyunSmsUtils.sendSms(mobile, verifyCode);
Map<String, Object> resMap = new HashMap<>();
resMap.put("result", result);
if (result != 0) {
return R.error(result+"");
}
redisUtils.set(mobile,verifyCode,120L);
return R.ok();
}
// @PostMapping("register")
// public R register(@RequestBody Map<String, Object> map) {
// String mobile = (String) map.get("mobile");
// String password = (String) map.get("password");
// String smscode = (String) map.get("smscode");
//
// JSONObject SessionJson = (JSONObject) request.getSession().getAttribute("verifyCode");
//
// if (SessionJson == null) {
// return R.error("请先发送验证码");
// }
// String s_msg_id = SessionJson.getString("msg_id");
// String s_mobile = SessionJson.getString("mobile");
// String verifyCode = SessionJson.getString("verifyCode");
//
// if (!verifyCode.equals(smscode)) {
// return R.error("验证码错误");
// }
//
// AppUserEntity user = new AppUserEntity();
// user.setMobile(mobile);
// user.setUsername(mobile);
// user.setPassword(DigestUtils.sha256Hex(password));
// user.setCreateTime(new Date());
// userService.save(user);
// request.getSession().setAttribute("verifyCode", null);
// return R.ok();
// }
@PostMapping("checkCode")
@ApiOperation("检测验证码")
@ApiImplicitParams({
@ApiImplicitParam(name = "mobile", value = "手机号", paramType = "query", dataType = "String", required = true),
@ApiImplicitParam(name = "smscode", value = "验证码", paramType = "query", dataType = "String", required = true)
})
public R checkCode(@RequestBody Map<String, Object> map) {
String mobile = (String) map.get("mobile");
String smscode = (String) map.get("smscode");
// JSONObject SessionJson = (JSONObject) request.getSession().getAttribute("verifyCode");
String verifyCode = (String)redisUtils.get(mobile);
// if (SessionJson == null) {
// return R.error("请先发送验证码");
// }
// String s_msg_id = SessionJson.getString("msg_id");
// String s_mobile = SessionJson.getString("mobile");
// String verifyCode = SessionJson.getString("verifyCode");
// String rMobile = SessionJson.getString("mobile");
if (verifyCode!=null && !verifyCode.equals(smscode)) {
return R.error("验证码错误");
}
if (verifyCode == null){
return R.error("验证码已过期");
}
// if (!rMobile.equals(mobile)) {
// return R.error("请输入验证码对应的手机号");
// }
return R.ok();
}
@PostMapping("forgetPassword")
@ApiOperation("忘记密码重置密码")
@ApiImplicitParams({
@ApiImplicitParam(name = "mobile", value = "手机号", paramType = "query", dataType = "String", required = true),
@ApiImplicitParam(name = "password", value = "密码", paramType = "query", dataType = "String", required = true),
@ApiImplicitParam(name = "smscode", value = "验证码", paramType = "query", dataType = "String", required = true)
})
public R forgetPassword(HttpServletRequest request, @RequestBody Map<String, Object> map) {
String mobile = (String) map.get("mobile");
String password = (String) map.get("password");
// String smscode = (String) map.get("smscode");
// JSONObject SessionJson = (JSONObject) request.getSession().getAttribute("verifyCode");
// if (SessionJson == null) {
// return R.error("请先发送验证吗");
// }
// String s_msg_id = SessionJson.getString("msg_id");
// String s_mobile = SessionJson.getString("mobile");
// String verifyCode = SessionJson.getString("verifyCode");
//
// if (!verifyCode.equals(smscode)) {
// return R.error("验证码错误");
// }
TenParent user = parentService.findByMobile(mobile);
user.setPassword(DigestUtils.sha256Hex(password));
parentService.saveOrUpdate(user);
return R.ok();
}
@Login
@PostMapping("updatePassword")
@ApiOperation("修改密码")
@ApiImplicitParams({
@ApiImplicitParam(name = "oldPassword", value = "旧密码", paramType = "query", dataType = "String", required = true),
@ApiImplicitParam(name = "newPassword", value = "新密码", paramType = "query", dataType = "String", required = true),
})
//public R updatePassword(@LoginUser UserEntity user, String oldPassword,String newPassword){
public R updatePassword(@LoginUser TenParent user, @RequestBody Map<String, Object> map) {
if(user == null){
return R.error("用户不存在");
}
String oldPassword = (String) map.get("oldPassword");
String newPassword = (String) map.get("newPassword");
if (user.getPassword().equals(DigestUtils.sha256Hex(oldPassword))) {
user.setPassword(DigestUtils.sha256Hex(newPassword));
if (oldPassword.equals(newPassword)) {
return R.error("新密码和旧密码不能相同");
}
parentService.saveOrUpdate(user);
return R.ok();
} else {
return R.error("初始密码不正确");
}
}
/*
@Login
@PostMapping("updateMobile")
@ApiOperation("修改绑定的手机")
public R updateMobile(@LoginUser UserEntity user,HttpServletRequest request,@RequestBody Map<String, Object> map){
String oldMoblie = user.getMobile();
int delFlag = 0;
String mobile = (String)map.get("mobile");
String password = (String)map.get("password");
String smscode = (String)map.get("smscode");
JSONObject SessionJson = (JSONObject)request.getSession().getAttribute("verifyCode");
if(SessionJson==null) {
return R.error("请先发送验证吗");
}
String s_msg_id = SessionJson.getString("msg_id");
String s_mobile = SessionJson.getString("mobile");
String res = JSMSUtil.sendValidSMSCode(s_msg_id,smscode);
if(res.equals("")){
return R.error("无法验证");
}
JSONObject vjson = JSONObject.parseObject(res);
boolean valid = vjson.getBoolean("is_valid");
if(!valid){
String err_msg = JSONObject.parseObject(vjson.getString("error")).getString("message");
return R.error("验证码错误");
}
if(user.getPassword().equals(DigestUtils.sha256Hex(password))) {
//将用户信息存入数据库
user.setMobile(mobile);
user.setUsername(mobile);
user.setPassword(DigestUtils.sha256Hex(password));
user.setCreateTime(new Date());
userService.saveOrUpdate(user);
List<BindEntity> bl = bindService.queryByMoblie(oldMoblie,delFlag);
for(int i = 0;i<bl.size();i++){
BindEntity b = bl.get(i);
BindEntity be = bindService.checkBind(b.getDevImei(),mobile,delFlag);
if(be == null){
b.setUserMobile(mobile);
bindService.saveOrUpdate(b);
}else{
}
}
return R.ok();
}else {
return R.error("密码不正确");
}
}
*/
//---------------------------------aliiyun-------------------
}

View File

@ -0,0 +1,43 @@
/**
* Copyright 2018 http://www.gfirefly.com
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.shapelight.modules.appparent.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 登录表单
*
*/
@ApiModel(value = "登录表单")
@Data
public class LoginForm {
@ApiModelProperty(value = "手机号")
@NotBlank(message="手机号不能为空")
private String mobile;
@ApiModelProperty(value = "密码")
@NotBlank(message="密码不能为空")
private String password;
// @ApiModelProperty(value = "推送ID")
// private String registrationId;
}

View File

@ -0,0 +1,40 @@
/**
* Copyright 2018 http://www.gfirefly.com
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.shapelight.modules.appparent.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 注册表单
*
*/
@Data
@ApiModel(value = "注册表单")
public class RegisterForm {
@ApiModelProperty(value = "手机号")
@NotBlank(message="手机号不能为空")
private String mobile;
@ApiModelProperty(value = "密码")
@NotBlank(message="密码不能为空")
private String password;
}

View File

@ -0,0 +1,40 @@
/**
* Copyright 2018 http://www.gfirefly.com
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.shapelight.modules.appparent.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 注册表单
*/
@Data
@ApiModel(value = "注册表单")
public class RegisterSmsForm {
@ApiModelProperty(value = "手机号")
@NotBlank(message="手机号不能为空")
private String mobile;
@ApiModelProperty(value = "密码")
@NotBlank(message="密码不能为空")
private String password;
}

View File

@ -0,0 +1,62 @@
package net.shapelight.modules.appparent.interceptor;
import io.jsonwebtoken.Claims;
import net.shapelight.common.exception.RRException;
import net.shapelight.modules.appparent.annotation.Login;
import net.shapelight.modules.appparent.utils.JwtUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 权限(Token)验证
*/
@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
@Autowired
private JwtUtils jwtUtils;
public static final String USER_KEY = "userId";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Login annotation;
if(handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(Login.class);
}else{
return true;
}
if(annotation == null){
return true;
}
//获取用户凭证
String token = request.getHeader(jwtUtils.getHeader());
if(StringUtils.isBlank(token)){
token = request.getParameter(jwtUtils.getHeader());
}
//凭证为空
if(StringUtils.isBlank(token)){
throw new RRException(jwtUtils.getHeader() + "不能为空", HttpStatus.UNAUTHORIZED.value());
}
Claims claims = jwtUtils.getClaimByToken(token);
if(claims == null || jwtUtils.isTokenExpired(claims.getExpiration())){
throw new RRException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
}
//设置userId到request里后续根据userId获取用户信息
request.setAttribute(USER_KEY, Long.parseLong(claims.getSubject()));
return true;
}
}

View File

@ -0,0 +1,44 @@
package net.shapelight.modules.appparent.resolver;
import net.shapelight.modules.appparent.annotation.LoginUser;
import net.shapelight.modules.appparent.interceptor.AuthorizationInterceptor;
import net.shapelight.modules.ten.entity.TenParent;
import net.shapelight.modules.ten.service.TenParentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
/**
* @LoginUser注解的方法参数注入当前登录用户
*/
@Component
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Autowired
private TenParentService parentService;
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().isAssignableFrom(TenParent.class) && parameter.hasParameterAnnotation(LoginUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
//获取用户ID
Object object = request.getAttribute(AuthorizationInterceptor.USER_KEY, RequestAttributes.SCOPE_REQUEST);
if(object == null){
return null;
}
//获取用户信息
//UserEntity user = userService.selectById((Long)object);
TenParent user = parentService.getById((Long)object);
return user;
}
}

View File

@ -0,0 +1,143 @@
package net.shapelight.modules.appparent.utils;
/**
* 阿里云短信服务
* 注意需要 签名名称模版CODE 以及 RAM访问控制中的 AccessKeyID AccessKeySecret
*/
public class AliyunSmsUtils {
// protected static final Logger LOG = LoggerFactory.getLogger(JSMSExample.class);
//
// //产品名称:云通信短信API产品,开发者无需替换
// static final String product = "Dysmsapi";
// //产品域名,开发者无需替换
// static final String domain = "dysmsapi.aliyuncs.com";
// // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
// static final String accessKeyId = "LTAI7uAVsj2pgLJA"; // TODO 修改成自己的
// static final String accessKeySecret = "NjPbUUCruxZIrhDeYBlMi62JKN94pf"; // TODO 修改成自己的
// static final String signName = "智慧挪车";
// static final String templateCode = "SMS_162732858";
//
// public static String sendSms(String telephone, String code) throws ClientException {
// //可自助调整超时时间
// System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
// System.setProperty("sun.net.client.defaultReadTimeout", "10000");
// //初始化acsClient,暂不支持region化
// IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
// DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
// IAcsClient acsClient = new DefaultAcsClient(profile);
// //组装请求对象-具体描述见控制台-文档部分内容
// SendSmsRequest request = new SendSmsRequest();
// //必填:待发送手机号
// request.setPhoneNumbers(telephone);
// //必填:短信签名-可在短信控制台中找到
// request.setSignName(signName);
// //必填:短信模板-可在短信控制台中找到
// request.setTemplateCode(templateCode);
// //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}",此处的值为
//// request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");
// request.setTemplateParam("{\"code\":\"" + code + "\"}");
// //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
// //request.setSmsUpExtendCode("90997");
// //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
// //request.setOutId("90999");
// //hint 此处可能会抛出异常注意catch
// SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
// if(sendSmsResponse.getCode()!= null && sendSmsResponse.getCode().equals("OK")){
// //System.out.println("短信发送成功!");
// return "OK";
// }else {
// //System.out.println("短信发送失败!");
// LOG.error("SMS-Error:"+"Code=" + sendSmsResponse.getCode()+" Message=" + sendSmsResponse.getMessage());
// return sendSmsResponse.getMessage();
// }
// }
// public static void main(String[] args) throws ClientException, InterruptedException {
//
// String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);
//
// System.out.println("发送的验证码为:"+verifyCode);
//
// //发短信
// String response =sendSms("158",verifyCode); // TODO 填写你需要测试的手机号码
// System.out.println("短信接口返回的数据----------------"+response);
///*
// SendSmsResponse response =sendSms("xxx",verifyCode); // TODO 填写你需要测试的手机号码
//
// System.out.println("短信接口返回的数据----------------");
//
// System.out.println("Code=" + response.getCode());
//
// System.out.println("Message=" + response.getMessage());
//
// System.out.println("RequestId=" + response.getRequestId());
//
// System.out.println("BizId=" + response.getBizId());
//*/
//
//
// /* 不删 留着 以后可能有用
//
// System.out.println(" ============================================== ");
//
// Thread.sleep(3000L);
//
// //查明细
//
// if(response.getCode() != null && response.getCode().equals("OK")) {
//
// QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId());
//
// System.out.println("短信明细查询接口返回数据----------------");
//
// System.out.println("Code=" + querySendDetailsResponse.getCode());
//
// System.out.println("Message=" + querySendDetailsResponse.getMessage());
//
// int i = 0;
//
// for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs())
//
// {
//
// System.out.println("SmsSendDetailDTO["+i+"]:");
//
// System.out.println("Content=" + smsSendDetailDTO.getContent());
//
// System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());
//
// System.out.println("OutId=" + smsSendDetailDTO.getOutId());
//
// System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());
//
// System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());
//
// System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());
//
// System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());
//
// System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());
//
// }
//
// System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());
//
// System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());
//
// }*/
//
//
//
// }
}

View File

@ -0,0 +1,85 @@
package net.shapelight.modules.appparent.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* jwt工具类
*/
@ConfigurationProperties(prefix = "shapelight.jwt")
@Component
public class JwtUtils {
private Logger logger = LoggerFactory.getLogger(getClass());
private String secret;
private long expire;
private String header;
/**
* 生成jwt token
*/
public String generateToken(long userId) {
Date nowDate = new Date();
//过期时间
Date expireDate = new Date(nowDate.getTime() + expire * 1000);
return Jwts.builder()
.setHeaderParam("typ", "JWT")
.setSubject(userId+"")
.setIssuedAt(nowDate)
.setExpiration(expireDate)
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
public Claims getClaimByToken(String token) {
try {
return Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
}catch (Exception e){
logger.debug("validate is token error ", e);
return null;
}
}
/**
* token是否过期
* @return true过期
*/
public boolean isTokenExpired(Date expiration) {
return expiration.before(new Date());
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public long getExpire() {
return expire;
}
public void setExpire(long expire) {
this.expire = expire;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
}

View File

@ -0,0 +1,50 @@
package net.shapelight.modules.appparent.utils;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import java.net.URLEncoder;
import static net.shapelight.common.utils.RestTemplateUtils.postHttp;
/**
*/
@Slf4j
public class MonyunSmsUtils {
public static final String apikey = "9fa361745374a7acd777e923fbe564aa";
public static final String URL = "http://api01.monyun.cn:7901/sms/v2/std/single_send";
/**
*
* @param mobile
* @param code
* @return 0 成功 其他失败
*/
public static int sendSms(String mobile, String code) {
JSONObject jsobj1 = new JSONObject();
jsobj1.put("apikey", apikey);
jsobj1.put("mobile", mobile);
String con = "您的验证码是"+code+"在3分钟内输入有效。如非本人操作请忽略此短信。";
try {
jsobj1.put("content",URLEncoder.encode(con, "GBK"));
}catch (Exception e){
e.printStackTrace();
}
String res = postHttp(URL,jsobj1);
JSONObject resObj = JSONObject.parseObject(res);
int r = -1;
if(resObj.get("result")!=null){
r = (Integer)resObj.get("result");
}
log.info(res);
return r;
}
public static void main(String args[]){
int res = sendSms("158290","123456");
log.debug("result:"+res);
}
}

View File

@ -160,7 +160,7 @@ public class TenBuildController extends AbstractController {
gradeCode String[0-50] 年级编码 年级编码传递请看附录A
必传*/
Map<String,Object> params = new HashMap<>();
/* Map<String,Object> params = new HashMap<>();
params.put("operation","editGradeData");
params.put("accountNumber",accountNumber);
params.put("passKey", KeysEntity.passKey);
@ -176,7 +176,7 @@ public class TenBuildController extends AbstractController {
}
if(jsonObject.getJSONArray("errInfo")!=null &&!jsonObject.getJSONArray("errInfo").isEmpty()) {
return R.error(tenBuild.getName() + "同步失败");
}
}*/
long id = new SnowflakeIdWorker().nextId();
tenBuild.setBuildId(id);
tenBuild.setTenantId(getUser().getTenantId());
@ -198,7 +198,7 @@ public class TenBuildController extends AbstractController {
tenBuild.setTenantId(getUser().getTenantId());
tenBuild.setLastUpdateBy(getUser().getUsername());
tenBuild.setLastUpdateTime(new Date());
Map<String,Object> params = new HashMap<>();
/* Map<String,Object> params = new HashMap<>();
params.put("operation","editGradeData");
params.put("accountNumber",accountNumber);
params.put("passKey", KeysEntity.passKey);
@ -214,7 +214,7 @@ public class TenBuildController extends AbstractController {
}
if(jsonObject.getJSONArray("errInfo")!=null &&!jsonObject.getJSONArray("errInfo").isEmpty()) {
return R.error("修改年级失败");
}
}*/
tenBuildService.updateById(tenBuild);
return R.ok();
@ -233,7 +233,6 @@ public class TenBuildController extends AbstractController {
})
@Transactional
public R delete(@RequestBody List<Map<String, String>> params){
JSONArray jsonArray = new JSONArray();
for(Map<String,String> param: params){
Long buildId = Long.parseLong(param.get("buildId"));
Long cellId = Long.parseLong(param.get("cellId"));
@ -241,12 +240,8 @@ public class TenBuildController extends AbstractController {
if (pCount>0) {
return R.error("当前年级有"+pCount+"个学生,请先删除学生");
}
TenBuildEntity tenBuild = tenBuildService.getById(buildId,cellId);
Map<String, Object> grade = new HashMap<>();
grade.put("gradeCode",tenBuild.getNumber());
jsonArray.add(grade);
}
Map<String,Object> gradeParams = new HashMap<>();
/* Map<String,Object> gradeParams = new HashMap<>();
gradeParams.put("operation","delGradeData");
gradeParams.put("accountNumber",accountNumber);
gradeParams.put("passKey", KeysEntity.passKey);
@ -260,7 +255,7 @@ public class TenBuildController extends AbstractController {
return R.error(jsonObject.getJSONArray("errInfo") + "删除失败");
}
}*/
tenBuildService.removeByIdList(params);
return R.ok();
}

View File

@ -70,35 +70,35 @@ public class TenParentController {
@PostMapping("/delete")
@Transactional
public R deleteParent(@RequestBody List<Map<String, String>> params) throws Exception {
Map<String,Object> opParams = new HashMap<>();
/*Map<String,Object> opParams = new HashMap<>();
opParams.put("operation","delUserContactData");
opParams.put("accountNumber",globalValue.accountNumber);
opParams.put("passKey", KeysEntity.passKey);
opParams.put("empowerText",KeysEntity.empowerText);
List<Map<String,Object>> dataInfo = new ArrayList<>();
Map<String,Object> info = new HashMap<>();
Map<String,Object> info = new HashMap<>();*/
params.forEach(item -> {
TenParent tenParent = tenParentService.getById(item.get("id"));
/* TenParent tenParent = tenParentService.getById(item.get("id"));
List<TenRelation> relations = relationService.list(new LambdaQueryWrapper<TenRelation>().eq(TenRelation::getParentId,tenParent.getUserId()));
List<Long> ids = relations.stream().map(TenRelation::getId).collect(Collectors.toList());
ids.stream().forEach(id -> {
info.put("objectUuid",id.toString());
});
dataInfo.add(info);
dataInfo.add(info);*/
tenParentService.removeById(item.get("id"));
appUserService.removeById(tenParent.getUserId());
/*appUserService.removeById(tenParent.getUserId());
appUserScopeService.remove(new LambdaQueryWrapper<AppUserScopeEntity>()
.eq(AppUserScopeEntity::getUserId,tenParent.getUserId()));
relationService.remove(new LambdaQueryWrapper<TenRelation>().eq(TenRelation::getParentId,tenParent.getUserId()));
.eq(AppUserScopeEntity::getUserId,tenParent.getUserId()));*/
relationService.remove(new LambdaQueryWrapper<TenRelation>().eq(TenRelation::getParentId,item.get("id")));
});
opParams.put("dataInfo",dataInfo);
/*opParams.put("dataInfo",dataInfo);
JSONObject jsonObject = opFeignClient.submitData(opParams);
if(!jsonObject.getString("shrgStatus").equals("S")) {
return R.error("同步联系人失败");
}
if(!jsonObject.getJSONArray("errInfo").isEmpty()) {
return R.error("同步联系人失败");
}
}*/
return R.ok();
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
@ -40,4 +41,18 @@ public class TenParent implements Serializable {
private Integer registerType;
private Long userId;
private String mobile;
private String password;
private Date createTime;
private Date loginTime;
private String loginIp;
private Long cellId;
private String userName;
}

View File

@ -2,6 +2,7 @@ package net.shapelight.modules.ten.service;
import com.baomidou.mybatisplus.extension.service.IService;
import net.shapelight.common.utils.PageUtils;
import net.shapelight.modules.appparent.form.LoginForm;
import net.shapelight.modules.ten.entity.TenParent;
import java.util.Map;
@ -15,4 +16,8 @@ public interface TenParentService extends IService<TenParent> {
PageUtils getParentList(Map<String,Object> params);
TenParent login(LoginForm form);
TenParent findByMobile(String mobile);
}

View File

@ -1,16 +1,23 @@
package net.shapelight.modules.ten.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.shapelight.common.exception.RRException;
import net.shapelight.common.utils.PageUtils;
import net.shapelight.common.validator.Assert;
import net.shapelight.modules.appparent.entity.AppUserEntity;
import net.shapelight.modules.appparent.form.LoginForm;
import net.shapelight.modules.ten.dao.TenParentMapper;
import net.shapelight.modules.ten.entity.TenParent;
import net.shapelight.modules.ten.entity.TenRelation;
import net.shapelight.modules.ten.service.TenParentService;
import net.shapelight.modules.ten.service.TenRelationService;
import net.shapelight.modules.vo.ParentVo;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -43,6 +50,25 @@ public class TenParentServiceImpl extends ServiceImpl<TenParentMapper, TenParent
});
return new PageUtils(page);
}
@Override
public TenParent login(LoginForm form) {
TenParent parent = findByMobile(form.getMobile());
Assert.isNull(parent, "用户不存在");
// 密码错误
if (!parent.getPassword().equals(DigestUtils.sha256Hex(form.getPassword()))) {
throw new RRException("密码错误");
}
return parent;
}
@Override
public TenParent findByMobile(String mobile) {
QueryWrapper<TenParent> queryWrapper = new QueryWrapper<TenParent>();
queryWrapper.eq("mobile", mobile);
//return baseMapper.selectOne(userEntity);
return baseMapper.selectOne(queryWrapper);
}
}