java110
2021-07-20 1745de9e271b01c6f2f3da0744292986e050abdd
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
/*
 * Copyright 2017-2020 吴学文 and java110 team.
 *
 * 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
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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 com.java110.common.bmo.machine.impl;
 
import com.alibaba.fastjson.JSONObject;
import com.java110.common.bmo.machine.IMachineOpenDoorBMO;
import com.java110.dto.machine.MachineTranslateDto;
import com.java110.dto.owner.OwnerAttrDto;
import com.java110.dto.owner.OwnerDto;
import com.java110.intf.common.IMachineTranslateInnerServiceSMO;
import com.java110.intf.job.IDataBusInnerServiceSMO;
import com.java110.intf.user.IOwnerInnerServiceSMO;
import com.java110.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
/**
 * 设备开门功能
 *
 * @desc add by 吴学文 14:15
 */
@Service
public class MachineOpenDoorBMOImpl implements IMachineOpenDoorBMO {
 
 
    @Autowired
    IDataBusInnerServiceSMO dataBusInnerServiceSMOImpl;
    @Autowired
    private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
 
    @Autowired
    private IMachineTranslateInnerServiceSMO machineTranslateInnerServiceSMOImpl;
 
    /**
     * 开门功能
     *
     * @param reqJson 请求报文信息
     * @return
     */
    @Override
    public ResponseEntity<String> openDoor(JSONObject reqJson) {
        //如果是业主 限制开门次数
        if ("owner".equals(reqJson.getString("userRole"))) {
            OwnerDto ownerDto = new OwnerDto();
            ownerDto.setMemberId(reqJson.getString("userId"));
            ownerDto.setCommunityId(reqJson.getString("communityId"));
            List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto);
            if (ownerDtos == null || ownerDtos.size() < 1) {
                return ResultVo.error("没有权限开门");
            }
 
            if (!hasOpenDoorPri(ownerDtos.get(0), reqJson.getString("machineCode"))) {
                return ResultVo.error("今日开门次数已用完,请联系物业客服人员");
            }
        }
        ResultVo resultVo = dataBusInnerServiceSMOImpl.openDoor(reqJson);
        return ResultVo.createResponseEntity(resultVo);
    }
 
    private boolean hasOpenDoorPri(OwnerDto ownerDto, String machineCode) {
 
        List<OwnerAttrDto> ownerAttrDtos = ownerDto.getOwnerAttrDtos();
 
        if (ownerAttrDtos == null || ownerAttrDtos.size() < 1) {
            return true;
        }
        long openDoorCount = -1;
        for (OwnerAttrDto ownerAttrDto : ownerAttrDtos) {
            if (OwnerAttrDto.SPEC_CD_MACHINE_OPEN_COUNT.equals(ownerAttrDto.getSpecCd())) {
                openDoorCount = Long.parseLong(ownerAttrDto.getValue());
            }
        }
 
        if (openDoorCount == -1) { //说明没有配置 不限制
            return true;
        }
 
        MachineTranslateDto machineTranslateDto = new MachineTranslateDto();
        machineTranslateDto.setCommunityId(ownerDto.getCommunityId());
        machineTranslateDto.setMachineCode(machineCode);
        machineTranslateDto.setObjBId(ownerDto.getMemberId());
        machineTranslateDto.setMachineCmd(MachineTranslateDto.CMD_OPEN_DOOR);
        machineTranslateDto.setIsNow("Y");
        long count = machineTranslateInnerServiceSMOImpl.queryMachineTranslatesCount(machineTranslateDto);
 
        if (openDoorCount > count) {
            return true;
        }
 
        return false;
    }
 
    /**
     * 重启设备
     *
     * @param reqJson 请求报文信息
     * @return
     */
    @Override
    public ResponseEntity<String> restartMachine(JSONObject reqJson) {
        ResultVo resultVo = dataBusInnerServiceSMOImpl.restartMachine(reqJson);
        return ResultVo.createResponseEntity(resultVo);
    }
 
    @Override
    public ResponseEntity<String> resendIot(JSONObject reqJson) {
        ResultVo resultVo = dataBusInnerServiceSMOImpl.resendIot(reqJson);
        return ResultVo.createResponseEntity(resultVo);
    }
 
    @Override
    public ResponseEntity<String> getQRcode(JSONObject reqJson) {
        //如果是业主 限制开门次数
 
        OwnerDto ownerDto = new OwnerDto();
        ownerDto.setMemberId(reqJson.getString("userId"));
        ownerDto.setCommunityId(reqJson.getString("communityId"));
        List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto);
        if (ownerDtos == null || ownerDtos.size() < 1) {
            return ResultVo.error("没有权限开门");
        }
 
        ResultVo resultVo = dataBusInnerServiceSMOImpl.getQRcode(reqJson);
        return ResultVo.createResponseEntity(resultVo);
    }
}