mitao
2025-02-21 31573d6180d15ef65ed0df9c2732495f40b12663
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
package com.panzhihua.service_equipment.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.panzhihua.common.model.dtos.equipment.UnionUserDto;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.redis.TokenManager;
import com.panzhihua.service_equipment.dao.*;
import com.panzhihua.service_equipment.model.dos.*;
import com.panzhihua.service_equipment.until.AccessUtil;
import com.panzhihua.service_equipment.service.UnionUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Service
@Slf4j
public class UnionUserServiceImpl extends ServiceImpl<UnionUserMapper, UnionUser> implements UnionUserService {
 
    @Resource
    private AccessUtil accessUtil;
 
    @Resource
    private UnionAccessMapper unionAccessMapper;
 
    @Resource
    private UsersMapper usersMapper;
 
    @Resource
    private TokenManager tokenManager;
 
    @Resource
    private UnionOpenDoorMapper unionOpenDoorMapper;
 
    @Resource
    private UnionIntegralRuleMapper unionIntegralRuleMapper;
 
    @Resource
    private  UnionIntegralRuleRecordMapper unionIntegralRuleRecordMapper;
 
    @Resource
    private  UnionIntegralSummarizeMapper unionIntegralSummarizeMapper;
 
    @Resource
    private  UnionOutdoorSiteMapper unionOutdoorSiteMapper;
 
    @Resource
    private  UnionIntegralRecordMapper unionIntegralRecordMapper;
 
