ifish/src/main/java/com/ifish/serviceImpl/UserServiceImpl.java

1175 lines
41 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ifish.serviceImpl;
import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import com.alibaba.fastjson.JSON;
import com.ifish.entity.event.QueueEventBody;
import com.ifish.entity.event.QueueEventEntity;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSONObject;
import com.ifish.apiVersion.ApiVersion;
import com.ifish.dao.CameraDao;
import com.ifish.dao.CameraUserDao;
import com.ifish.dao.DeviceCameraDao;
import com.ifish.dao.DeviceDao;
import com.ifish.dao.DeviceUserDao;
import com.ifish.dao.GoldControlDao;
import com.ifish.dao.GoldGetRecordDao;
import com.ifish.dao.InformationDao;
import com.ifish.dao.PushListDao;
import com.ifish.dao.ShopsInfoDao;
import com.ifish.dao.UserAssetDao;
import com.ifish.dao.UserDao;
import com.ifish.dto.DeviceDto;
import com.ifish.dto.DeviceInfoDto;
import com.ifish.dto.GoldTaskDto;
import com.ifish.dto.GwellParamDto;
import com.ifish.dto.JsonResult;
import com.ifish.dto.NeteaseParamDto;
import com.ifish.dto.UserAssetDto;
import com.ifish.dto.UserInfoDto;
import com.ifish.dto.VenderDto;
import com.ifish.entity.Camera;
import com.ifish.entity.CameraUser;
import com.ifish.entity.Device;
import com.ifish.entity.DeviceCamera;
import com.ifish.entity.DeviceCameraId;
import com.ifish.entity.DeviceUser;
import com.ifish.entity.DeviceUserId;
import com.ifish.entity.GoldControl;
import com.ifish.entity.GoldGetRecord;
import com.ifish.entity.GoldTask;
import com.ifish.entity.GradeTask;
import com.ifish.entity.HardwareType;
import com.ifish.entity.PushList;
import com.ifish.entity.ShopsInfo;
import com.ifish.entity.User;
import com.ifish.entity.UserAsset;
import com.ifish.entity.VenderList;
import com.ifish.enums.AddTypeEnum;
import com.ifish.enums.BooleanEnum;
import com.ifish.enums.GoldGetTypeEnum;
import com.ifish.enums.GradeGetTypeEnum;
import com.ifish.enums.GwellEnum;
import com.ifish.enums.NeteaseEnum;
import com.ifish.enums.PushTypeEnum;
import com.ifish.enums.ResultEnum;
import com.ifish.enums.SendTypeEnum;
import com.ifish.enums.SmsSignEnum;
import com.ifish.enums.SmsTemplateEnum;
import com.ifish.enums.SubDirectoryEnum;
import com.ifish.enums.UserTypeEnum;
import com.ifish.exception.IfishException;
import com.ifish.gwell.GwellApi;
import com.ifish.jpush.SmsNumSend;
import com.ifish.netease.NeteaseIM;
import com.ifish.service.CacheService;
import com.ifish.service.GoldService;
import com.ifish.service.GradeService;
import com.ifish.service.UserService;
import com.ifish.util.IfishFilePath;
import com.ifish.util.IfishUtil;
import com.ifish.validator.LoginParam;
import com.ifish.validator.RegisterParam;
import javax.jms.Destination;
import javax.jms.Session;
/**
* @ClassName: UserServiceImpl
* @Description: TODO
* @author ggw
*
*/
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private DeviceDao deviceDao;
@Autowired
private CameraDao cameraDao;
@Autowired
private NeteaseIM neteaseIM;
@Autowired
private SmsNumSend smsNumSend;
@Autowired
private PushListDao pushListDao;
@Autowired
private ShopsInfoDao shopsInfoDao;
@Autowired
private UserAssetDao userAssetDao;
@Autowired
private DeviceUserDao deviceUserDao;
@Autowired
private CameraUserDao cameraUserDao;
@Autowired
private GoldControlDao goldControlDao;
@Autowired
private InformationDao informationDao;
@Autowired
private DeviceCameraDao deviceCameraDao;
@Autowired
private GoldGetRecordDao goldGetRecordDao;
@Autowired
private GoldService goldService;
@Autowired
private CacheService cacheService;
@Autowired
private GradeService gradeService;
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination ifish7PushQueueDestination;
/**
* 推送Push消息队列
* @param pushList 内容
*/
private void sendPushQueueMessage(final PushList pushList) {
JSONObject data = JSON.parseObject(JSON.toJSONString(pushList));
QueueEventEntity eventEntity = new QueueEventEntity();
eventEntity.setEventName("com.ifish7.mq.queues.event.PushNotifcationEvent");
eventEntity.setEventProcess("deviceNotifcationPlus");
QueueEventBody eventBody = new QueueEventBody("com.ifish7.mq.business.user.entity.TblPushList",data);
eventEntity.setEventBody(eventBody);
String json = JSONObject.toJSONString(eventEntity);
jmsTemplate.send(ifish7PushQueueDestination,(Session session) -> session.createTextMessage(json));
}
@Override
public JsonResult<?> getVerificateCode(String phoneNumber, String sendType) {
//验证参数
if(StringUtils.isNotBlank(phoneNumber) && StringUtils.isNotBlank(sendType)){
User user = userDao.findUniqueByProperty(Restrictions.eq("phoneNumber",phoneNumber));
//已注册
if(user!=null){
//找回密码操作
if(sendType.equals(SendTypeEnum.findpwd.getKey())){
//发送短信
return sendMessage(phoneNumber,SmsSignEnum.sign5.getValue(),SmsTemplateEnum.SMS_720021.getKey());
}
//注册操作
else if(sendType.equals(SendTypeEnum.register.getKey())){
//手机注册过,发送错误码
return new JsonResult<String>(ResultEnum.warn201.getKey());
}
}
//未注册
else{
//注册操作
if(sendType.equals(SendTypeEnum.register.getKey())){
//发送短信
return sendMessage(phoneNumber,SmsSignEnum.sign4.getValue(),SmsTemplateEnum.SMS_720018.getKey());
}
}
}
return new JsonResult<String>(ResultEnum.fail101.getKey());
}
@Override
public JsonResult<?> login(LoginParam loginParam) {
//手机号
String phoneNumber = loginParam.getPhoneNumber();
//用户是否存在
User user = userDao.findUniqueByProperty(Restrictions.eq("phoneNumber",phoneNumber));
if(user!=null){
//密码是否正确
if(user.getUserPassword().equals(loginParam.getUserPassword())){
//技威参数
GwellParamDto gwellParam = getGwellInfo(user.getIsRegisterGwell(), phoneNumber);
if(gwellParam!=null){
user.setIsRegisterGwell(gwellParam.getIsRegisterGwell());
user.setP2PVerifyCode1(gwellParam.getP2PVerifyCode1());
user.setP2PVerifyCode2(gwellParam.getP2PVerifyCode2());
user.setGwellUserID(gwellParam.getUserID());
}
StringBuffer msg = new StringBuffer();
msg.append("感谢您使用爱鱼奇连接智能设备请查看下方说明书内含操作视频http://u.eqxiu.com/s/KmmVl87l\n");
msg.append("摄像头售后18667812003\n睿芯插排售后15757401229\n绚多插排售后18857689069\n松诺插排售后13392205468");
Integer userId = user.getUserId();
//如果当前设备用户未注册
if (user.getIsRegisterNetease().equals(BooleanEnum.NO.getKey())) {
PushList pushList = new PushList();
pushList.setUserId(userId);
pushList.setDeviceId(0);
pushList.setPhoneType("ALL");
pushList.setShowName("");
pushList.setPushType(PushTypeEnum.qu_reply.getKey());
pushList.setPushTitle("系统通知");
pushList.setPushContext(msg.toString());
sendPushQueueMessage(pushList);
//更新用户注册信息
user.setIsRegisterNetease(BooleanEnum.YES.getKey());
userDao.update(user);
}
/**
* 更新登陆参数
*/
userDao.executeLoginUpdate(userId,loginParam.getLoginType());
//设备信息
DeviceInfoDto deviceInfo = getDeviceInfo(user.getUserId());
/**
* 登录返回信息
*/
JSONObject jsonObject = new JSONObject();
//用户信息
jsonObject.put("user", getUserInfo(user,gwellParam));
//版本号
if(ApiVersion.version1_0.equals(loginParam.getVersion())){
//用户资产
jsonObject.put("userAsset", getUserAssetInfo(userId));
//金币任务
jsonObject.put("goldTasks", getGoldTaskList(userId));
}
//资讯信息
jsonObject.put("information", cacheService.getInformation());
//设备信息
jsonObject.put("device", deviceInfo.getDeviceList());
//摄像头信息
jsonObject.put("camera", getCameraInfo(userId));
//设备关联摄像头信息
jsonObject.put("deviceCamera", getDeviceCamera(deviceInfo.getDeviceIds()));
//商家信息(自己是商家)
jsonObject.put("shopsInfo", getShopsInfo(userId,user.getUserImg()));
//看护商家信息
jsonObject.put("shopsInfo2", getShopsInfo(user.getShopsUserId(),null));
return new JsonResult<JSONObject>(ResultEnum.success.getKey(), jsonObject);
}
else{
//密码不正确
return new JsonResult<String>(ResultEnum.warn204.getKey());
}
}
else{
//用户不存在
return new JsonResult<String>(ResultEnum.warn202.getKey());
}
}
/**
* 优化后登陆验证
*/
@Override
public JsonResult<?> loginValidate(LoginParam loginParam){
//手机号
String phoneNumber = loginParam.getPhoneNumber();
//用户信息
User user = userDao.findUniqueByProperty(Restrictions.eq("phoneNumber",phoneNumber));
//用户不存在
if(user==null){
throw new IfishException(ResultEnum.warn202);
}
//密码不正确
if(!loginParam.getUserPassword().equals(user.getUserPassword())){
throw new IfishException(ResultEnum.warn204);
}
//技威参数
GwellParamDto gwellParam = getGwellInfo(user.getIsRegisterGwell(), phoneNumber);
if(gwellParam!=null){
user.setIsRegisterGwell(gwellParam.getIsRegisterGwell());
user.setP2PVerifyCode1(gwellParam.getP2PVerifyCode1());
user.setP2PVerifyCode2(gwellParam.getP2PVerifyCode2());
user.setGwellUserID(gwellParam.getUserID());
}
//云信参数
Integer userId = user.getUserId();
StringBuffer msg = new StringBuffer();
msg.append("感谢您使用爱鱼奇连接智能设备请查看下方说明书内含操作视频http://u.eqxiu.com/s/KmmVl87l\n");
msg.append("摄像头售后18667812003\n睿芯插排售后15757401229\n绚多插排售后18857689069\n松诺插排售后13392205468");
//如果当前设备用户未注册
if (user.getIsRegisterNetease().equals(BooleanEnum.NO.getKey())) {
PushList pushList = new PushList();
pushList.setUserId(userId);
pushList.setDeviceId(0);
pushList.setPhoneType("ALL");
pushList.setShowName("");
pushList.setPushType(PushTypeEnum.qu_reply.getKey());
pushList.setPushTitle("系统通知");
pushList.setPushContext(msg.toString());
sendPushQueueMessage(pushList);
//更新用户注册信息
user.setIsRegisterNetease(BooleanEnum.YES.getKey());
userDao.update(user);
}
//更新登陆参数
userDao.executeLoginUpdate(userId,loginParam.getLoginType());
//用户基本信息
UserInfoDto userInfoDto = getUserInfoDto(user,gwellParam);
//用户资产信息
UserAssetDto userAssetDto = getUserAssetInfo(userId);
//返回json信息
JSONObject json = new JSONObject();
json.put("userInfo", userInfoDto);
json.put("userAsset", userAssetDto);
return new JsonResult<JSONObject>(ResultEnum.success.getKey(), json);
}
/**
* 更多用户数据信息
*/
@Override
public JsonResult<?> moreUserData(Integer userId){
User user = userDao.get(userId);
//用户不存在
if(user==null){
throw new IfishException(ResultEnum.warn202);
}
/**
* 登录返回信息
*/
JSONObject jsonObject = new JSONObject();
//设备信息
DeviceInfoDto deviceInfo = getSimpleDeviceInfo(userId);
//金币任务
jsonObject.put("goldTasks", getGoldTaskList(userId));
//资讯信息
List<JSONObject> information = cacheService.getInformation();
JSONObject infoJson = new JSONObject();
if(information.size()>0){
JSONObject json = information.get(0);
Integer infoId = json.getInteger("infoId");
String title = json.getString("title");
//资讯只返回id和title
infoJson.put("infoId", infoId);
infoJson.put("title", title);
jsonObject.put("information", infoJson);
}
else{
jsonObject.put("information", infoJson);
}
//设备信息
jsonObject.put("device",deviceInfo.getDeviceList());
//摄像头信息
jsonObject.put("camera", getCameraInfo(userId));
//设备关联摄像头信息
jsonObject.put("deviceCamera", getDeviceCamera(deviceInfo.getDeviceIds()));
//商家信息(自己是商家)
jsonObject.put("shopsInfo", getShopsInfo(userId,user.getUserImg()));
//看护商家信息
jsonObject.put("shopsInfo2", getShopsInfo(user.getShopsUserId(),null));
return new JsonResult<JSONObject>(ResultEnum.success.getKey(), jsonObject);
}
/**
* 绑定设备
*/
@Override
public JsonResult<?> bindDevice(Integer userId,String macAddress){
//设备信息
Device device = deviceDao.findUniqueByProperty(Restrictions.eq("macAddress", macAddress));
if(device==null){
throw new IfishException(ResultEnum.error402);
}
//用户信息
User user = userDao.get(userId);
if(user==null){
throw new IfishException(ResultEnum.error402);
}
//首次激活
if(device.getFirstActivate()==null){
device.setFirstActivate(new Date());
}
//设备ID
Integer deviceId = device.getDeviceId();
//是否已关联设备
DeviceUserId priId = new DeviceUserId(userId, deviceId);
DeviceUser deviceUser = deviceUserDao.get(priId);
if(deviceUser==null){
//已关联设备的其他用户
List<DeviceUser> deviceUserList = deviceUserDao.findByProperty(Restrictions.eq("priId.deviceId", deviceId));
//解除关联关系并发送推送
deleteDeviceAndPushMsg(deviceUserList, deviceId);
//新增关联关系
if (device.getHardwareType() != null && device.getHardwareType().equals("3a")) {
deviceUser = new DeviceUser(priId, BooleanEnum.YES.getKey(), "加热器"+(int)(Math.random()*9000+1000));
} else {
deviceUser = new DeviceUser(priId, BooleanEnum.YES.getKey(), "鱼缸"+(int)(Math.random()*9000+1000));
}
//关联设备
deviceUserDao.save(deviceUser);
}
else{
//不是主控制权
if(!BooleanEnum.YES.getKey().equals(deviceUser.getIsMaster())){
//已关联设备的其他用户
List<DeviceUser> deviceUserList = deviceUserDao.findByProperty(Restrictions.eq("priId.deviceId", deviceId),Restrictions.ne("priId.userId", userId));
//解除关联关系并发送推送
deleteDeviceAndPushMsg(deviceUserList, deviceId);
//设为主控并更新时间
deviceUser.setIsMaster(BooleanEnum.YES.getKey());
deviceUser.setUpdateTime(new Date());
}
}
return new JsonResult<DeviceDto>(ResultEnum.success.getKey(), getDeviceDto(deviceUser, device));
}
/**
* 扫一扫分享设备
*/
@Override
public JsonResult<?> shareDevice(Integer userId,Integer deviceId){
//设备信息
Device device = deviceDao.get(deviceId);
if(device==null){
throw new IfishException(ResultEnum.error402);
}
//用户信息
User user = userDao.get(userId);
if(user==null){
throw new IfishException(ResultEnum.error402);
}
//是否已关联设备
DeviceUserId priId = new DeviceUserId(userId, deviceId);
DeviceUser deviceUser = deviceUserDao.get(priId);
if(deviceUser==null){
//新增关联关系
if (device.getHardwareType() != null && device.getHardwareType().equals("3a")) {
deviceUser = new DeviceUser(priId, BooleanEnum.YES.getKey(), "加热器"+(int)(Math.random()*9000+1000));
} else {
deviceUser = new DeviceUser(priId, BooleanEnum.YES.getKey(), "鱼缸"+(int)(Math.random()*9000+1000));
}
deviceUserDao.save(deviceUser);
}
return new JsonResult<DeviceDto>(ResultEnum.success.getKey(), getDeviceDto(deviceUser, device));
}
@Override
public JsonResult<?> register(RegisterParam registerParam) {
String phoneNumber = registerParam.getPhoneNumber();
User user = userDao.findUniqueByProperty(Restrictions.eq("phoneNumber", phoneNumber));
if(user!=null){
return new JsonResult<String>(ResultEnum.warn201.getKey());
}
else{
user = new User();
user.setPhoneNumber(phoneNumber);
user.setUserPassword(registerParam.getUserPassword());
user.setPhoneType(registerParam.getPhoneType());
user.setLoginType(registerParam.getPhoneType());
user.setIsRegisterGwell(BooleanEnum.NO.getKey());
user.setIsRegisterNetease(BooleanEnum.NO.getKey());
user.setNeteaseToken("");
user.setUserType(UserTypeEnum.userType0.getKey());
user.setAddress(registerParam.getAddress());
user.setLongitude(registerParam.getLongitude());
user.setLatitude(registerParam.getLatitude());
//随机给一个默认头像
String userImg = "default/"+(new Random().nextInt(7)+1)+".png";
user.setUserImg(userImg);
//随机生成用户名
String nickName = "鱼友"+IfishUtil.getCharAndNumr(5);
user.setNickName(nickName);
user.setCreateTime(new Date());
userDao.save(user);
//首次注册赠送10金币
BigDecimal gold = new BigDecimal(10);
UserAsset userAsset = new UserAsset(user.getUserId(),gold);
userAssetDao.save(userAsset);
//获取记录
GoldGetRecord getRecord = new GoldGetRecord(user.getUserId(), GoldGetTypeEnum.registerGive.getKey(), gold, GoldGetTypeEnum.registerGive.getValue());
goldGetRecordDao.save(getRecord);
return new JsonResult<String>(ResultEnum.success.getKey());
}
}
@Override
public JsonResult<?> updateInfo(User user){
//用户ID
Integer userId = user.getUserId();
if(userId!=null){
//查找用户信息
User curUser = userDao.get(userId);
if(curUser!=null){
//是否需要更新
boolean bln = false;
//昵称
String nickName = user.getNickName();
if(StringUtils.isNotBlank(nickName)){
//敏感词过滤
if(nickName.contains("爱鱼奇") || nickName.contains("官方")){
return new JsonResult<String>(ResultEnum.warn213.getKey());
}
else{
curUser.setNickName(nickName);
bln=true;
}
}
//性别
String userSex = user.getUserSex();
if(StringUtils.isNotBlank(userSex)){
curUser.setUserSex(userSex);
bln=true;
}
//签名
String signature = user.getSignature();
if(StringUtils.isNotBlank(signature)){
curUser.setSignature(signature);
bln=true;
}
//有参数变更
if(bln){
//更新用户信息
curUser.setUpdateTime(new Date());
userDao.update(curUser);
//更新云信
updateIMUserInfo(userId.toString(), curUser.getNickName(), curUser.getUserImg());
}
return new JsonResult<String>(ResultEnum.success.getKey());
}
else{
return new JsonResult<String>(ResultEnum.warn211.getKey());
}
}
else{
return new JsonResult<String>(ResultEnum.fail101.getKey());
}
}
@Override
public JsonResult<?> uploadUserImg(Integer userId,MultipartFile fileUpload){
//查找用户信息
User user = userDao.get(userId);
if(user!=null){
if(fileUpload!=null && !fileUpload.isEmpty()){
//上传的图片不能大于1M
if(fileUpload.getSize()>1048576){
return new JsonResult<String>(ResultEnum.warn206.getKey());
}
else{
//验证图片格式
String extEndName = IfishFilePath.checkImgName(fileUpload.getOriginalFilename());
//验证图片格式
if(extEndName!=null) {
//图片名称
String picName = userId+"_icon.png";
try {
File file = new File(IfishFilePath.path_img, picName);
//不存在则创建
if(!file.exists()){
file.mkdirs();
}
//保存
fileUpload.transferTo(file);
} catch (Exception e) {
throw new RuntimeException(e);
}
//更新数据库
user.setUserImg(picName);
user.setUpdateTime(new Date());
user = userDao.update(user);
//更新云信
updateIMUserInfo(userId.toString(), user.getNickName(), user.getUserImg());
//返回数据
JSONObject json = new JSONObject();
json.put("userImg", picName);
return new JsonResult<JSONObject>(ResultEnum.success.getKey(),json);
}
else{
return new JsonResult<String>(ResultEnum.warn205.getKey());
}
}
}
else{
return new JsonResult<String>(ResultEnum.fail101.getKey());
}
}
else{
return new JsonResult<String>(ResultEnum.warn211.getKey());
}
}
/**
* 发送手机短信
* @param phoneNumber
* @param smsSign
* @param smsTemplate
* @return
*/
public JsonResult<?> sendMessage(String phoneNumber,String smsSign,String smsTemplate) {
//4位随机数
Integer code = (int)(Math.random()*9000+1000);
boolean bln = smsNumSend.sendSmsNum(phoneNumber, code.toString(),smsSign,smsTemplate);
//发送验证码
if(bln){
return new JsonResult<String>(ResultEnum.success.getKey(),code.toString());
}
else{
return new JsonResult<String>(ResultEnum.fail101.getKey());
}
}
/**
* 注册云信
* @param userId
* @param nickName
* @param userImg
* @return
*/
public Map<String,String> registerIM(String userId,String nickName,String userImg){
return neteaseIM.createAccid(userId, nickName, IfishFilePath.getPath(SubDirectoryEnum.headImage,userImg), "");
}
/**
* 更新云信信息
* @param userId
* @param nickName
* @param userImg
* @return
*/
public Map<String,String> updateIMUserInfo(String userId,String nickName,String userImg){
return neteaseIM.updateUinfo(userId, nickName, IfishFilePath.getPath(SubDirectoryEnum.headImage,userImg),"");
}
/**
* 获取云信token
* @param userId
* @return
*/
public Map<String,String> refreshToken(String userId){
return neteaseIM.refreshToken(userId);
}
/**
* 第一次注册云信发送一条系统消息
* @param to
*/
@Deprecated
public void sendMsgByIM(String to){
//发送云信消息
User user = userDao.findUniqueByProperty(Restrictions.eq("phoneNumber", IfishFilePath.netease_phone));
if(user!=null){
String from = user.getUserId().toString();
neteaseIM.sendMsg(from, to, "感谢您使用爱鱼奇连接智能设备请查看下方说明书内含操作视频http://u.eqxiu.com/s/KmmVl87l \n摄像头售后18667812003\n睿芯插排售后15757401229\n绚多插排售后17301857903\n松诺插排售后13392205468","");
}
}
/**
* 封装设备信息
* @param userId
* @return
*/
@Deprecated
public DeviceInfoDto getDeviceInfo(Integer userId){
//设备list
List<JSONObject> deviceList = new ArrayList<JSONObject>();
//设备ID
List<Integer> deviceIds = new ArrayList<Integer>();
//获取用户拥有设备
List<DeviceUser> deviceUserList = deviceUserDao.findByProperty(Restrictions.eq("priId.userId", userId));
for(DeviceUser deviceUser:deviceUserList){
//查询设备信息
Integer deviceId = deviceUser.getPriId().getDeviceId();
Device device = deviceDao.get(deviceId);
//json
JSONObject json = new JSONObject();
//封装设备返回信息
deviceIds.add(deviceId);
deviceList.add(json);
//json存储设备信息
json.put("userId", userId);
json.put("deviceId", deviceId);
json.put("isMaster", deviceUser.getIsMaster());
json.put("showName", deviceUser.getShowName());
json.put("macAddress", device.getMacAddress());
json.put("isBlacklist", device.getIsBlacklist());
//控制方案
String type = device.getHardwareType();
//鱼缸厂code
String brandCode = device.getBrandCode();
if(type!=null){
HardwareType hardwareType = cacheService.findHardwareTypeById(type);
if(hardwareType!=null){
//设备类型
json.put("type", type);
//有无工作模式
json.put("isWorkModel", hardwareType.getIsWorkModel());
//控制信息
json.put("controlAmount", hardwareType.getControlAmount());
json.put("timerAmount", hardwareType.getTimerAmount());
//背光/柜灯
json.put("isLightness", hardwareType.getIsLightness());
json.put("isSarkLamp", hardwareType.getIsSarkLamp());
//是否显示预警推送
if(brandCode!=null && brandCode.equals("YUEM") && device.getCreateTime().before(IfishUtil.StrToDate("2016-04-26"))){
json.put("isPushWendu", BooleanEnum.NO.getKey());
}
else{
json.put("isPushWendu", BooleanEnum.YES.getKey());
}
//换水提醒
json.put("todayRemind", device.getTodayRemind());
json.put("waterRemind", device.getWaterRemind());
json.put("remindDate", device.getRemindDate()!=null?IfishUtil.format1(device.getRemindDate()):"");
json.put("remindCycle", device.getRemindCycle()!=null?device.getRemindCycle():"");
//自定义图标信息
String isCustomIcon = hardwareType.getIsCustomIcon();
json.put("isCustomIcon", isCustomIcon);
if(isCustomIcon.equals(BooleanEnum.YES.getKey())){
json.put("customIconName", deviceUser.getCustomIconName());
json.put("customShowName", deviceUser.getCustomShowName());
json.put("isCustomIcon", hardwareType.getIsCustomIcon());
json.put("iconLink", hardwareType.getIconLink());
json.put("allIconName", hardwareType.getAllIconName());
json.put("allShowName", hardwareType.getAllShowName());
json.put("defaultIconName", hardwareType.getDefaultIconName());
json.put("defaultShowName", hardwareType.getDefaultShowName());
}
}
}
//厂家
VenderList venderList = cacheService.findVenderListById(brandCode);
if(venderList!=null){
json.put("venderList", venderList);
}
else{
//默认爱鱼奇
json.put("venderList", cacheService.findVenderListById("AYQ"));
}
}
return new DeviceInfoDto(deviceIds, deviceList);
}
/**
* 删除设备关联关系并推送消息
* @param deviceUserList
* @param deviceId
*/
public void deleteDeviceAndPushMsg(List<DeviceUser> deviceUserList,Integer deviceId){
//推送消息类型
PushTypeEnum pushTypeEnum = PushTypeEnum.remove_device;
String title = pushTypeEnum.getValue();
String pushType = pushTypeEnum.getKey();
String timestamp = IfishUtil.format(new Date());
//解除设备和用户关联关系并发送推送
for (DeviceUser deviceUser : deviceUserList) {
deviceUserDao.delete(deviceUser);
Integer userId = deviceUser.getPriId().getUserId();
String showName = deviceUser.getShowName();
String content = "你已于"+timestamp+"失去对“"+showName+"”设备的控制权";
//推送云信消息
Map<String, String> neteaseMap = neteaseIM.sendMsg(IfishFilePath.ifish_account, userId.toString(), ""+title+""+content,null);
String neteaseStatus = NeteaseEnum.status200.getKey().equals(neteaseMap.get("code"))?BooleanEnum.YES.getKey():BooleanEnum.NO.getKey();
//保存推送记录
PushList pushList = new PushList(userId, deviceId, showName, pushType ,neteaseStatus, title, content);
pushListDao.save(pushList);
}
//删除设备和摄像头关联关系
List<DeviceCamera> deviceCameraList = deviceCameraDao.findByProperty(Restrictions.eq("deviceCameraId.deviceId", deviceId));
for (DeviceCamera deviceCamera : deviceCameraList) {
deviceCameraDao.delete(deviceCamera);
}
}
/**
* 设备DTO
* @param deviceUser
* @param device
* @return
*/
public DeviceDto getDeviceDto(DeviceUser deviceUser,Device device){
String type = device.getHardwareType();
//设备信息DTO
DeviceDto dto = new DeviceDto(device.getDeviceId(), device.getMacAddress(), deviceUser.getShowName(), deviceUser.getIsMaster(), type, device.getIsBlacklist());
//用户ID
dto.setUserId(deviceUser.getPriId().getUserId());
//硬件类型
HardwareType hardwareType = cacheService.findHardwareTypeById(type);
if(hardwareType!=null){
if (hardwareType.getHardwareType().equals("3a") && deviceUser.getShowName().contains("鱼缸")) {
deviceUser.setShowName("加热器" + (int) (Math.random() * 9000 + 1000));
deviceUserDao.update(deviceUser);
}
//控制数和定时器数
dto.setControlAmount(hardwareType.getControlAmount());
dto.setTimerAmount(hardwareType.getTimerAmount());
//有无工作模式
dto.setIsWorkModel(hardwareType.getIsWorkModel());
//背光/柜灯
dto.setIsLightness(hardwareType.getIsLightness());
dto.setIsSarkLamp(hardwareType.getIsSarkLamp());
}
//鱼缸厂
String brandCode = device.getBrandCode();
//是否显示预警推送,2016-04-26号之前越美水族的不显示温度预警开关
if("YUEM".equals(brandCode) && device.getCreateTime().before(IfishUtil.StrToDate("2016-04-26"))){
dto.setIsPushWendu(BooleanEnum.NO.getKey());
}
else{
dto.setIsPushWendu(BooleanEnum.YES.getKey());
}
//换水提醒
dto.setTodayRemind(device.getTodayRemind());
dto.setWaterRemind(device.getWaterRemind());
dto.setRemindDate(device.getRemindDate()!=null?IfishUtil.format1(device.getRemindDate()):"");
dto.setRemindCycle(device.getRemindCycle()!=null?device.getRemindCycle().toString():"");
//鱼缸厂信息
VenderList venderList = cacheService.findVenderListById(brandCode);
if(venderList==null){
//默认爱鱼奇
venderList = cacheService.findVenderListById("AYQ");
}
if(venderList!=null){
//鱼缸厂信息DTO
VenderDto venderDto = new VenderDto(venderList.getBrandName(), venderList.getBrandIntroduce(), venderList.getLogo());
dto.setVenderDto(venderDto);
}
return dto;
}
/**
* 优化后设备信息
* @param userId
*/
public DeviceInfoDto getSimpleDeviceInfo(Integer userId){
//设备信息DTO
List<DeviceDto> deviceDtoList = new ArrayList<DeviceDto>();
//设备ID
List<Integer> deviceIds = new ArrayList<Integer>();
//用户关联的设备信息
List<DeviceUser> deviceUserList = deviceUserDao.findByProperty(Restrictions.eq("priId.userId", userId));
for (DeviceUser deviceUser : deviceUserList) {
//设备Id
Integer deviceId = deviceUser.getPriId().getDeviceId();
//设备信息
Device device = deviceDao.get(deviceId);
if(device!=null){
deviceIds.add(deviceId);
deviceDtoList.add(getDeviceDto(deviceUser, device));
}
}
return new DeviceInfoDto(deviceIds, deviceDtoList);
}
/**
* 获取技威相关参数
* @param isRegisterGwell
* @param phoneNumber
* @return
*/
public GwellParamDto getGwellInfo(String isRegisterGwell,String phoneNumber){
//注册技威
Map<String,String> registerMap = GwellApi.Register(phoneNumber);
String registerResult = registerMap.get("result");
if(registerResult!=null){
//注册成功
if(registerResult.equals(GwellEnum.success.getKey())){
return new GwellParamDto(BooleanEnum.YES.getKey(),registerMap.get("P2PVerifyCode1"),registerMap.get("P2PVerifyCode2"),registerMap.get("UserID"));
}
//已经注册过
else if(registerResult.equals(GwellEnum.repeat.getKey())){
//重新登陆获取
Map<String,String> loginMap = GwellApi.Login(phoneNumber);
String loginResult = loginMap.get("result");
//登陆成功
if(GwellEnum.success.getKey().equals(loginResult)){
return new GwellParamDto(BooleanEnum.YES.getKey(),loginMap.get("P2PVerifyCode1"),loginMap.get("P2PVerifyCode2"),loginMap.get("UserID"),loginMap.get("SessionID"),loginMap.get("SessionID2"));
}
else{
return new GwellParamDto(BooleanEnum.YES.getKey());
}
}
}
return null;
}
/**
* 获取云信相关参数
* @param isRegisterNetease
* @param userId
* @param nickName
* @param userImg
* @param neteaseToken
* @return
*/
@Deprecated
public NeteaseParamDto GetNeteaseInfo(String isRegisterNetease,Integer userId,String nickName,String userImg,String neteaseToken){
//未注册云信
if(!BooleanEnum.YES.getKey().equals(isRegisterNetease)){
//注册云信
Map<String, String> registerMap = registerIM(userId.toString(),nickName,userImg);
if(registerMap!=null){
String code = registerMap.get("code");
if(code.equals(NeteaseEnum.status200.getKey())){
//发送云信消息
sendMsgByIM(userId.toString());
return new NeteaseParamDto(BooleanEnum.YES.getKey(), registerMap.get("token"));
}
else if(code.equals(NeteaseEnum.status414.getKey())){
//获取云信token
Map<String, String> refreshMap = refreshToken(userId.toString());
if(refreshMap!=null){
String refreshCode = refreshMap.get("code");
if(refreshCode.equals(NeteaseEnum.status200.getKey())){
return new NeteaseParamDto(BooleanEnum.YES.getKey(), refreshMap.get("token"));
}
}
}
}
}
//已注册云信
else if(BooleanEnum.YES.getKey().equals(isRegisterNetease)){
//token为空
if(!StringUtils.isNotBlank(neteaseToken)){
//获取云信token
Map<String, String> refreshMap = refreshToken(userId.toString());
if(refreshMap!=null){
String code = refreshMap.get("code");
if(code.equals(NeteaseEnum.status200.getKey())){
return new NeteaseParamDto(BooleanEnum.YES.getKey(), refreshMap.get("token"));
}
}
}
}
return null;
}
/**
* 封装用户信息
* @param user
* @return
*/
public JSONObject getUserInfo(User user){
JSONObject json = new JSONObject();
json.put("userId", user.getUserId());
json.put("phoneNumber", user.getPhoneNumber());
json.put("nickName", user.getNickName());
json.put("userSex", user.getUserSex());
json.put("signature", user.getSignature());
json.put("userImg", user.getUserImg());
json.put("P2PVerifyCode1", user.getP2PVerifyCode1());
json.put("P2PVerifyCode2", user.getP2PVerifyCode2());
json.put("gwellUserID", user.getGwellUserID());
json.put("neteaseToken", user.getNeteaseToken());
json.put("userType", user.getUserType());
json.put("shopsUserId", user.getShopsUserId());
return json;
}
/**
* 封装用户信息
* @param user
* @return
*/
public JSONObject getUserInfo(User user,GwellParamDto gwellParam){
JSONObject json = new JSONObject();
json.put("userId", user.getUserId());
json.put("phoneNumber", user.getPhoneNumber());
json.put("nickName", user.getNickName());
json.put("userSex", user.getUserSex());
json.put("signature", user.getSignature());
json.put("userImg", user.getUserImg());
json.put("P2PVerifyCode1", user.getP2PVerifyCode1());
json.put("P2PVerifyCode2", user.getP2PVerifyCode2());
json.put("sessionID", gwellParam != null ? gwellParam.getSessionID() : "");
json.put("sessionID2", gwellParam != null ? gwellParam.getSessionID2() : "");
json.put("gwellUserID", user.getGwellUserID());
json.put("neteaseToken", user.getNeteaseToken());
json.put("userType", user.getUserType());
json.put("shopsUserId", user.getShopsUserId());
return json;
}
/**
* 封装用户信息
* @param user
* @return
*/
public UserInfoDto getUserInfoDto(User user,GwellParamDto gwellParam){
UserInfoDto dto = new UserInfoDto();
dto.setUserId(user.getUserId());
dto.setPhoneNumber(user.getPhoneNumber());
dto.setNickName(user.getNickName());
dto.setUserSex(user.getUserSex());
dto.setSignature(user.getSignature());
dto.setUserImg(user.getUserImg());
dto.setP2PVerifyCode1(user.getP2PVerifyCode1());
dto.setP2PVerifyCode2(user.getP2PVerifyCode2());
if (gwellParam != null) {
dto.setSessionID(gwellParam.getSessionID());
dto.setSessionID2(gwellParam.getSessionID2());
}
dto.setGwellUserID(user.getGwellUserID());
dto.setNeteaseToken(user.getNeteaseToken());
dto.setUserType(user.getUserType());
dto.setShopsUserId(user.getShopsUserId());
return dto;
}
/**
* 用户资产和签到信息(经验值,金币等)
* @param userId
* @return
*/
public UserAssetDto getUserAssetInfo(Integer userId){
UserAsset userAsset = userAssetDao.get(userId);
if(userAsset==null){
//之前注册用户赠送20金币
BigDecimal gold = new BigDecimal(20);
userAsset = new UserAsset(userId,gold);
userAssetDao.save(userAsset);
//获取记录
GoldGetRecord getRecord = new GoldGetRecord(userId, GoldGetTypeEnum.registerGive.getKey(), gold, GoldGetTypeEnum.registerGive.getValue());
goldGetRecordDao.save(getRecord);
}
//日期
Calendar calendar = Calendar.getInstance();
//今天
Date date = calendar.getTime();
String today = IfishUtil.format1(date);
//昨天
calendar.add(Calendar.DAY_OF_MONTH, -1);
String yesterday = IfishUtil.format1(calendar.getTime());
//最后一天登陆日期
String lastLogin = userAsset.getLastLoginDate();
//规则
GradeTask gradeRule = cacheService.getGradeRule(GradeGetTypeEnum.everyDayLogin.getKey());
//今天登陆过
if(gradeRule==null || lastLogin.equals(today)){
return goldService.getUserAssetInfo(userAsset, new BigDecimal(0), today, yesterday);
}
return gradeService.getGradeControl(userAsset, gradeRule ,true);
}
/**
* 封装摄像头信息
* @param userId
* @return
*/
public List<JSONObject> getCameraInfo(Integer userId){
List<JSONObject> cameraList = new ArrayList<JSONObject>();
//获取用户拥有摄像头
List<CameraUser> cameraUserList = cameraUserDao.findByProperty(Restrictions.eq("cameraUserId.userId", userId));
for(CameraUser cameraUser:cameraUserList){
Camera camera = cameraDao.get(cameraUser.getCameraUserId().getCameraId());
//封装摄像头返回信息
JSONObject json = new JSONObject();
json.put("cameraId", camera.getCameraId());
//json.put("isMaster", cameraUser.getIsMaster());
json.put("isLook", cameraUser.getIsLook());
json.put("isLive", cameraUser.getIsLive());
json.put("isActive", camera.getActiveCode()!=null&&camera.getActiveCode().length()>0?"1":"0");
json.put("showName", cameraUser.getShowName());
cameraList.add(json);
}
return cameraList;
}
/**
* 设备关联摄像头
* @param deviceIds
* @return
*/
public List<DeviceCameraId> getDeviceCamera(List<Integer> deviceIds){
//设备关联摄像头信息
List<DeviceCameraId> deviceCameraList = new ArrayList<DeviceCameraId>();
//设备已关联摄像头
if(deviceIds.size()>0){
List<DeviceCamera> list = deviceCameraDao.findByProperty(Restrictions.in("deviceCameraId.deviceId", deviceIds));
for(DeviceCamera deviceCamera:list){
deviceCameraList.add(deviceCamera.getDeviceCameraId());
}
}
return deviceCameraList;
}
/**
* 封装商家认证信息
* @param userImg
* @return
*/
public JSONObject getShopsInfo(Integer userId,String userImg){
if(userId!=null){
ShopsInfo shopsInfo = shopsInfoDao.findUniqueByProperty(Restrictions.eq("userId", userId));
if(shopsInfo!=null){
//封装商家认证信息
JSONObject json = new JSONObject();
json.put("shopsId", shopsInfo.getShopsId());
json.put("userId", shopsInfo.getUserId());
if(userImg!=null){
json.put("userImg", userImg);
}
else{
User user = userDao.get(userId);
json.put("userImg", user.getUserImg());
}
json.put("userName", shopsInfo.getUserName());
json.put("shopsName", shopsInfo.getShopsName());
json.put("shopsPhone", shopsInfo.getShopsPhone());
json.put("shopsProvince", shopsInfo.getShopsProvince());
json.put("shopsCity", shopsInfo.getShopsCity());
json.put("shopsArea", shopsInfo.getShopsArea());
json.put("shopsAddress", shopsInfo.getShopsAddress());
json.put("picture1", shopsInfo.getPicture1());
json.put("picture2", shopsInfo.getPicture2());
json.put("picture3", shopsInfo.getPicture3());
json.put("picture4", shopsInfo.getPicture4());
json.put("status", shopsInfo.getStatus());
json.put("remark", shopsInfo.getRemark());
json.put("reason", shopsInfo.getReason());
json.put("weixinCode", shopsInfo.getWeixinCode());
json.put("shopLink", shopsInfo.getShopLink());
return json;
}
}
return new JSONObject();
}
/**
* 金币任务信息
* @param userId
* @return
*/
public List<GoldTaskDto> getGoldTaskList(Integer userId){
//任务信息
List<GoldTaskDto> goldTaskList = new ArrayList<GoldTaskDto>();
//今天日期
String today = IfishUtil.format1(new Date());
//已完成金币任务
Map<String, String> finishMap = new HashMap<String, String>();
List<GoldControl> goldControls = goldControlDao.findByProperty(Restrictions.eq("goldControlId.userId", userId));
for (GoldControl goldControl : goldControls) {
finishMap.put(goldControl.getGoldControlId().getRuleType(), goldControl.getControlParam());
}
//所有金币任务
for (GoldTask goldRule : cacheService.getGoldRuleList()) {
//类型
String ruleType = goldRule.getRuleType();
//加成类型
String addType = goldRule.getAddType();
//任务是否完成
String controlDate = finishMap.get(ruleType);
//规则信息DTO
GoldTaskDto taskDto = new GoldTaskDto(ruleType, addType, goldRule.getAddValue().toString(), BooleanEnum.NO.getKey());
goldTaskList.add(taskDto);
if(controlDate!=null){
if(addType.equals(AddTypeEnum.once.getKey()) || (addType.equals(AddTypeEnum.everyDay.getKey()) && controlDate.equals(today))){
taskDto.setIsFinish(BooleanEnum.YES.getKey());
}
}
}
return goldTaskList;
}
@Override
public User getUser(Integer userId) {
return this.userDao.get(userId);
}
@Override
public void updateUser(User user) {
this.userDao.update(user);
}
}