智慧农业后台管理
Administrator
2022-07-11 e0613d9a7d3047fadd97ce9ee9012b68ee829801
溯源扫描基础接口新增,统计查询接口新增,用户农场绑定,地块农场绑定
8 files modified
8 files added
500 ■■■■■ changed files
src/main/java/org/springblade/modules/farm/controller/FarmController.java 3 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/farm/service/impl/FarmServiceImpl.java 1 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/lang/controller/LandController.java 52 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/lang/entity/Land.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/lang/mapper/LandMapper.xml 16 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/entity/User.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/controller/SweepRecordController.java 121 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/dto/SweepRecordDTO.java 42 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/entity/SweepRecord.java 48 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/mapper/SweepRecordMapper.java 34 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/mapper/SweepRecordMapper.xml 49 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/service/SweepRecordService.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/service/impl/SweepRecordServiceImpl.java 52 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/service/impl/TraceabilityServiceImpl.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/traceability/vo/SweepRecordVO.java 21 ●●●●● patch | view | raw | blame | history
src/main/resources/application.yml 1 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/farm/controller/FarmController.java
@@ -24,11 +24,13 @@
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.farm.entity.Farm;
import org.springblade.modules.farm.service.FarmService;
import org.springblade.modules.farm.vo.FarmVO;
import org.springblade.modules.system.vo.RoleVO;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -178,5 +180,4 @@
        map.put("rynum", integer1);
        return R.data(map);
    }
}
src/main/java/org/springblade/modules/farm/service/impl/FarmServiceImpl.java
@@ -5,6 +5,7 @@
import org.springblade.modules.farm.mapper.FarmMapper;
import org.springblade.modules.farm.service.FarmService;
import org.springblade.modules.farm.vo.FarmVO;
import org.springblade.modules.system.entity.Dept;
import org.springframework.stereotype.Service;
import java.util.List;
src/main/java/org/springblade/modules/lang/controller/LandController.java
@@ -123,29 +123,33 @@
            //替换分号为逗号
            String replaceAll = sNull.replaceAll(";", ",");
            land.setLandRange("'POLYGON((" + replaceAll + "))'");
        }
        List<Point2D.Double> points = new ArrayList<Point2D.Double>();
        double v1;
        String landRange = range;
        String[] s1 = landRange.split(";");
        for (String ss : s1) {
            String[] temp = ss.split(",");
            Point2D.Double point = new Point2D.Double(Double.parseDouble(temp[0]),
                Double.parseDouble(temp[1]));
            points.add(point);
        }
        PolyginArea tp = new PolyginArea();
        double area = tp.getAreaByxy(points);
        Integer landUnit = land.getLandUnit();
        //(0: 亩  1:分  2:平方米
        if (landUnit == 0) {
            double v = area * 0.0015;
            v1 = (double) Math.round(v * 100) / 100;
        } else if (landUnit == 1) {
            double v = area * 0.015;
            v1 = (double) Math.round(v * 100) / 100;
        } else {
            v1 = (double) Math.round(area * 100) / 100;
            List<Point2D.Double> points = new ArrayList<Point2D.Double>();
            double v1;
            String landRange = range;
            String[] s1 = landRange.split(";");
            for (String ss : s1) {
                String[] temp = ss.split(",");
                Point2D.Double point = new Point2D.Double(Double.parseDouble(temp[0]),
                    Double.parseDouble(temp[1]));
                points.add(point);
            }
            PolyginArea tp = new PolyginArea();
            double area = tp.getAreaByxy(points);
            Integer landUnit = land.getLandUnit();
            //(0: 亩  1:分  2:平方米
            if (landUnit == 0) {
                double v = area * 0.0015;
                v1 = (double) Math.round(v * 100) / 100;
            } else if (landUnit == 1) {
                double v = area * 0.015;
                v1 = (double) Math.round(v * 100) / 100;
            } else {
                v1 = (double) Math.round(area * 100) / 100;
            }
            land.setLandArea(String.valueOf(v1));
        }else {
            land.setLandArea("0");
        }
        //图片转换上传
@@ -159,7 +163,7 @@
                e.printStackTrace();
            }
        }
        land.setLandArea(String.valueOf(v1));
        land.setType(1);
        return R.status(landService.saveLandInfo(land));
    }
