generate/src/main/java/com/ojq/controller/TravelCountController.java
New file @@ -0,0 +1,20 @@ package com.ojq.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 前端控制器 * </p> * * @author ojq * @since 2023-10-06 */ @RestController @RequestMapping("/travel-count") public class TravelCountController { } generate/src/main/java/com/ojq/controller/TravelDetailController.java
New file @@ -0,0 +1,20 @@ package com.ojq.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 前端控制器 * </p> * * @author ojq * @since 2023-10-06 */ @RestController @RequestMapping("/travel-detail") public class TravelDetailController { } generate/src/main/java/com/ojq/domain/TravelCount.java
New file @@ -0,0 +1,105 @@ package com.ojq.domain; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * * </p> * * @author ojq * @since 2023-10-06 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("travel_count") public class TravelCount implements Serializable { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 所属用户id */ private Long uid; /** * 旅游名称 */ private String name; /** * 旅游去向 */ private String destination; /** * 旅游开始时间 */ private LocalDateTime startTime; /** * 旅游结束时间 */ private LocalDateTime endTime; /** * 旅游性质 */ private String property; /** * 旅游方式 */ private String manner; /** * 共计门票费 */ private String entranceTotal; /** * 共计交通费 */ private String travelTotal; /** * 共计住宿费 */ private String stayTotal; /** * 共计餐费 */ private String eatTotal; /** * 共计团费 */ private String groupTotal; /** * 总额 */ private String totalPrice; /** * 创建时间 */ private LocalDateTime createTime; } generate/src/main/java/com/ojq/domain/TravelDetail.java
New file @@ -0,0 +1,95 @@ package com.ojq.domain; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * * </p> * * @author ojq * @since 2023-10-06 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("travel_detail") public class TravelDetail implements Serializable { private static final long serialVersionUID = 1L; /** * 主键id */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 对应的统计表的id */ private Long cid; /** * 行程时间 */ private LocalDateTime happenDate; /** * 行程地点 */ private String address; /** * 门票费 */ private String entrance; /** * 住宿酒店 */ private String hotel; /** * 住宿费用 */ private String stay; /** * 餐费 */ private String eat; /** * 交通费 */ private String travel; /** * 电子文件路径 */ private String url; /** * 出行方式 */ private String travelMode; /** * 车次/航班 */ private String flight; /** * 使用证件 */ private String document; } generate/src/main/java/com/ojq/mapper/TravelCountMapper.java
New file @@ -0,0 +1,16 @@ package com.ojq.mapper; import com.ojq.domain.TravelCount; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * Mapper 接口 * </p> * * @author ojq * @since 2023-10-06 */ public interface TravelCountMapper extends BaseMapper<TravelCount> { } generate/src/main/java/com/ojq/mapper/TravelDetailMapper.java
New file @@ -0,0 +1,16 @@ package com.ojq.mapper; import com.ojq.domain.TravelDetail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * Mapper 接口 * </p> * * @author ojq * @since 2023-10-06 */ public interface TravelDetailMapper extends BaseMapper<TravelDetail> { } generate/src/main/java/com/ojq/service/ITravelCountService.java
New file @@ -0,0 +1,16 @@ package com.ojq.service; import com.ojq.domain.TravelCount; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 服务类 * </p> * * @author ojq * @since 2023-10-06 */ public interface ITravelCountService extends IService<TravelCount> { } generate/src/main/java/com/ojq/service/ITravelDetailService.java
New file @@ -0,0 +1,16 @@ package com.ojq.service; import com.ojq.domain.TravelDetail; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 服务类 * </p> * * @author ojq * @since 2023-10-06 */ public interface ITravelDetailService extends IService<TravelDetail> { } generate/src/main/java/com/ojq/service/impl/TravelCountServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.ojq.service.impl; import com.ojq.domain.TravelCount; import com.ojq.mapper.TravelCountMapper; import com.ojq.service.ITravelCountService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author ojq * @since 2023-10-06 */ @Service public class TravelCountServiceImpl extends ServiceImpl<TravelCountMapper, TravelCount> implements ITravelCountService { } generate/src/main/java/com/ojq/service/impl/TravelDetailServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.ojq.service.impl; import com.ojq.domain.TravelDetail; import com.ojq.mapper.TravelDetailMapper; import com.ojq.service.ITravelDetailService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author ojq * @since 2023-10-06 */ @Service public class TravelDetailServiceImpl extends ServiceImpl<TravelDetailMapper, TravelDetail> implements ITravelDetailService { } generate/src/main/resources/mapper/TravelDetailMapper.xml
New file @@ -0,0 +1,5 @@ <?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="com.ojq.mapper.TravelDetailMapper"> </mapper> generate/src/main/resources/mapper/TravelDetailService.xml
New file @@ -0,0 +1,5 @@ <?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="com.ojq.mapper.TravelCountMapper"> </mapper> ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/TravelCountController.java
New file @@ -0,0 +1,124 @@ package com.ruoyi.web.controller.zhang; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.domain.TravelCount; import com.ruoyi.service.TravelCountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.List; import static com.ruoyi.common.core.page.TableSupport.PAGE_NUM; import static com.ruoyi.common.core.page.TableSupport.PAGE_SIZE; /** * <p> * 前端控制器 * </p> * * @author ojq * @since 2023-10-06 */ @RestController @RequestMapping("/travel/count") public class TravelCountController { @Autowired private TravelCountService travelCountService; @GetMapping("/all") public AjaxResult listAll(){ SysUser user = SecurityUtils.getLoginUser().getUser(); Long userId = user.getUserId(); Integer pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1); Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10); return travelCountService.selectDataList(userId,pageNum,pageSize); } // /** // * 导出旅游统计情况记录列表 // */ //// @PreAuthorize("@ss.hasPermi('system:property:export')") // @Log(title = "旅游统计情况记录", businessType = BusinessType.EXPORT) // @PostMapping("/export") // public void export(HttpServletResponse response, TravelCount travelCount) // { // SysUser user = SecurityUtils.getLoginUser().getUser(); // Long userId = user.getUserId(); // // List<TravelCount> list = travelCountService.selectExperienceList(userId); // log.info("导出记录为:{}",list); // ExcelUtil<TravelCount> util = new ExcelUtil<>(TravelCount.class); // util.exportExcel(response, list, "旅游统计情况记录数据"); // } //// // // /** // * 导入旅游统计情况记录列表 // */ // @Log(title = "用户管理", businessType = BusinessType.IMPORT) // @PostMapping("/importData") // public AjaxResult importData(@RequestParam("excelImport") MultipartFile file) throws Exception // { // SysUser user = SecurityUtils.getLoginUser().getUser(); // Long userId = user.getUserId(); // // boolean flag=travelCountService.importExcel(file,userId); // if(flag){ // return AjaxResult.success("导入数据成功"); // } // return AjaxResult.error("导入数据失败"); // } /** * 新增旅游统计情况记录 */ // @PreAuthorize("@ss.hasPermi('system:property:add')") @Log(title = "旅游统计情况记录", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody TravelCount travelCount) { SysUser user = SecurityUtils.getLoginUser().getUser(); Long userId = user.getUserId(); travelCount.setUid(userId); travelCountService.save(travelCount); return AjaxResult.success(); } /** * 修改旅游统计情况记录 */ // @PreAuthorize("@ss.hasPermi('system:property:edit')") @Log(title = "旅游统计情况记录", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody TravelCount travelCount) { travelCountService.updateById(travelCount); return AjaxResult.success(); } // /** * 批量删除旅游统计情况记录 */ // @PreAuthorize("@ss.hasPermi('system:property:remove')") @Log(title = "旅游统计情况记录", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { travelCountService.removeData(Arrays.asList(ids)); return AjaxResult.success(); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/TravelDetailController.java
New file @@ -0,0 +1,54 @@ package com.ruoyi.web.controller.zhang; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.domain.TravelDetail; import com.ruoyi.service.TravelDetailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.websocket.server.PathParam; import java.util.Arrays; import java.util.List; /** * <p> * 前端控制器 * </p> * * @author ojq * @since 2023-10-06 */ @RestController @RequestMapping("/travel/detail") public class TravelDetailController { @Autowired TravelDetailService travelDetailService; @GetMapping() public AjaxResult getDataByCid(@PathParam("cid") Long cid){ List<TravelDetail> travelDetailList = travelDetailService.getDataByCid(cid); return AjaxResult.success(travelDetailList); } @PostMapping() public AjaxResult addData(@RequestBody TravelDetail travelDetail){ travelDetailService.save(travelDetail); return AjaxResult.success(); } @PutMapping() public AjaxResult updateData(@RequestBody TravelDetail travelDetail){ travelDetailService.updateById(travelDetail); return AjaxResult.success(); } @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { travelDetailService.removeByIds(Arrays.asList(ids)); return AjaxResult.success(); } } ruoyi-generator/src/main/resources/mapper/generator/TravelDetailService.xml
ruoyi-quartz/src/main/resources/mapper/quartz/TravelDetailService.xml
zhang-content/src/main/java/com/ruoyi/domain/TravelCount.java
New file @@ -0,0 +1,109 @@ package com.ruoyi.domain; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * * </p> * * @author ojq * @since 2023-10-06 */ @Data @TableName("travel_count") public class TravelCount implements Serializable { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 所属用户id */ private Long uid; /** * 旅游名称 */ private String name; /** * 旅游去向 */ private String destination; /** * 旅游开始时间 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date startTime; /** * 旅游结束时间 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date endTime; /** * 旅游性质 */ private String property; /** * 旅游方式 */ private String manner; /** * 共计门票费 */ private Double entranceTotal; /** * 共计交通费 */ private Double travelTotal; /** * 共计住宿费 */ private Double stayTotal; /** * 共计餐费 */ private Double eatTotal; /** * 共计团费 */ private Double groupTotal; /** * 总额 */ private Double totalPrice; /** * 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date createTime; } zhang-content/src/main/java/com/ruoyi/domain/TravelDetail.java
New file @@ -0,0 +1,99 @@ package com.ruoyi.domain; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * * </p> * * @author ojq * @since 2023-10-06 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("travel_detail") public class TravelDetail implements Serializable { private static final long serialVersionUID = 1L; /** * 主键id */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 对应的统计表的id */ private Long cid; /** * 行程时间 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date happenDate; /** * 行程地点 */ private String address; /** * 门票费 */ private Double entrance; /** * 住宿酒店 */ private String hotel; /** * 住宿费用 */ private Double stay; /** * 餐费 */ private Double eat; /** * 交通费 */ private Double travel; /** * 电子文件路径 */ private String url; /** * 出行方式 */ private String travelMode; /** * 车次/航班 */ private String flight; /** * 使用证件 */ private String document; } zhang-content/src/main/java/com/ruoyi/mapper/TravelCountMapper.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.domain.TravelCount; import org.apache.ibatis.annotations.Mapper; /** * <p> * Mapper 接口 * </p> * * @author ojq * @since 2023-10-06 */ @Mapper public interface TravelCountMapper extends BaseMapper<TravelCount> { } zhang-content/src/main/java/com/ruoyi/mapper/TravelDetailMapper.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.domain.TravelDetail; import org.apache.ibatis.annotations.Mapper; /** * <p> * Mapper 接口 * </p> * * @author ojq * @since 2023-10-06 */ @Mapper public interface TravelDetailMapper extends BaseMapper<TravelDetail> { } zhang-content/src/main/java/com/ruoyi/service/TravelCountService.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.domain.TravelCount; import java.util.List; /** * <p> * 服务类 * </p> * * @author ojq * @since 2023-10-06 */ public interface TravelCountService extends IService<TravelCount> { AjaxResult selectDataList(Long userId, Integer pageNum, Integer pageSize); void removeData(List<Long> list); } zhang-content/src/main/java/com/ruoyi/service/TravelDetailService.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.domain.TravelDetail; import java.util.List; /** * <p> * 服务类 * </p> * * @author ojq * @since 2023-10-06 */ public interface TravelDetailService extends IService<TravelDetail> { List<TravelDetail> getDataByCid(Long cid); void removeBatchByCid(List<Long> cid); } zhang-content/src/main/java/com/ruoyi/service/impl/TravelCountServiceImpl.java
New file @@ -0,0 +1,86 @@ package com.ruoyi.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.MapUtils; import com.ruoyi.domain.TravelCount; import com.ruoyi.domain.TravelDetail; import com.ruoyi.mapper.TravelCountMapper; import com.ruoyi.service.TravelCountService; import com.ruoyi.service.TravelDetailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.DecimalFormat; import java.util.List; /** * <p> * 服务实现类 * </p> * * @author ojq * @since 2023-10-06 */ @Service public class TravelCountServiceImpl extends ServiceImpl<TravelCountMapper, TravelCount> implements TravelCountService { @Autowired private TravelDetailService travelDetailService; @Autowired private TravelCountService travelCountService; @Override public AjaxResult selectDataList(Long userId, Integer pageNum, Integer pageSize) { LambdaQueryWrapper<TravelCount> lqw = new LambdaQueryWrapper<>(); lqw.eq(TravelCount::getUid,userId); Page<TravelCount> resultPage = page(new Page<>(pageNum, pageSize), lqw); resultPage.getRecords().forEach(data ->{ //先找到对应一条统计数据的所有详细数据 List<TravelDetail> travelDetailList = travelDetailService.getDataByCid(data.getId()); double entranceTotal = 0; double eatTotal = 0; double stayTotal = 0; double travelTotal = 0; //把所有详细数据的费用值累加起来 for (TravelDetail detail : travelDetailList) { entranceTotal+=detail.getEntrance(); eatTotal+=detail.getEat(); stayTotal+=detail.getStay(); travelTotal+=detail.getTravel(); } data.setEntranceTotal(entranceTotal); data.setEatTotal(eatTotal); data.setStayTotal(stayTotal); data.setTravelTotal(travelTotal); DecimalFormat df = new DecimalFormat("0.00"); data.setTotalPrice(Double.parseDouble(df.format(entranceTotal+eatTotal+data.getGroupTotal()+stayTotal+travelTotal))); }); return AjaxResult.success(MapUtils.getResult(resultPage)); } /** * 批量删除统计表数据 */ @Override @Transactional public void removeData(List<Long> list) { //在删除统计表数据之前,要先删除明细表的数据 travelDetailService.removeBatchByCid(list); //再删除自己表的数据 travelCountService.removeBatchByIds(list); } } zhang-content/src/main/java/com/ruoyi/service/impl/TravelDetailServiceImpl.java
New file @@ -0,0 +1,41 @@ package com.ruoyi.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.domain.TravelDetail; import com.ruoyi.mapper.TravelDetailMapper; import com.ruoyi.service.TravelDetailService; import org.springframework.stereotype.Service; import java.util.List; /** * <p> * 服务实现类 * </p> * * @author ojq * @since 2023-10-06 */ @Service public class TravelDetailServiceImpl extends ServiceImpl<TravelDetailMapper, TravelDetail> implements TravelDetailService { @Override public List<TravelDetail> getDataByCid(Long cid) { LambdaQueryWrapper<TravelDetail> lqw = new LambdaQueryWrapper<>(); lqw.eq(TravelDetail::getCid,cid); lqw.orderBy(true,true,TravelDetail::getHappenDate); return list(lqw); } @Override public void removeBatchByCid(List<Long> cid) { for (Long c : cid) { LambdaQueryWrapper<TravelDetail> lqw = new LambdaQueryWrapper<>(); lqw.eq(TravelDetail::getCid,c); remove(lqw); } } }