智慧农业后台管理
Administrator
2022-07-16 d363694ff8509c0c8a010967b8ad38fbf5155e91
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
package org.springblade.modules.traceability.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.zxing.WriterException;
import org.springblade.common.config.TraceabilityCodeConfig;
import org.springblade.common.utils.QRCodeUtil;
import org.springblade.modules.farm.entity.Farm;
import org.springblade.modules.farm.entity.FarmPaper;
import org.springblade.modules.farm.entity.FarmingRecord;
import org.springblade.modules.farm.service.FarmPaperService;
import org.springblade.modules.farm.service.FarmService;
import org.springblade.modules.farm.service.FarmingRecordService;
import org.springblade.modules.farm.vo.FarmPaperVO;
import org.springblade.modules.farm.vo.FarmVO;
import org.springblade.modules.farm.vo.FarmingRecordVO;
import org.springblade.modules.lang.entity.Land;
import org.springblade.modules.lang.service.ILandService;
import org.springblade.modules.lang.vo.LandVO;
import org.springblade.modules.recovery.service.RecoveryService;
import org.springblade.modules.recovery.vo.RecoveryVO;
import org.springblade.modules.traceability.dto.TraceabilityDTO;
import org.springblade.modules.traceability.dto.TraceabilityDetailDTO;
import org.springblade.modules.traceability.entity.SweepRecord;
import org.springblade.modules.traceability.entity.Traceability;
import org.springblade.modules.traceability.mapper.TraceabilityMapper;
import org.springblade.modules.traceability.service.SweepRecordService;
import org.springblade.modules.traceability.service.TraceabilityService;
import org.springblade.modules.traceability.vo.TraceabilityVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sun.misc.BASE64Encoder;
 
import javax.sound.midi.Receiver;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
 
/**
 * 溯源码表服务实现类
 * @since 2022-05-19
 * @author zhongrj
 */
@Service
public class TraceabilityServiceImpl extends ServiceImpl<TraceabilityMapper, Traceability> implements TraceabilityService {
 
    @Autowired
    private RecoveryService recoveryService;
 
    @Autowired
    private FarmingRecordService farmingRecordService;
 
    @Autowired
    private FarmService farmService;
 
    @Autowired
    private FarmPaperService farmPaperService;
 
    @Autowired
    private ILandService landService;
 
    @Autowired
    private SweepRecordService sweepRecordService;
 
    /**
     * 自定义分页
     *
     * @param page
     * @param traceability
     * @return
     */
    @Override
    public IPage<TraceabilityVO> selectTraceabilityPage(IPage<TraceabilityVO> page, TraceabilityVO traceability) {
        return page.setRecords(baseMapper.selectTraceabilityPage(page, traceability));
    }
 
    @Override
    public String selectRevorid(String code) {
        return baseMapper.selectRevorid(code);
    }
 