src/main/java/org/springblade/modules/lang/entity/Land.java
@@ -54,6 +54,7 @@
     * 地块面积
     */
    private String landArea;
    private String url;
    /**
     * 地块范围
@@ -72,4 +73,9 @@
     */
    private String deptId;
    /**
     * 农场id
     */
    private String farmId;
}
src/main/java/org/springblade/modules/lang/mapper/LandMapper.xml
@@ -85,13 +85,18 @@
    <insert id="saveLandInfo">
        insert into sys_land
        (user_id,land_name,land_type,land_area,land_range,type,land_unit,dept_id,url)
        (user_id,land_name,land_type,land_area,land_range,type,land_unit,dept_id,url,farm_id)
        values
        (#{land.userId},#{land.landName},#{land.landType},#{land.landArea},
        <if test="land.landRange!=null and land.landRange!=''">
            ST_GeomFromText(${land.landRange}),
        </if>
        #{land.type},#{land.landUnit},#{land.deptId},#{land.url})
        <choose>
            <when test="land.landRange!=null and land.landRange!=''">
                ST_GeomFromText(${land.landRange}),
            </when>
            <otherwise>
                null,
            </otherwise>
        </choose>
        #{land.type},#{land.landUnit},#{land.deptId},#{land.url},#{land.farmId})
    </insert>
    <!--详情信息(自定义查询)-->
@@ -121,6 +126,7 @@
        </if>
        type = #{land.type},
        land_unit = #{land.landUnit},
        farm_id = #{land.farmId},
        url = #{land.url},
        where id = #{land.id}
    </update>
src/main/java/org/springblade/modules/system/entity/User.java
@@ -92,5 +92,10 @@
     */
    private String postId;
    /**
     * 农场id(负责的农场)
     */
    private String farmId;
}
src/main/java/org/springblade/modules/traceability/controller/SweepRecordController.java
New file
@@ -0,0 +1,121 @@
package org.springblade.modules.traceability.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.traceability.entity.SweepRecord;
import org.springblade.modules.traceability.service.SweepRecordService;
import org.springblade.modules.traceability.vo.SweepRecordVO;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Date;
/**
 * 溯源扫描记录控制器
 * @since 2022-05-19
 * @author zhongrj
 */
@RestController
@AllArgsConstructor
@RequestMapping("/sweepRecord")
public class SweepRecordController extends BladeController {
    private final SweepRecordService sweepRecordService;
    /**
     * 详情
     */
    @GetMapping("/detail")
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "详情", notes = "传入sweepRecord")
    public R<SweepRecord> detail(SweepRecord sweepRecord) {
        SweepRecord detail = sweepRecordService.getOne(Condition.getQueryWrapper(sweepRecord));
        return R.data(detail);
    }
    /**
     * 分页
     */
    @GetMapping("/list")
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "分页", notes = "传入sweepRecord")
    public R<IPage<SweepRecord>> list(SweepRecord sweepRecord, Query query) {
        IPage<SweepRecord> pages = sweepRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(sweepRecord));
        return R.data(pages);
    }
    /**
     * 自定义分页
     */
    @GetMapping("/page")
    @ApiOperationSupport(order = 3)
    @ApiOperation(value = "分页", notes = "传入sweepRecord")
    public R<IPage<SweepRecordVO>> page(SweepRecordVO sweepRecord, Query query) {
        IPage<SweepRecordVO> pages = sweepRecordService.selectSweepRecordPage(Condition.getPage(query), sweepRecord);
        return R.data(pages);
    }
    /**
     * 新增
     */
    @PostMapping("/save")
    @ApiOperationSupport(order = 4)
    @Transactional(rollbackFor = Exception.class)
    public R save(@Valid @RequestBody SweepRecord sweepRecord) {
        sweepRecord.setCreateTime(new Date());
        //新增
        return R.status(sweepRecordService.save(sweepRecord));
    }
    /**
     * 修改
     */
    @PostMapping("/update")
    @ApiOperationSupport(order = 5)
    @ApiOperation(value = "修改", notes = "传入sweepRecord")
    @Transactional(rollbackFor = Exception.class)
    public R update(@Valid @RequestBody SweepRecord sweepRecord) {
        //更新并返回
        return R.status(sweepRecordService.updateById(sweepRecord));
    }
    /**
     * 新增或修改
     */
    @PostMapping("/submit")
    @ApiOperationSupport(order = 6)
    @ApiOperation(value = "新增或修改", notes = "传入sweepRecord")
    public R submit(@Valid @RequestBody SweepRecord sweepRecord) {
        return R.status(sweepRecordService.saveOrUpdate(sweepRecord));
    }
    /**
     * 删除
     */
    @PostMapping("/remove")
    @ApiOperationSupport(order = 7)
    @ApiOperation(value = "逻辑删除", notes = "传入ids")
    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
        return R.status(sweepRecordService.removeByIds(Func.toLongList(ids)));
    }
    /**
     * 获取扫描次数统计数据
     * @param sweepRecord
     * @return
     */
    @GetMapping("/getSweepRecordStatistics")
    public R getSweepRecordStatistics(SweepRecordVO sweepRecord){
        return R.data(sweepRecordService.getSweepRecordStatistics(sweepRecord));
    }
}
src/main/java/org/springblade/modules/traceability/dto/SweepRecordDTO.java
New file
@@ -0,0 +1,42 @@
package org.springblade.modules.traceability.dto;
import lombok.Data;
import java.io.Serializable;
/**
 * @author zhongrj
 */