    /**
     * 总工会户外劳登录
     *
     * @param loginUserInfoVO
     * @return 总工会户外劳共用户
     */
    @Override
    public R<UnionUser> login(LoginUserInfoVO loginUserInfoVO) {
        UnionUser unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("user_id", loginUserInfoVO.getUserId()));
        if (unionUser != null) {
            return R.ok(unionUser);
        } else {
            unionUser = new UnionUser();
            unionUser.setSex(loginUserInfoVO.getSex().toString());
            unionUser.setPhone(loginUserInfoVO.getPhone());
            unionUser.setDeleteFlag(false);
            unionUser.setCreateAt(LocalDateTime.now());
            unionUser.setUpdateAt(LocalDateTime.now());
            unionUser.setStatus(1);
            unionUser.setNickName(loginUserInfoVO.getNickName());
            unionUser.setUserId(loginUserInfoVO.getUserId());
            if (loginUserInfoVO.getImageUrl() != null)
                unionUser.setImageUrl(loginUserInfoVO.getImageUrl());
            int insert = baseMapper.insert(unionUser);
            if (insert > 0) {
                return R.ok(unionUser);
            } else {
                return R.fail();
            }
        }
 
    }
 
    /**
     * 总工会户外劳登录(h5)
     *
     * @param phone
     * @return 总工会户外劳共用户
     */
    @Override
    public  R<Map<String, Object>> loginByUnion(String phone){
        Map<String, Object> mapUser = new HashMap<>();
        Users users = usersMapper.selectOne(new QueryWrapper<Users>()
                .eq("phone", phone)
                .eq("deleted", 0)
                .eq("freezeFlag", 0)
                .orderByDesc("updateTime")
                .last("limit 1"));
        if (users!=null){
            UnionUser unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("union_h5_user_id", users.getUsersID()));
            if (unionUser!=null){
                String token = tokenManager.getTokenByUserId(unionUser.getId().toString());
//                String token=null;
                if (token == null) {
                    //生成一个token,保存用户登录状态
                    token = tokenManager.createToken(unionUser.getId().toString(), unionUser.getId().toString());
                }
                mapUser.put("token", token);
                mapUser.put("unionUser",unionUser);
                log.info("mapUser{}",mapUser);
                return R.ok(mapUser);
            }
            else {
                unionUser=new UnionUser();
                unionUser.setPhone(users.getPhone());
                unionUser.setDeleteFlag(false);
                unionUser.setCreateAt(LocalDateTime.now());
                unionUser.setUpdateAt(LocalDateTime.now());
                unionUser.setStatus(1);
                unionUser.setNickName(users.getUname());
                unionUser.setUnionH5UserId(users.getUsersID());
                int insert = baseMapper.insert(unionUser);
                if (insert >0){
                    unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("union_h5_user_id", users.getUsersID()));
                    if (unionUser!=null){
                        String token = tokenManager.getTokenByUserId(unionUser.getId().toString());
                        if (token == null) {
                            //生成一个token,保存用户登录状态
                            token = tokenManager.createToken(unionUser.getId().toString(), unionUser.getId().toString());
                        }
                        mapUser.put("token", token);
                        mapUser.put("unionUser",unionUser);
                        log.info("mapUser{}",mapUser);
                        return  R.ok(mapUser);
                    }
 
                }
 
            }
            return R.fail("新增用户失败请查看是否在川共之家登录");
        }else {
           log.info("总工会数据库没有人物");
           return  R.fail("数据错误,请先在川共之家登录");
        }
 
    }
 
    /**
     * 使用id查找用户
     *
     * @param id
     * @return 总工会户外劳共用户
     */
    @Override
    public UnionUserDto  selectById(Long id){
        UnionUserDto unionUserDto=new UnionUserDto();
        UnionUser unionUser = baseMapper.selectById(id);
        BeanUtils.copyProperties(unionUser, unionUserDto);
        return  unionUserDto;
    }
 
 
    /**
     * 总工会户外劳工站用户认证
     *
     * @param unionUserDto
     * @return 总工会户外劳共用户
     */
 
    @Override
    public R authentication(UnionUserDto unionUserDto){
        UnionUser unionUser=null;
        if (unionUserDto.getIsApplets().equals(1))
            unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("user_id", unionUserDto.getUserId()));
        else
            unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("id", unionUserDto.getId()));
        if (unionUser != null){
            log.info("查询到用户开始认证操作{}",unionUser);
            //设备下发照片代码
            LambdaQueryWrapper<UnionAccess> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.inSql(UnionAccess::getSiteId, "SELECT id FROM union_outdoor_site WHERE area_code='" + unionUserDto.getAreaCode() + "'");
            List<UnionAccess> unionAccesses = unionAccessMapper.selectList(queryWrapper);
            for (UnionAccess unionAccess : unionAccesses) {
                try {
                    log.info("人脸注册");
                    accessUtil.faceEnroll(unionUser.getPhone(), unionUserDto.getName(), unionUserDto.getAuthenticatedUrlBase(), unionAccess.getCommunityExternalId(), unionAccess.getUnitId());
                } catch (Exception e) {
                    // 处理异常
                    e.printStackTrace();
                    return R.fail("认证失败,请验证照片是否符合规范或者联系工作人员"); // 或者抛出自定义异常,根据实际情况进行处理
                }
            }
            //更改数据库
            unionUser.setName(unionUserDto.getName());
            unionUser.setIdCard(unionUserDto.getIdCard());
            unionUser.setAreaCode(unionUserDto.getAreaCode());
            unionUser.setAuthenticatedUrl(unionUserDto.getAuthenticatedUrl());
            unionUser.setAuthenticatedUrlBase(unionUserDto.getAuthenticatedUrlBase());
            unionUser.setIsAuthenticated(1);
            int i = baseMapper.updateById(unionUser);
            if (i>0){
                return R.ok("认证成功");
            }
            else {
                return  R.fail("认证失败");
            }
        }
        else {
            log.info("未查询到用户");
            return  R.fail("认证失败");
        }
 
    }
 
 
    /**
     * 用户开门
     *
     * @return 总工会户外劳共用户
     */
    @Override
    public  R openDoor(UnionUserDto unionUserDto,String qRCode){
        log.info("开始开门当前用户为{}",unionUserDto);
        UnionAccess unionAccess = unionAccessMapper.selectOne(new QueryWrapper<UnionAccess>().eq("q_r_code", qRCode));
        if (unionAccess==null){
            return R.fail("无效的二维码");
        }
        try {
            accessUtil.deviceOpen(unionAccess.getSn(), unionUserDto.getName(), "scan", "occupant");
        } catch (Exception e) {
            e.printStackTrace(); // 打印异常信息
            log.info("开门失败原因{}",e);
            return  R.fail("开门失败请检查人脸照片是否你本人或者联系工作人员");
        }
        Integer userLastOpenDoorMinutesDiff = unionOpenDoorMapper.getUserLastOpenDoorMinutesDiff(unionUserDto.getId());
        log.info("上次开门时间间隔时间{}分钟",userLastOpenDoorMinutesDiff);
        QueryWrapper<UnionOpenDoor> queryWrapper = new QueryWrapper<>();
        QueryWrapper<UnionOpenDoor> eq = queryWrapper.eq("user_id", unionUserDto.getId())
                .eq("DATE(create_at)", LocalDate.now())
                .eq("type", 1);
        Integer count = unionOpenDoorMapper.selectCount(eq);
        log.info("今日获得积分的开门次数为{}",count);
        UnionIntegralRule unionIntegralRule =
                unionIntegralRuleMapper.selectOne(new QueryWrapper<UnionIntegralRule>().eq("id", 1));
        log.info("当前规则{}",unionIntegralRule);
        if (unionIntegralRule.getDayNumber()>count && unionIntegralRule.getTimeNumber() <userLastOpenDoorMinutesDiff ){
            log.info("此次开门获得积分");
            UnionOpenDoor unionOpenDoor=new UnionOpenDoor();
            unionOpenDoor.setSiteId(unionAccess.getSiteId());
            unionOpenDoor.setUserId(unionUserDto.getId());
            unionOpenDoor.setType(1);
            unionOpenDoor.setCreateAt(LocalDateTime.now());
            unionOpenDoorMapper.insert(unionOpenDoor);
            UnionIntegralRuleRecord unionIntegralRuleRecord = unionIntegralRuleRecordMapper.selectOne(new QueryWrapper<UnionIntegralRuleRecord>()
                    .eq("rule_id", unionIntegralRule.getId())
                    .eq("count", count + 1));
            log.info("此次开门获得积分{}",unionIntegralRuleRecord.getIntegralNumber());
            UnionOutdoorSite unionOutdoorSite = unionOutdoorSiteMapper.selectById(unionAccess.getSiteId());
            UnionIntegralSummarize unionIntegralSummarize = unionIntegralSummarizeMapper.selectOne(new QueryWrapper<UnionIntegralSummarize>()
                    .eq("community_id", unionOutdoorSite.getAreaCode()).eq("user_id", unionUserDto.getId()));
            if (unionIntegralSummarize==null){
                log.info("第一次开门在此区域没有积分表新增一个");
                unionIntegralSummarize=new UnionIntegralSummarize();
                unionIntegralSummarize.setUserId(unionUserDto.getId().toString());
                unionIntegralSummarize.setCommunityId(unionOutdoorSite.getAreaCode());
                unionIntegralSummarize.setCreateTime(new Date());
                unionIntegralSummarize.setUpdateTime(new Date());
                unionIntegralSummarize.setAllIntegral(unionIntegralRuleRecord.getIntegralNumber().toString());
                unionIntegralSummarizeMapper.insert(unionIntegralSummarize);
            }else {
                log.info("用户积分修改前{}",unionIntegralSummarize);
                unionIntegralSummarize.setUpdateTime(new Date());
                unionIntegralSummarize.setAllIntegral(String.valueOf((Integer.parseInt(unionIntegralSummarize.getAllIntegral())
                        +unionIntegralRuleRecord.getIntegralNumber())));
                log.info("用户积分修改后{}",unionIntegralSummarize);
                unionIntegralSummarizeMapper.updateById(unionIntegralSummarize);
            }
            log.info("新增积分记录");
            UnionIntegralRecord unionIntegralRecord=new UnionIntegralRecord();
            unionIntegralRecord.setIntegralType("1");
            unionIntegralRecord.setIntegral(unionIntegralRuleRecord.getIntegralNumber().toString());
            unionIntegralRecord.setUserId(unionUserDto.getId().toString());
            unionIntegralRecord.setCreateTime(new Date());
            unionIntegralRecord.setUpdateTime(new Date());
            unionIntegralRecord.setCommunityId(unionOutdoorSite.getAreaCode());
            unionIntegralRecord.setIntegralId(unionIntegralSummarize.getId());
            unionIntegralRecord.setType("1");
            unionIntegralRecordMapper.insert(unionIntegralRecord);
            return R.ok("开门成功");
        }
        else {
            log.info("此次开门不获得积分");
            UnionOpenDoor unionOpenDoor=new UnionOpenDoor();
            unionOpenDoor.setSiteId(unionAccess.getSiteId());
            unionOpenDoor.setUserId(unionUserDto.getId());
            unionOpenDoor.setType(2);
            unionOpenDoor.setCreateAt(LocalDateTime.now());
            unionOpenDoorMapper.insert(unionOpenDoor);
            return  R.ok("开门成功");
        }
    }
}