    /**
     * 获取溯源简介信息
     * @param traceability
     * @return
     */
    @Override
    public TraceabilityDTO getSimpleInfo(Traceability traceability) {
        TraceabilityDTO simpleInfo = baseMapper.getSimpleInfo(traceability);
        simpleInfo.setCode(traceability.getCode());
        //获取二维码信息
        String url = TraceabilityCodeConfig.getCodeUrl();
        String encoded = null;
        try {
            encoded = URLEncoder.encode(traceability.getCode(),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        String content = url + "?code=" + encoded;
        byte[] qrCodeImage = new byte[0];
        try {
            qrCodeImage = QRCodeUtil.getQRCodeImage(content, 350, 350);
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String encode = new BASE64Encoder().encode(qrCodeImage);
        simpleInfo.setQrcode("data:image/png;base64,"+encode);
        //返回
        return simpleInfo;
    }
 
    /**
     * 获取溯源详情信息(包含农产品信息,认证检测信息,产地(地块信息),农事记录,企业信息)
     * @param traceability
     * @return
     */
    @Override
    public TraceabilityDetailDTO getTraceabilityDetailInfo(Traceability traceability) {
 
        TraceabilityDetailDTO dto = new TraceabilityDetailDTO();
        int count = 0;
        //根据溯源码编号查询溯源信息
        Traceability traceability1 = baseMapper.selectOne(new QueryWrapper<>(traceability));
        //记录扫描记录
        if (null!=traceability.getBind() && traceability.equals("0")){
            //插入扫描记录
            SweepRecord sweepRecord = new SweepRecord();
            sweepRecord.setCreateTime(new Date());
            sweepRecord.setCode(traceability1.getId().toString());
            sweepRecord.setDeptId(traceability1.getDeptId());
            //新增
            sweepRecordService.save(sweepRecord);
        }
        //1. 查询农产品采收记录信息
        RecoveryVO recoveryVO = recoveryService.getRecoveryDetail(traceability1.getRecoveryId());
        //2. 查询相关检测信息
        List<FarmPaperVO> farmPaperList = farmPaperService.getFarmPaperList(traceability1.getDeptId());
        //3. 查询产地(地块)信息
        LandVO land = new LandVO();
        land.setId(Long.parseLong(recoveryVO.getLandId()));
        LandVO landInfo = (LandVO)landService.getLandInfo(land);
        //4. 查询农事记录信息(种植开始起)
        List<FarmingRecordVO> farmingRecordVOList = farmingRecordService.getFarmingRecordByFarmPlantId(recoveryVO);
        //5. 查询企业信息
        Farm farm = new Farm();
        farm.setDeptId(traceability1.getDeptId());
        Farm farmVO = farmService.getOne(new QueryWrapper<>(farm));
        //6. 数据封装
        dto.setRecoveryVO(recoveryVO);
        dto.setFarm(farmVO);
        dto.setRecordVOList(farmingRecordVOList);
        dto.setPaperVOList(farmPaperList);
        dto.setLandVO(landInfo);
        //计算百分比
        if (null!=recoveryVO){
            count = count + 20;
        }
        if (null!=farmVO){
            count = count + 20;
        }
        if (null==landInfo){
            count = count + 20;
        }
        if (farmingRecordVOList.size()>0){
            count = count + 20;
        }
        if (farmPaperList.size()>0){
            count = count + 20;
        }
        dto.setNum(count);
        //返回数据
        return dto;
    }
 
    /**
     * 自定义查询,不分页
     * @param traceability
     * @return
     */
    @Override
    public List<TraceabilityVO> getTraceabilityList(TraceabilityVO traceability) {
        return baseMapper.getTraceabilityList(traceability);
    }
 
    /**
     * 获取溯源详情信息(包含农产品信息,认证检测信息,产地(地块信息),农事记录,企业信息)扫码
     * @param traceability
     * @return
     */
    @Override
    public TraceabilityDetailDTO getTraceabilityDetailInfos(Traceability traceability) {
        TraceabilityDetailDTO dto = new TraceabilityDetailDTO();
        int count = 0;
        //根据溯源码编号查询溯源信息
        Traceability traceability1 = baseMapper.selectOne(new QueryWrapper<>(traceability));
        //记录扫描记录
        SweepRecord sweepRecord = new SweepRecord();
        sweepRecord.setCreateTime(new Date());
        sweepRecord.setCode(traceability1.getId().toString());
        sweepRecord.setDeptId(traceability1.getDeptId());
        //新增
        sweepRecordService.save(sweepRecord);
        //1. 查询农产品采收记录信息
        RecoveryVO recoveryVO = recoveryService.getRecoveryDetail(traceability1.getRecoveryId());
        //2. 查询相关检测信息
        List<FarmPaperVO> farmPaperList = farmPaperService.getFarmPaperList(traceability1.getDeptId());
        //3. 查询产地(地块)信息
        LandVO land = new LandVO();
        land.setId(Long.parseLong(recoveryVO.getLandId()));
        LandVO landInfo = (LandVO)landService.getLandInfo(land);
        //4. 查询农事记录信息(种植开始起)
        List<FarmingRecordVO> farmingRecordVOList = farmingRecordService.getFarmingRecordByFarmPlantId(recoveryVO);
        //5. 查询企业信息
        Farm farm = new Farm();
        farm.setDeptId(traceability1.getDeptId());
        Farm farmVO = farmService.getOne(new QueryWrapper<>(farm));
        //6. 数据封装
        dto.setRecoveryVO(recoveryVO);
        dto.setFarm(farmVO);
        dto.setRecordVOList(farmingRecordVOList);
        dto.setPaperVOList(farmPaperList);
        dto.setLandVO(landInfo);
        //返回
        return dto;
    }
}