@Data
public class SweepRecordDTO implements Serializable {
    /**
     * 本日扫描总次数
     */
    private Integer todayNum;
    /**
     * 昨日扫描总次数
     */
    private Integer yesterdayNum;
    /**
     * 本周扫描总次数
     */
    private Integer thisWeekNum;
    /**
     * 去周扫描总次数
     */
    private Integer lastWeekNum;
    /**
     * 本月扫描总次数
     */
    private Integer thisMonthNum;
    /**
     * 上个月扫描总次数
     */
    private Integer lastMonthNum;
}
src/main/java/org/springblade/modules/traceability/entity/SweepRecord.java
New file
@@ -0,0 +1,48 @@
package org.springblade.modules.traceability.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * 溯源扫描记录表实体类
 * @since 2022-07-11
 * @author zhongrj
 */
@Data
@TableName("sys_sweep_record")
public class SweepRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    /**
     * 溯源码编号
     */
    private String code;
    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 单位id
     */
    private String deptId;
}
src/main/java/org/springblade/modules/traceability/mapper/SweepRecordMapper.java
New file
@@ -0,0 +1,34 @@
package org.springblade.modules.traceability.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.modules.traceability.dto.SweepRecordDTO;
import org.springblade.modules.traceability.entity.SweepRecord;
import org.springblade.modules.traceability.vo.SweepRecordVO;
import java.util.List;
/**
 *  溯源扫描记录Mapper 接口
 * @since 2022-07-11
 * @author zhongrj
 */
public interface SweepRecordMapper extends BaseMapper<SweepRecord> {
    /**
     * 自定义分页
     *
     * @param page
     * @param sweepRecord
     * @return
     */
    List<SweepRecordVO> selectSweepRecordPage(@Param("page") IPage page, @Param("sweepRecord") SweepRecordVO sweepRecord);
    /**
     * 获取扫描次数统计数据
     * @param sweepRecord
     * @return
     */
    List<Integer> getSweepRecordStatistics(@Param("sweepRecord") SweepRecordVO sweepRecord);
}
src/main/java/org/springblade/modules/traceability/mapper/SweepRecordMapper.xml
New file
@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.modules.traceability.mapper.SweepRecordMapper">
    <!--自定义查询溯源码扫描记录分页数据-->
    <select id="selectSweepRecordPage" resultType="org.springblade.modules.traceability.vo.SweepRecordVO">
        select * from sys_sweep_record
        where 1=1
    </select>
    <!--获取扫描次数统计数据-->
    <select id="getSweepRecordStatistics" resultType="java.lang.Integer">
        select count(*) from sys_sweep_record  ssr left join sys_traceability st on ssr.code = st.id
        left join sys_recovery sr on sr.id = st.recovery_id
        left join sys_land sl on sl.id = sr.land_id
        WHERE DAY(ssr.create_time) = NOW()
        and sl.farm_id = #{sweepRecord.farmId}
        union all
        select count(*) from sys_sweep_record  ssr left join sys_traceability st on ssr.code = st.id
        left join sys_recovery sr on sr.id = st.recovery_id
        left join sys_land sl on sl.id = sr.land_id
        WHERE TO_DAYS( NOW( ) ) - TO_DAYS( ssr.create_time) = 1
        and sl.farm_id = #{sweepRecord.farmId}
        union all
        select count(*) from sys_sweep_record  ssr left join sys_traceability st on ssr.code = st.id
        left join sys_recovery sr on sr.id = st.recovery_id
        left join sys_land sl on sl.id = sr.land_id
        WHERE YEARWEEK(date_format(ssr.create_time,'%Y-%m-%d')) = YEARWEEK(now())
        and sl.farm_id = #{sweepRecord.farmId}
        union all
        select count(*) from sys_sweep_record  ssr left join sys_traceability st on ssr.code = st.id
        left join sys_recovery sr on sr.id = st.recovery_id
        left join sys_land sl on sl.id = sr.land_id
        WHERE YEARWEEK(date_format(ssr.create_time,'%Y-%m-%d')) = YEARWEEK(now())-1
        and sl.farm_id = #{sweepRecord.farmId}
        union all
        select count(*) from sys_sweep_record  ssr left join sys_traceability st on ssr.code = st.id
        left join sys_recovery sr on sr.id = st.recovery_id
        left join sys_land sl on sl.id = sr.land_id
        WHERE DATE_FORMAT( ssr.create_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
        and sl.farm_id = #{sweepRecord.farmId}
        union all
        select count(*) from sys_sweep_record  ssr left join sys_traceability st on ssr.code = st.id
        left join sys_recovery sr on sr.id = st.recovery_id
        left join sys_land sl on sl.id = sr.land_id
        WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( ssr.create_time, '%Y%m' ) ) =1
        and sl.farm_id = #{sweepRecord.farmId}
    </select>
