package com.szwl.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.szwl.feign.bean.SyncOldFeign;
import com.szwl.model.bo.R;
import com.szwl.model.entity.TAdmin;
import com.szwl.model.entity.TEquipment;
import com.szwl.mapper.TEquipmentMapper;
import com.szwl.model.entity.TWechat;
import com.szwl.model.query.StatisticsParam;
import com.szwl.model.utils.MailUtil;
import com.szwl.model.utils.PushUtils;
import com.szwl.model.utils.YunPianSms;
import com.szwl.service.TAdminService;
import com.szwl.service.TEquipmentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.szwl.service.TWechatService;
import com.szwl.util.WechatSendUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author wuhs
* @since 2023-10-25
*/
@Service
public class TEquipmentServiceImpl extends ServiceImpl implements TEquipmentService {
@Autowired
private AmqpTemplate amqpTemplate;
@Resource
TEquipmentMapper tEquipmentMapper;
@Autowired
TAdminService adminService;
@Resource
SyncOldFeign syncOldFeign;
@Resource
TEquipmentService equipmentService;
@Resource
TWechatService wechatService;
private static final String appid = "07784f5fedb508046c841b391005b7de";
@Override
public String sentMessage(String clientId, String json) {
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TEquipment::getClientId,clientId);
List equipmentList = tEquipmentMapper.selectList(query);
if(equipmentList.size()==0){
return "该设备不存在";
}
TEquipment equipment = equipmentList.get(0);
if (equipment == null) {
return "该设备不存在";
}
String channel = equipment.getChannel();
String equimentType = equipment.getEquimentType();
if(StringUtils.isEmpty(channel)||channel.equals("1")||StringUtils.isEmpty(equimentType)){
//用个推
PushUtils.push(equipment.getGtClientId(), "", "", json);
}
if(StringUtils.isNotEmpty(channel)&&channel.equals("2")&&StringUtils.isNotEmpty(equimentType)){
//用Mq
//1 创建消息
MessageProperties messageProperties = new MessageProperties();
messageProperties.setContentType("text/plain");
org.springframework.amqp.core.Message message = new org.springframework.amqp.core.Message(json.getBytes(), messageProperties);
amqpTemplate.send(equimentType, clientId, message);
}
return "success";
}
@Override
public String findMachineTotalNum(StatisticsParam param) {
return tEquipmentMapper.findMachineTotalNum(param);
}
@Override
public String findMachineUseNum(StatisticsParam param) {
return tEquipmentMapper.findMachineUseNum(param);
}
@Override
public String findMachineUseNumAdmin(StatisticsParam param) {
return tEquipmentMapper.findMachineUseNumAdmin(param);
}
@Override
public Optional syncOneEquipmentByClientId(String clientId) {
if (StringUtils.isNotEmpty(clientId)) {
TEquipment oldEquipment = R.getDataIfSuccess(syncOldFeign.getEquipmentByClientId(clientId));
Long id = oldEquipment.getId();
Date createDate = oldEquipment.getCreateDate();
Date modifyDate = oldEquipment.getModifyDate();
Long adminId = oldEquipment.getAdminId();
String adminLevel = oldEquipment.getAdminLevel();
String adminPwd = oldEquipment.getAdminPwd();
Long areaId = oldEquipment.getAreaId();
String cabinetHd = oldEquipment.getCabinetHd();
String cabinetTm = oldEquipment.getCabinetTm();
// String clientId = oldEquipment.getClientId();
String contactName = oldEquipment.getContactName();
String contactPhone = oldEquipment.getContactPhone();
String operationalPhone = oldEquipment.getOperationalPhone();
String operationalName = oldEquipment.getOperationalName();
String furnaceSp = oldEquipment.getFurnaceSp();
String furnaceTm = oldEquipment.getFurnaceTm();
String guestPwd = oldEquipment.getGuestPwd();
Boolean isNetWork = oldEquipment.getIsNetWork();
Boolean isUsing = oldEquipment.getIsUsing();
Date lastUpdateTime = oldEquipment.getLastUpdateTime();
Double latitude = oldEquipment.getLatitude();
Double longitude = oldEquipment.getLongitude();
String managerId = oldEquipment.getManagerId();
String selfName = oldEquipment.getSelfName();
String channel = oldEquipment.getChannel();
String name = oldEquipment.getName();
String netWorkingMode = oldEquipment.getNetWorkingMode();
String operator = oldEquipment.getOperator();
Integer payType = oldEquipment.getPayType();
Integer productTotal = oldEquipment.getProductTotal();
String simNo = oldEquipment.getSimNo();
String sn = oldEquipment.getSn();
String adminUserName = oldEquipment.getAdminUserName();
Long agencyId = oldEquipment.getAgencyId();
Long merchantId = oldEquipment.getMerchantId();
String companyPhone = oldEquipment.getCompanyPhone();
Long personageId = oldEquipment.getPersonageId();
Integer type = oldEquipment.getType();
String fullName = oldEquipment.getFullName();
Date pushUpdateTime = oldEquipment.getPushUpdateTime();
Long timeRuleId = oldEquipment.getTimeRuleId();
String gtClientId = oldEquipment.getGtClientId();
Integer eqeStatus = oldEquipment.getEqeStatus();
Boolean isBlocked = oldEquipment.getIsBlocked();
String messageReceiver = oldEquipment.getMessageReceiver();
Boolean isSleep = oldEquipment.getIsSleep();
String advancedParameters = oldEquipment.getAdvancedParameters();
String volume = oldEquipment.getVolume();
String commonParameters = oldEquipment.getCommonParameters();
String network = oldEquipment.getNetwork();
String offTime = oldEquipment.getOffTime();
String bootTime = oldEquipment.getBootTime();
String plcVersion = oldEquipment.getPlcVersion();
String equipmentType = oldEquipment.getEquimentType();
Date endDate = oldEquipment.getEndDate();
String flowers = oldEquipment.getFlowers();
String machineType = oldEquipment.getMachineType();
// String apkVersion = oldEquipment.getApkVersion(); // 旧系统没有
// String couponStatus = oldEquipment.getCouponStatus(); // 旧系统没有
String paymentType = oldEquipment.getPaymentType();
String companyType = oldEquipment.getCompanyType();
TEquipment equipment = new TEquipment();
equipment.setId(id);
equipment.setCreateDate(createDate);
equipment.setModifyDate(modifyDate);
equipment.setAdminId(adminId);
equipment.setAdminLevel(adminLevel);
equipment.setAdminPwd(adminPwd);
equipment.setAreaId(areaId);
equipment.setCabinetHd(cabinetHd);
equipment.setCabinetTm(cabinetTm);
equipment.setClientId(clientId);
equipment.setContactName(contactName);
equipment.setContactPhone(contactPhone);
equipment.setOperationalPhone(operationalPhone);
equipment.setOperationalName(operationalName);
equipment.setFurnaceSp(furnaceSp);
equipment.setFurnaceTm(furnaceTm);
equipment.setGuestPwd(guestPwd);
equipment.setIsNetWork(isNetWork);
equipment.setIsUsing(isUsing);
equipment.setLastUpdateTime(lastUpdateTime);
equipment.setLatitude(latitude);
equipment.setLongitude(longitude);
equipment.setManagerId(managerId);
equipment.setSelfName(selfName);
equipment.setChannel(channel);
equipment.setName(name);
equipment.setNetWorkingMode(netWorkingMode);
equipment.setOperator(operator);
equipment.setPayType(payType);
equipment.setProductTotal(productTotal);
equipment.setSimNo(simNo);
equipment.setSn(sn);
equipment.setAdminUserName(adminUserName);
equipment.setAgencyId(agencyId);
equipment.setMerchantId(merchantId);
equipment.setCompanyPhone(companyPhone);
equipment.setPersonageId(personageId);
equipment.setType(type);
equipment.setFullName(fullName);
equipment.setPushUpdateTime(pushUpdateTime);
equipment.setTimeRuleId(timeRuleId);
equipment.setGtClientId(gtClientId);
equipment.setEqeStatus(eqeStatus);
equipment.setIsBlocked(isBlocked);
equipment.setMessageReceiver(messageReceiver);
equipment.setIsSleep(isSleep);
equipment.setAdvancedParameters(advancedParameters);
equipment.setVolume(volume);
equipment.setCommonParameters(commonParameters);
equipment.setNetwork(network);
equipment.setOffTime(offTime);
equipment.setBootTime(bootTime);
equipment.setPlcVersion(plcVersion);
equipment.setEquimentType(equipmentType);
equipment.setEndDate(endDate);
equipment.setFlowers(flowers);
equipment.setMachineType(machineType);
// equipment.setApkVersion();
// equipment.setCouponStatus();
equipment.setCompanyType(companyType);
equipment.setPaymentType(paymentType);
equipmentService.save(equipment);
return Optional.of("success");
} else {
return Optional.empty();
}
}
@Override
public int getForeignEquipmentCount(String area) {
switch (area) {
case "0":
// 统计国内
List domesticAdminIdList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "0").list().stream().map(TAdmin::getId).collect(Collectors.toList());
return equipmentService.lambdaQuery().in(TEquipment::getAdminId, domesticAdminIdList).count();
case "1":
// 统计海外
List overseasAdminIdList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "1").list().stream().map(TAdmin::getId).collect(Collectors.toList());
return equipmentService.lambdaQuery().in(TEquipment::getAdminId, overseasAdminIdList).count();
case "2":
// 统计全球
return equipmentService.list().size();
default:
return 0;
}
}
@Override
public void checkEquipmentStatus() {
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TEquipment::getEqeStatus, 1);
List equipmentList = equipmentService.list(query);
if (equipmentList.size() > 0) {
// 获取当前时间,并检查设备状态是否过期
long nowTime = System.currentTimeMillis();
for (TEquipment equipment : equipmentList) {
if (equipment.getModifyDate() != null) {
// 如果设备的最后刷新时间超过480秒前,则清除设备状态信息,更改为关机状态
long updateTime = equipment.getModifyDate().getTime();
if (nowTime > updateTime && (nowTime - updateTime) > 720000) {
equipment.setCabinetTm("");
equipment.setCabinetHd("");
equipment.setFurnaceTm("");
equipment.setFurnaceSp("");
equipment.setEqeStatus(0);
equipmentService.updateById(equipment);
// 说明机器没有上传信号,判断为网络不好或者关机,发送信号通知客户 查机器归属国内还是国外
TAdmin admin = adminService.getById(equipment.getAdminId());
String ifForeign = admin.getIfForeign();
// 查询是申泽还是七云的
String companyType = admin.getCompanyType();
LambdaQueryWrapper wechatQuery = Wrappers.lambdaQuery();
wechatQuery.eq(TWechat::getAdminId, equipment.getAdminId());
TWechat wechat = wechatService.getOne(wechatQuery);
// 设备名称
String name = equipment.getName();
// 如果为空就拿设备编号后六位
if(StringUtils.isEmpty(name)) {
name = equipment.getClientId().substring(equipment.getClientId().length() - 6);
}
if(wechat != null) {
// 有绑定微信的话发公众号
String openId = wechat.getOpenId();
wechatService.sendNetworkMessage(openId,equipment.getClientId(),name, ifForeign, companyType);
if (ifForeign.equals("1")) {
// 国外再发邮件
String messageReceiver = equipment.getMessageReceiver();
if(StringUtils.isNotEmpty(messageReceiver)) {
String[] split = messageReceiver.split(",");
for (String s : split) {
WechatSendUtil.sentEmail(s, name);
}
} else {
if(StringUtils.isNotEmpty(admin.getEmail())){
WechatSendUtil.sentEmail(admin.getEmail(), name);
}
}
}
} else {
// 0或空:国内,1:国外
if (ifForeign.equals("0") || ifForeign.equals("")) {
//TODO 国内发短信
} else {
// 国外发送邮件
String messageReceiver = equipment.getMessageReceiver();
if(StringUtils.isNotEmpty(messageReceiver)) {
String[] split = messageReceiver.split(",");
for (String s : split) {
WechatSendUtil.sentEmail(s, name);
}
} else {
if(StringUtils.isNotEmpty(admin.getEmail())){
WechatSendUtil.sentEmail(admin.getEmail(), name);
}
}
}
}
}
}
}
}
}
@Override
public void informClient(Long adminId, String deviceId) {
LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(TAdmin::getId, adminId);
TAdmin admin = adminService.getOne(queryWrapper);
String ifForeign = admin.getIfForeign();
String phone = admin.getPhone();
String email = admin.getEmail();
switch (ifForeign) {
case "0": { // 国内发短信
if (StringUtils.isEmpty(phone)) {
return;
}
try {
String sms = YunPianSms.sendSms(appid, getInformText(deviceId), phone);
System.out.println("短信已发送:" + sms);
} catch (IOException e) {
throw new RuntimeException(e);
}
break;
}
case "1": { // 海外发邮箱
if (StringUtils.isEmpty(email)) {
return;
}
String subject = "Reset the price of the flowers"; // 邮件标题
String content = getInformContent(deviceId); // 邮件正文
new MailUtil().send(email, subject, content);
break;
}
default:
System.out.println("无效的ifForeign");
break;
}
}
private String getInformContent(String deviceId) {
String content;
String str = "Dear customer:
" +
"
" +
"Your machine number is <" + deviceId + "> cotton candy machine, the number of flowers has been pushed, please reset the price of the flowers!" +
"
" +
"
" +
"Best Regards.
" +
"Sunzee Intelligent";
content = String.format(str);
return content;
}
private String getInformText(String deviceId) {
String sms = "";
if(StringUtils.isNotEmpty(deviceId)){
sms = "【申泽智能】您好,您名下设备编号为" + deviceId + "的机器,花型数量已推送,请重新设置价格!";
}
return sms;
}
/**
* 根据经度获取时区
* @param currentLon 当前经度
* @return
*/
public static int lateTimeZone(double currentLon) {
int timeZone ;
int shangValue = (int)(currentLon / 15);
double yushuValue = Math.abs(currentLon % 15);
if (yushuValue <= 7.5) {
timeZone = shangValue;
} else {
timeZone = shangValue +(currentLon > 0 ? 1 :-1);
}
return timeZone;
}
}