</mapper>
src/main/java/org/springblade/modules/traceability/service/SweepRecordService.java
New file
@@ -0,0 +1,32 @@
package org.springblade.modules.traceability.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.modules.traceability.dto.SweepRecordDTO;
import org.springblade.modules.traceability.entity.SweepRecord;
import org.springblade.modules.traceability.vo.SweepRecordVO;
/**
 * 溯源码扫描记录表服务类
 * @since 2022-07-11
 * @author zhongrj
 */
public interface SweepRecordService extends IService<SweepRecord> {
    /**
     * 自定义分页
     *
     * @param page
     * @param sweepRecord
     * @return
     */
    IPage<SweepRecordVO> selectSweepRecordPage(IPage<SweepRecordVO> page, SweepRecordVO sweepRecord);
    /**
     * 获取扫描次数统计数据
     * @param sweepRecord
     * @return
     */
    SweepRecordDTO getSweepRecordStatistics(SweepRecordVO sweepRecord);
}
src/main/java/org/springblade/modules/traceability/service/impl/SweepRecordServiceImpl.java
New file
@@ -0,0 +1,52 @@
package org.springblade.modules.traceability.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.modules.traceability.dto.SweepRecordDTO;
import org.springblade.modules.traceability.entity.SweepRecord;
import org.springblade.modules.traceability.mapper.SweepRecordMapper;
import org.springblade.modules.traceability.service.SweepRecordService;
import org.springblade.modules.traceability.vo.SweepRecordVO;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * 溯源码扫描记录表服务实现类
 * @since 2022-05-19
 * @author zhongrj
 */
@Service
public class SweepRecordServiceImpl extends ServiceImpl<SweepRecordMapper, SweepRecord> implements SweepRecordService {
    /**
     * 自定义分页
     *
     * @param page
     * @param sweepRecord
     * @return
     */
    @Override
    public IPage<SweepRecordVO> selectSweepRecordPage(IPage<SweepRecordVO> page, SweepRecordVO sweepRecord) {
        return page.setRecords(baseMapper.selectSweepRecordPage(page, sweepRecord));
    }
    /**
     * 获取扫描次数统计数据
     * @param sweepRecord
     * @return
     */
    @Override
    public SweepRecordDTO getSweepRecordStatistics(SweepRecordVO sweepRecord) {
        List<Integer> statistics = baseMapper.getSweepRecordStatistics(sweepRecord);
        //数据装换
        SweepRecordDTO dto = new SweepRecordDTO();
        dto.setTodayNum(statistics.get(0));
        dto.setYesterdayNum(statistics.get(1));
        dto.setThisWeekNum(statistics.get(2));
        dto.setLastWeekNum(statistics.get(3));
        dto.setThisMonthNum(statistics.get(4));
        dto.setLastMonthNum(statistics.get(5));
        //返回
        return dto;
    }
}
src/main/java/org/springblade/modules/traceability/service/impl/TraceabilityServiceImpl.java
@@ -21,8 +21,10 @@
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;
@@ -33,6 +35,7 @@
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
/**
@@ -57,6 +60,9 @@
    @Autowired
    private ILandService landService;
    @Autowired
    private SweepRecordService sweepRecordService;
    /**
     * 自定义分页
@@ -114,10 +120,21 @@
     */
    @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("1")){
            //插入扫描记录
            SweepRecord sweepRecord = new SweepRecord();
            sweepRecord.setCreateTime(new Date());
            sweepRecord.setCode(traceability.getId().toString());
            sweepRecord.setDeptId(traceability1.getDeptId());
            //新增
            sweepRecordService.save(sweepRecord);
        }
        //1. 查询农产品采收记录信息
        RecoveryVO recoveryVO = recoveryService.getRecoveryDetail(traceability1.getRecoveryId());
        //2. 查询相关检测信息
src/main/java/org/springblade/modules/traceability/vo/SweepRecordVO.java
New file
@@ -0,0 +1,21 @@
package org.springblade.modules.traceability.vo;
import lombok.Data;
import org.springblade.modules.traceability.entity.SweepRecord;
import org.springblade.modules.traceability.entity.Traceability;
/**
 * 溯源码扫描记录表VO
 * @since 2022-07-11
 * @author zhongrj
 */
@Data
public class SweepRecordVO extends SweepRecord {
    private static final long serialVersionUID = 1L;
    /**
     * 农场id
     */
    private String farmId;
}
src/main/resources/application.yml
@@ -207,6 +207,7 @@
      - /strain/**
      - /blade-user/**
      - /traceability/**
      - /sweepRecord/**
    #授权认证配置
    auth:
      - method: ALL