Commit 6e7d6cb1 by jiang'yun

修改问题

parent ca56564e
......@@ -180,7 +180,18 @@
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!-- oss存储-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<build>
......
......@@ -8,6 +8,7 @@ import com.qianhe.system.domain.CCBNotifyInfo;
import com.qianhe.system.domain.WaterOrderLog;
import com.qianhe.system.mapper.WaterOrderLogMapper;
import com.qianhe.system.mapper.WaterOrderMapper;
import com.qianhe.system.service.IWaterOrderService;
import com.qianhe.system.utils.RSASigUtils;
import com.qianhe.system.vo.WaterOrderVo;
import lombok.extern.slf4j.Slf4j;
......@@ -39,6 +40,8 @@ public class CCBBackController {
@Autowired
private WaterOrderMapper orderMapper;
@Autowired
private IWaterOrderService orderService;
@PostMapping("/payNotify/")
public String pay(CCBNotifyInfo notifyInfo, HttpServletRequest request ) {
......@@ -62,6 +65,10 @@ public class CCBBackController {
orderVo.setOrderNum(notifyInfo.getORDERID());
orderVo.setZfsj(DateUtils.parseDateToStr("yyyy-MM-dd hh:mm:ss",DateUtils.getNowDate()));
int orderI = orderMapper.updateByOrderNum(orderVo);
//发送公众号通知
WaterOrderVo vo=new WaterOrderVo();
vo.setOrderNum(notifyInfo.getORDERID());
orderService.gzhSend(vo);
log.info("验签通过");
return "SUCCESS";
} else {
......
package com.qianhe.system.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.qianhe.system.vo.GzhVo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/msg")
public class MessageController {
@Value("${wxgzh.appId}")
private String appId;
@Value("${wxgzh.appSecret}")
private String appSecret;
@Value("${wxgzh.access-token-uri}")
private String accessTokenUri;
//根据appId、appSecret获取access_token
public String getAccessToken() {
String url = accessTokenUri;
// 利用hutool的http工具类请求获取access_token
String result = HttpUtil.get(url);
JSONObject jsonObject = JSONUtil.parseObj(result);
return jsonObject.getStr("access_token");
}
//订阅号发送
@GetMapping("/send")
public String send(){
JSONObject body=new JSONObject();
body.set("touser","orQvH6zD7pj7UG0nkUaYRsrjZ8IY");
body.set("template_id","zYyUtzBbtAtjOSJcGTJyk4ji16yqzyRByPzvMi7QwHo");
JSONObject json=new JSONObject();
json.set("character_string1",new JSONObject().set("value","20200820757539"));
json.set("phrase2",new JSONObject().set("value", "测试"));
json.set("amount4",new JSONObject().set("value","16"));
json.set("thing5",new JSONObject().set("value", "测试订阅通知"));
json.set("thing6",new JSONObject().set("value","桶装水"));
body.set("data",json);
//发送
String accessToken= getAccessToken();
String post = HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken, body.toString());
return "ok";
}
//公众号发送
@GetMapping("/gzhSend")
public void gzhSend(){
JSONObject body=new JSONObject();
//获取标签标签tagid
String accessToken= getAccessToken();
System.out.println("========================================="+accessToken);
String post = HttpUtil.post("https://api.weixin.qq.com/cgi-bin/tags/get?access_token=" + accessToken, body.toString());
System.out.println("=========================================tag"+post);
JSONObject jsonObjectTag = JSONUtil.parseObj(post);
System.out.println("=========================================jsonObjectTag"+jsonObjectTag);
int tagid=100;
//获取这个标签下的所有用户
GzhVo vo=new GzhVo();
vo.setTagid(tagid);
String url="https://api.weixin.qq.com/cgi-bin/user/tag/get?access_token=" + accessToken;
String post1 = HttpUtil.createPost(url)
.contentType("application/json")
.body(JSON.toJSONString(vo)).execute().body();
System.out.println("++++++++++++++++++++++++"+post1);
JSONObject jsonObject = JSONUtil.parseObj(post1);
System.out.println("++++++++++++++++++++++++"+jsonObject);
//发送模板消息
String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
// body.set("touser","oRYXP0xFdoL6y_KfDJqqVrSzWz3M");//姜
body.set("touser","oRYXP0yahhI3RuBY2zM5iSnudap8");//王琪
body.set("template_id","uHjot1RT24Ws9he-8EVffVHq6hQgqPVTD1Y4w8wRHg8");
JSONObject json=new JSONObject();
json.set("thing27",new JSONObject().set("value","测试"));
json.set("amount24",new JSONObject().set("value", "16"));
json.set("time4",new JSONObject().set("value","2024-04-19"));
json.set("phone_number8",new JSONObject().set("value", "13325057900"));
body.set("data",json);
String resp = HttpUtil.post(requestUrl,body.toString());
JSONObject result = JSONUtil.parseObj(resp);
System.out.println("发送消息:" + resp);
System.out.println("发送消息:" + result);
}
}
\ No newline at end of file
......@@ -356,4 +356,13 @@ public class WaterOrderController extends BaseController
public AjaxResult updateOrderPayType(@RequestBody WaterOrderVo waterOrderVo){
return toAjax(waterOrderService.updateOrderPayType(waterOrderVo));
}
//
/**
* 下单完成后发送通知
*/
@GetMapping("/gzhSend")
public AjaxResult gzhSend(WaterOrderVo vo){
return waterOrderService.gzhSend(vo);
}
}
......@@ -168,4 +168,14 @@ public class WaterStationController extends BaseController
return success(recentlyStation);
}
/**
* 订单页获取站点信息
*/
@GetMapping("/getRecentlyStation2")
public AjaxResult getRecentlyStation2(@RequestParam("address") String address, @RequestParam("address1") String address1){
System.out.println("address====================="+address);
System.out.println("address1+++++++++++++++++++"+address1);
WaterStationVo recentlyStation = waterStationService.getRecentlyStation2(address, address1);
return success(recentlyStation);
}
}
package com.qianhe.system.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.qianhe.common.annotation.Log;
import com.qianhe.common.core.controller.BaseController;
import com.qianhe.common.core.domain.AjaxResult;
import com.qianhe.common.enums.BusinessType;
import com.qianhe.system.domain.WaterStationRegion;
import com.qianhe.system.service.IWaterStationRegionService;
import com.qianhe.common.utils.poi.ExcelUtil;
import com.qianhe.common.core.page.TableDataInfo;
/**
* 站点区域范围Controller
*
* @author qianhe
* @date 2024-04-15
*/
@RestController
@RequestMapping("/system/waterStationRegion")
public class WaterStationRegionController extends BaseController
{
@Autowired
private IWaterStationRegionService waterStationRegionService;
/**
* 查询站点区域范围列表
*/
@PreAuthorize("@ss.hasPermi('system:waterStationRegion:list')")
@GetMapping("/list")
public TableDataInfo list(WaterStationRegion waterStationRegion)
{
startPage();
List<WaterStationRegion> list = waterStationRegionService.selectWaterStationRegionList(waterStationRegion);
return getDataTable(list);
}
/**
* 导出站点区域范围列表
*/
@PreAuthorize("@ss.hasPermi('system:waterStationRegion:export')")
@Log(title = "站点区域范围", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, WaterStationRegion waterStationRegion)
{
List<WaterStationRegion> list = waterStationRegionService.selectWaterStationRegionList(waterStationRegion);
ExcelUtil<WaterStationRegion> util = new ExcelUtil<WaterStationRegion>(WaterStationRegion.class);
util.exportExcel(response, list, "站点区域范围数据");
}
/**
* 获取站点区域范围详细信息
*/
@PreAuthorize("@ss.hasPermi('system:waterStationRegion:query')")
@GetMapping(value = "/{ID}")
public AjaxResult getInfo(@PathVariable("ID") Long ID)
{
return success(waterStationRegionService.selectWaterStationRegionByID(ID));
}
/**
* 新增站点区域范围
*/
@PreAuthorize("@ss.hasPermi('system:waterStationRegion:add')")
@Log(title = "站点区域范围", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody WaterStationRegion waterStationRegion)
{
return toAjax(waterStationRegionService.insertWaterStationRegion(waterStationRegion));
}
/**
* 修改站点区域范围
*/
@PreAuthorize("@ss.hasPermi('system:waterStationRegion:edit')")
@Log(title = "站点区域范围", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody WaterStationRegion waterStationRegion)
{
return toAjax(waterStationRegionService.updateWaterStationRegion(waterStationRegion));
}
/**
* 删除站点区域范围
*/
@PreAuthorize("@ss.hasPermi('system:waterStationRegion:remove')")
@Log(title = "站点区域范围", businessType = BusinessType.DELETE)
@DeleteMapping("/{IDs}")
public AjaxResult remove(@PathVariable Long[] IDs)
{
return toAjax(waterStationRegionService.deleteWaterStationRegionByIDs(IDs));
}
}
package com.qianhe.system.domain;
public class MapPoint {
/**
* 经度
*/
private double lng;
/**
* 纬度
*/
private double lat;
public MapPoint() {
}
public MapPoint(double lng, double lat) {
this.lng = lng;
this.lat = lat;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MapPoint) {
MapPoint mapPoint = (MapPoint) obj;
return (mapPoint.getLng() == lng && mapPoint.getLat() == lat) ? true : false;
} else {
return false;
}
}
public double getLng() {
return lng;
}
public void setLng(double lng) {
this.lng = lng;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
}
\ No newline at end of file
......@@ -79,4 +79,5 @@ public class WaterGoods
private String spjj;
//规格
private String spe;
private BigDecimal sjjg;
}
......@@ -25,4 +25,7 @@ public class WaterGoodsSpeVal {
/** 价格 */
private BigDecimal price;
private BigDecimal sjjg;
private String pp;
private String cd;
}
......@@ -30,7 +30,12 @@ public class WaterSpeVal
/** 规格值 */
private String speVal;
//原价
private BigDecimal price;
//实际价格
private BigDecimal sjjg;
private String pp;//品牌
private String cd;//产地
private String speValId;
}
......@@ -10,7 +10,9 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 站点对象 water_station
......@@ -74,4 +76,7 @@ public class WaterStation
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
//区域范围集合
private List<WaterStationRegion> waterStationRegionList =new ArrayList<>();
}
package com.qianhe.system.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.qianhe.common.annotation.Excel;
import com.qianhe.common.core.domain.BaseEntity;
/**
* 站点区域范围对象 water_station_region
*
* @author qianhe
* @date 2024-04-15
*/
public class WaterStationRegion extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
private Long ID;
/** 站点id */
@Excel(name = "站点id")
private Long stationId;
/** 经度 */
@Excel(name = "经度")
private BigDecimal lon;
/** 纬度 */
@Excel(name = "纬度")
private BigDecimal lat;
/** 排序 */
@Excel(name = "排序")
private Integer px;
/** 录入人 */
@Excel(name = "录入人")
private String LRR;
/** 录入时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "录入时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date LRSJ;
/** 修改人 */
@Excel(name = "修改人")
private String XGR;
/** 修改时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date XGSJ;
/** 备注 */
@Excel(name = "备注")
private String BZ;
/** 预留1 */
@Excel(name = "预留1")
private String YL1;
/** 预留2 */
@Excel(name = "预留2")
private String YL2;
/** 预留3 */
@Excel(name = "预留3")
private String YL3;
/** 预留4 */
@Excel(name = "预留4")
private String YL4;
/** 预留5 */
@Excel(name = "预留5")
private String YL5;
public void setID(Long ID)
{
this.ID = ID;
}
public Long getID()
{
return ID;
}
public void setStationId(Long stationId)
{
this.stationId = stationId;
}
public Long getStationId()
{
return stationId;
}
public void setLon(BigDecimal lon)
{
this.lon = lon;
}
public BigDecimal getLon()
{
return lon;
}
public void setLat(BigDecimal lat)
{
this.lat = lat;
}
public BigDecimal getLat()
{
return lat;
}
public void setPx(Integer px)
{
this.px = px;
}
public Integer getPx()
{
return px;
}
public void setLRR(String LRR)
{
this.LRR = LRR;
}
public String getLRR()
{
return LRR;
}
public void setLRSJ(Date LRSJ)
{
this.LRSJ = LRSJ;
}
public Date getLRSJ()
{
return LRSJ;
}
public void setXGR(String XGR)
{
this.XGR = XGR;
}
public String getXGR()
{
return XGR;
}
public void setXGSJ(Date XGSJ)
{
this.XGSJ = XGSJ;
}
public Date getXGSJ()
{
return XGSJ;
}
public void setBZ(String BZ)
{
this.BZ = BZ;
}
public String getBZ()
{
return BZ;
}
public void setYL1(String YL1)
{
this.YL1 = YL1;
}
public String getYL1()
{
return YL1;
}
public void setYL2(String YL2)
{
this.YL2 = YL2;
}
public String getYL2()
{
return YL2;
}
public void setYL3(String YL3)
{
this.YL3 = YL3;
}
public String getYL3()
{
return YL3;
}
public void setYL4(String YL4)
{
this.YL4 = YL4;
}
public String getYL4()
{
return YL4;
}
public void setYL5(String YL5)
{
this.YL5 = YL5;
}
public String getYL5()
{
return YL5;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("ID", getID())
.append("stationId", getStationId())
.append("lon", getLon())
.append("lat", getLat())
.append("px", getPx())
.append("LRR", getLRR())
.append("LRSJ", getLRSJ())
.append("XGR", getXGR())
.append("XGSJ", getXGSJ())
.append("BZ", getBZ())
.append("YL1", getYL1())
.append("YL2", getYL2())
.append("YL3", getYL3())
.append("YL4", getYL4())
.append("YL5", getYL5())
.toString();
}
}
......@@ -56,4 +56,8 @@ public class WaterStationUser
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 公众号用户openid */
@Excel(name = "公众号用户openid")
private String openId;
}
package com.qianhe.system.mapper;
import java.util.List;
import com.qianhe.system.domain.WaterStationRegion;
/**
* 站点区域范围Mapper接口
*
* @author qianhe
* @date 2024-04-15
*/
public interface WaterStationRegionMapper
{
/**
* 查询站点区域范围
*
* @param ID 站点区域范围主键
* @return 站点区域范围
*/
public WaterStationRegion selectWaterStationRegionByID(Long ID);
/**
* 查询站点区域范围列表
*
* @param waterStationRegion 站点区域范围
* @return 站点区域范围集合
*/
public List<WaterStationRegion> selectWaterStationRegionList(WaterStationRegion waterStationRegion);
/**
* 新增站点区域范围
*
* @param waterStationRegion 站点区域范围
* @return 结果
*/
public int insertWaterStationRegion(WaterStationRegion waterStationRegion);
/**
* 修改站点区域范围
*
* @param waterStationRegion 站点区域范围
* @return 结果
*/
public int updateWaterStationRegion(WaterStationRegion waterStationRegion);
/**
* 删除站点区域范围
*
* @param ID 站点区域范围主键
* @return 结果
*/
public int deleteWaterStationRegionByID(Long ID);
/**
* 批量删除站点区域范围
*
* @param IDs 需要删除的数据主键集合
* @return 结果
*/
public int deleteWaterStationRegionByIDs(Long[] IDs);
int batchWaterStationRegion(List<WaterStationRegion> waterStationRegionList);
int deleteWaterStationRegionByStationId(Long stationId);
List<WaterStationRegion> selectWaterStationRegionByStationId(Long stationId);
}
......@@ -133,4 +133,6 @@ public interface IWaterOrderService
* @return
*/
int updateOrderPayType(WaterOrderVo waterOrderVo);
AjaxResult gzhSend(WaterOrderVo vo);
}
package com.qianhe.system.service;
import java.util.List;
import com.qianhe.system.domain.WaterStationRegion;
/**
* 站点区域范围Service接口
*
* @author qianhe
* @date 2024-04-15
*/
public interface IWaterStationRegionService
{
/**
* 查询站点区域范围
*
* @param ID 站点区域范围主键
* @return 站点区域范围
*/
public WaterStationRegion selectWaterStationRegionByID(Long ID);
/**
* 查询站点区域范围列表
*
* @param waterStationRegion 站点区域范围
* @return 站点区域范围集合
*/
public List<WaterStationRegion> selectWaterStationRegionList(WaterStationRegion waterStationRegion);
/**
* 新增站点区域范围
*
* @param waterStationRegion 站点区域范围
* @return 结果
*/
public int insertWaterStationRegion(WaterStationRegion waterStationRegion);
/**
* 修改站点区域范围
*
* @param waterStationRegion 站点区域范围
* @return 结果
*/
public int updateWaterStationRegion(WaterStationRegion waterStationRegion);
/**
* 批量删除站点区域范围
*
* @param IDs 需要删除的站点区域范围主键集合
* @return 结果
*/
public int deleteWaterStationRegionByIDs(Long[] IDs);
/**
* 删除站点区域范围信息
*
* @param ID 站点区域范围主键
* @return 结果
*/
public int deleteWaterStationRegionByID(Long ID);
}
......@@ -99,4 +99,6 @@ public interface IWaterStationService
*/
List<WaterStation> getWaterStationList();
WaterStationVo getRecentlyStation2(String address, String address1);
}
package com.qianhe.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.img.Img;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import com.qianhe.common.config.RuoYiConfig;
import com.qianhe.common.utils.DateUtils;
import com.qianhe.common.utils.SecurityUtils;
import com.qianhe.common.utils.StringUtils;
import com.qianhe.system.domain.*;
import com.qianhe.system.mapper.*;
import com.qianhe.system.service.IWaterGoodsService;
import com.qianhe.system.utils.GraphUtils;
import com.qianhe.system.utils.ImageThumbnailsUtil;
import com.qianhe.system.vo.WaterGoodsSpeVo;
import com.qianhe.system.vo.WaterGoodsVo;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.name.Rename;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 商品Service业务层处理
......@@ -67,6 +59,8 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService
WaterGoods waterGoods = waterGoodsMapper.selectWaterGoodsById1(id);
WaterGoods goodsPrice = waterGoodsMapper.getPriceByID(id);
waterGoods.setPrice(goodsPrice.getPrice());
waterGoods.setSjjg(goodsPrice.getSjjg());
//转vo
WaterGoodsVo waterGoodsVo = new WaterGoodsVo();
BeanUtils.copyProperties(waterGoods,waterGoodsVo);
......@@ -266,8 +260,8 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService
List<WaterGoodsImg> detailsImgs = waterGoodsVo.getDetailsImgs();
//图片压缩
if (StringUtils.isNotNull(detailsImgs)){
for (WaterGoodsImg detailsImg : detailsImgs) {
// if (StringUtils.isNotNull(detailsImgs)){
// for (WaterGoodsImg detailsImg : detailsImgs) {
// String inputImage = detailsImg.getUrl();
// String outputImage = detailsImg.getUrl();
// String inputImage =profile + detailsImg.getUrl().replace("/profile","");
......@@ -292,8 +286,8 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService
// e.printStackTrace();
// }
// }
}
}
// }
// }
List<WaterGoodsImg> detailsImgList = new ArrayList<>();
//商品主键id
Long id = waterGoodsVo.getId();
......@@ -310,18 +304,7 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService
}
}
public static void main(String[] args) throws IOException {
// String path = "/prod-api/profile/upload/2024/04/10/1677026988375_20240410161337A007.jpg";
// String inputImage ="D:/ruoyi/uploadPath" + path.replace("/profile","");
// inputImage= inputImage.replace("/prod-api","");
// String outputImageDz = inputImage.substring(0,inputImage.lastIndexOf("/"));
// System.out.println(inputImage);
// System.out.println(outputImageDz);
String path = "D:\\workspace\\idea\\individual\\springboot-learn\\springboot-thumbnail\\image";
ImageThumbnailsUtil.generateDirectoryThumbnail(path);
}
/**
......@@ -332,8 +315,8 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService
List<WaterGoodsImg> coverImgs = waterGoodsVo.getCoverImgs();
//图片压缩
if (StringUtils.isNotNull(coverImgs)){
for (WaterGoodsImg coverImg : coverImgs) {
// if (StringUtils.isNotNull(coverImgs)){
// for (WaterGoodsImg coverImg : coverImgs) {
// String inputImage =profile + coverImg.getUrl().replace("/profile","");
// inputImage= inputImage.replace("/prod-api","");
// String outputImageDz = inputImage.substring(0,inputImage.lastIndexOf("/"));
......@@ -359,8 +342,8 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService
// e.printStackTrace();
// }
// }
}
}
// }
// }
List<WaterGoodsImg> coverImgList = new ArrayList<>();
//商品主键id
......@@ -555,4 +538,8 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService
waterGoodsImg.setImgType(3);
return waterGoodsImgMapper.insertWaterGoodsImg(waterGoodsImg);
}
}
package com.qianhe.system.service.impl;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qianhe.common.core.domain.AjaxResult;
import com.qianhe.common.exception.ServiceException;
import com.qianhe.common.utils.DateUtils;
import com.qianhe.common.utils.StringUtils;
......@@ -8,11 +13,13 @@ import com.qianhe.system.mapper.*;
import com.qianhe.system.service.IWaterOrderService;
import com.qianhe.system.utils.PositionUtil;
import com.qianhe.system.vo.WaterOrderVo;
import com.qianhe.system.vo.WaterStationUserVo;
import com.qianhe.system.vo.WaterStationVo;
import io.swagger.models.auth.In;
import org.gavaghan.geodesy.Ellipsoid;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -44,6 +51,8 @@ public class WaterOrderServiceImpl implements IWaterOrderService
private WaterUserAddressMapper waterUserAddressMapper;
@Autowired
private WaterStationMapper waterStationMapper;
@Autowired
private WaterStationUserMapper waterStationUserMapper;
/**
* 查询订单
......@@ -153,6 +162,10 @@ public class WaterOrderServiceImpl implements IWaterOrderService
int i = waterOrderMapper.insertWaterOrder(waterOrderVo);
//新增订单商品
insertWaterOrderGoods(waterOrderVo);
//判断支付方式是否为水票支付
if(waterOrderVo.getPayType() == 2){
gzhSend(waterOrderVo);
}
return ddh;
}
......@@ -508,4 +521,73 @@ public class WaterOrderServiceImpl implements IWaterOrderService
}
return waterOrderMapper.updateWaterOrder(waterOrderVo);
}
@Value("${wxgzh.appId}")
private String appId;
@Value("${wxgzh.appSecret}")
private String appSecret;
@Value("${wxgzh.access-token-uri}")
private String accessTokenUri;
@Value("${wxgzh.template_id}")
private String templateId;
//根据appId、appSecret获取access_token
public String getAccessToken() {
String url = accessTokenUri;
// 利用hutool的http工具类请求获取access_token
String result = HttpUtil.get(url);
JSONObject jsonObject = JSONUtil.parseObj(result);
return jsonObject.getStr("access_token");
}
@Override
public AjaxResult gzhSend(WaterOrderVo vo) {
//订单编号
String orderNum = vo.getOrderNum();
//站点id
// Long stationId = vo.getStationId();
//查询订单
WaterOrder waterOrder = waterOrderMapper.selectWaterOrderNumByOrderNum(orderNum);
if(waterOrder!=null){
WaterOrderGoods goods=new WaterOrderGoods();
goods.setOrderId(waterOrder.getId());
List<WaterOrderGoods> waterOrderGoods = waterOrderGoodsMapper.selectWaterOrderGoodsList(goods);
String spmc="";
//查询商品名称
if(waterOrderGoods.size()>0){
spmc = String.join(",", waterOrderGoods.stream().map(WaterOrderGoods::getGoodsTitle).collect(Collectors.toList()));
}
//支付方式1银行2水票
Integer payType = waterOrder.getPayType();
//查询
WaterStationUser user =new WaterStationUser();
user.setStationId(waterOrder.getStationId());
List<WaterStationUserVo> waterStationUsers = waterStationUserMapper.selectWaterStationUserList(user);
if(waterStationUsers.size()>0){
for(WaterStationUserVo item:waterStationUsers){
//获取标签标签tagid
String accessToken= getAccessToken();
//发送模板消息
JSONObject body=new JSONObject();
String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
body.set("touser",item.getOpenId());
body.set("template_id",templateId);
JSONObject json=new JSONObject();
json.set("thing27",new JSONObject().set("value",spmc));//商品名称
json.set("amount24",new JSONObject().set("value", payType==1?waterOrder.getGoodsVal():"水票"));//金额
json.set("time4",new JSONObject().set("value",DateUtils.parseDateToStr("yyyy-MM-dd hh:mm:ss",waterOrder.getCreateTime())));//下单时间
json.set("phone_number8",new JSONObject().set("value", waterOrder.getUserPhone()));//用户手机号
body.set("data",json);
String resp = HttpUtil.post(requestUrl,body.toString());
JSONObject result = JSONUtil.parseObj(resp);
System.out.println("发送消息:" + resp);
System.out.println("发送消息:" + result);
}
}
return AjaxResult.error("发送成功");
}else {
return AjaxResult.error("发送失败");
}
}
}
......@@ -92,6 +92,7 @@ public class WaterSpeServiceImpl implements IWaterSpeService
waterSpeVal.setId(idd);
waterSpeVal.setSpeValId(idd);
waterSpeVal.setSpeId(id);
waterSpeVal.setSpeId(id);
waterSpeVals.add(waterSpeVal);
}
}
......
package com.qianhe.system.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.qianhe.system.mapper.WaterStationRegionMapper;
import com.qianhe.system.domain.WaterStationRegion;
import com.qianhe.system.service.IWaterStationRegionService;
/**
* 站点区域范围Service业务层处理
*
* @author qianhe
* @date 2024-04-15
*/
@Service
public class WaterStationRegionServiceImpl implements IWaterStationRegionService
{
@Autowired
private WaterStationRegionMapper waterStationRegionMapper;
/**
* 查询站点区域范围
*
* @param ID 站点区域范围主键
* @return 站点区域范围
*/
@Override
public WaterStationRegion selectWaterStationRegionByID(Long ID)
{
return waterStationRegionMapper.selectWaterStationRegionByID(ID);
}
/**
* 查询站点区域范围列表
*
* @param waterStationRegion 站点区域范围
* @return 站点区域范围
*/
@Override
public List<WaterStationRegion> selectWaterStationRegionList(WaterStationRegion waterStationRegion)
{
return waterStationRegionMapper.selectWaterStationRegionList(waterStationRegion);
}
/**
* 新增站点区域范围
*
* @param waterStationRegion 站点区域范围
* @return 结果
*/
@Override
public int insertWaterStationRegion(WaterStationRegion waterStationRegion)
{
return waterStationRegionMapper.insertWaterStationRegion(waterStationRegion);
}
/**
* 修改站点区域范围
*
* @param waterStationRegion 站点区域范围
* @return 结果
*/
@Override
public int updateWaterStationRegion(WaterStationRegion waterStationRegion)
{
return waterStationRegionMapper.updateWaterStationRegion(waterStationRegion);
}
/**
* 批量删除站点区域范围
*
* @param IDs 需要删除的站点区域范围主键
* @return 结果
*/
@Override
public int deleteWaterStationRegionByIDs(Long[] IDs)
{
return waterStationRegionMapper.deleteWaterStationRegionByIDs(IDs);
}
/**
* 删除站点区域范围信息
*
* @param ID 站点区域范围主键
* @return 结果
*/
@Override
public int deleteWaterStationRegionByID(Long ID)
{
return waterStationRegionMapper.deleteWaterStationRegionByID(ID);
}
}
......@@ -3,12 +3,16 @@ package com.qianhe.system.service.impl;
import com.qianhe.common.utils.DateUtils;
import com.qianhe.common.utils.SecurityUtils;
import com.qianhe.common.utils.StringUtils;
import com.qianhe.system.domain.MapPoint;
import com.qianhe.system.domain.WaterStation;
import com.qianhe.system.domain.WaterStationRegion;
import com.qianhe.system.domain.WaterStationUser;
import com.qianhe.system.mapper.WaterStationMapper;
import com.qianhe.system.mapper.WaterStationRegionMapper;
import com.qianhe.system.mapper.WaterStationUserMapper;
import com.qianhe.system.service.IWaterStationService;
import com.qianhe.system.utils.AMapUtils;
import com.qianhe.system.utils.GraphUtils;
import com.qianhe.system.utils.PositionUtil;
import com.qianhe.system.vo.WaterStationUserVo;
import com.qianhe.system.vo.WaterStationVo;
......@@ -39,6 +43,8 @@ public class WaterStationServiceImpl implements IWaterStationService
private WaterStationUserMapper waterStationUserMapper;
@Autowired
private WaterStationUserServiceImpl waterStationUserService;
@Autowired
private WaterStationRegionMapper waterStationRegionMapper;
/**
* 查询站点
......@@ -59,6 +65,9 @@ public class WaterStationServiceImpl implements IWaterStationService
if (waterStationUsers.size() > 0){
waterStationVo.setWaterStationUserList(waterStationUsers);
}
//查询区域
List<WaterStationRegion> regions=waterStationRegionMapper.selectWaterStationRegionByStationId(id);
waterStationVo.setWaterStationRegionList(regions);
return waterStationVo;
}
......@@ -90,6 +99,15 @@ public class WaterStationServiceImpl implements IWaterStationService
waterStation.setCreateUser(SecurityUtils.getLoginUser().getUsername());
waterStation.setCreateTime(DateUtils.getNowDate());
int i = waterStationMapper.insertWaterStation(waterStation);
//TODO 保存站点区域
if(waterStation.getWaterStationRegionList().size()>0){
List<WaterStationRegion> waterStationRegionList = waterStation.getWaterStationRegionList();
for(int k=0;k<waterStationRegionList.size();k++){
waterStationRegionList.get(k).setPx(k);
waterStationRegionList.get(k).setStationId(waterStation.getId());
}
waterStationRegionMapper.batchWaterStationRegion(waterStationRegionList);
}
return i;
}
......@@ -130,6 +148,17 @@ public class WaterStationServiceImpl implements IWaterStationService
WaterStation w = gaodeToTencent(waterStation.getStationLon(),waterStation.getStationLat());
waterStation.setStationLonTen(w.getStationLonTen());
waterStation.setStationLatTen(w.getStationLatTen());
//TODO 删除站点区域
waterStationRegionMapper.deleteWaterStationRegionByStationId(waterStation.getId());
//TODO 保存站点区域
if(waterStation.getWaterStationRegionList().size()>0){
List<WaterStationRegion> waterStationRegionList = waterStation.getWaterStationRegionList();
for(int k=0;k<waterStationRegionList.size();k++){
waterStationRegionList.get(k).setPx(k);
waterStationRegionList.get(k).setStationId(waterStation.getId());
}
waterStationRegionMapper.batchWaterStationRegion(waterStationRegionList);
}
return waterStationMapper.updateWaterStation(waterStation);
}
......@@ -303,4 +332,48 @@ public class WaterStationServiceImpl implements IWaterStationService
public List<WaterStation> getWaterStationList() {
return waterStationMapper.getStationList(new WaterStation());
}
@Override
public WaterStationVo getRecentlyStation2(String address, String address1) {
double[] doubles;
if(address1.contains(address)){
doubles = AMapUtils.addressToGPS(address1);
}else {
doubles = AMapUtils.addressToGPS(address+address1);
}
double lon = doubles[0];
double lat = doubles[1];
MapPoint n1 = new MapPoint(lon,lat);
//查询所有站点信息
WaterStation waterStation1 = new WaterStation();
waterStation1.setIsOpen("1");
System.out.println(lon+"-------------"+lat);
List<WaterStation> waterStations = waterStationMapper.selectWaterStationList(waterStation1);
List<WaterStationRegion> waterStationRegionList = waterStationRegionMapper.selectWaterStationRegionList(new WaterStationRegion());
WaterStationVo vo=new WaterStationVo();
//循环站点,计算符合距离的站点
for (WaterStation waterStation : waterStations) {
//筛选当前站点的区域
List<WaterStationRegion> collect = waterStationRegionList.stream().filter(item -> item.getStationId().toString().equals(waterStation.getId().toString())).sorted(Comparator.comparing(WaterStationRegion::getPx)).collect(Collectors.toList());
if(collect.size()>0){
List<MapPoint> list =new ArrayList<>();
collect.forEach(it->{
MapPoint point=new MapPoint();
point.setLat(it.getLat().doubleValue());
point.setLng(it.getLon().doubleValue());
list.add(point);
});
MapPoint[] array2 = list.toArray(new MapPoint[list.size()]);
boolean pointInPolygon = GraphUtils.isPointInPolygon(n1, array2);
if(pointInPolygon){
BeanUtils.copyProperties(waterStation,vo);
break;
}
}
}
return vo;
}
}
package com.qianhe.system.utils;
import com.qianhe.system.domain.MapPoint;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class GraphUtils {
//测试
public static void main(String[] args) throws IOException {
MapPoint[] ps = new MapPoint[] {
new MapPoint(118.491519,37.423507),
new MapPoint(118.517247,37.417591),
new MapPoint(118.512638,37.411543),
new MapPoint(118.485455,37.411406),
// new MapPoint(114.309914,30.599556),//114.309914,30.599556
// new MapPoint(114.295688,30.592879),//114.295688,30.592879
// new MapPoint(114.292812,30.587726), //114.292812,30.587726
// new MapPoint(114.292812,30.587726), //114.292812,30.587726
// new MapPoint(114.30058,30.580318),//114.30058,30.580318
// new MapPoint(114.303606,30.586959),//114.303606,30.586959
// new MapPoint(114.304534,30.594751),//114.304534,30.594751
// new MapPoint(114.30838,30.590131),//114.30838,30.590131
// new MapPoint(114.308651,30.584182),//114.308651,30.584182
// new MapPoint(114.304495,30.584015),//114.304495,30.584015
// new MapPoint(114.301301,30.578759),//114.301301,30.578759
// new MapPoint(114.309437,30.578528),//114.309437,30.578528
// new MapPoint(114.323282,30.592786)
};//114.323282,30.592786
List<MapPoint> list =new ArrayList<>();
for(MapPoint ps1:ps){
list.add(ps1);
}
MapPoint n1 = new MapPoint(118.498004,37.408994);
// MapPoint y2 = new MapPoint(120.1866 , 30.2672);
//集合转换为数组
MapPoint[] array2 = list.toArray(new MapPoint[list.size()]);
//判断点是否在范围内
System.out.println( "n1:" + GraphUtils.isPointInPolygon(n1 , array2));
// System.out.println( "y2:" + GraphUtils.isPointInPolygon(y2 , array2));
}
/**
* 判断点是否在多边形内(基本思路是用交点法)
*
* @param point
* @param boundaryPoints
* @return
*/
public static boolean isPointInPolygon(MapPoint point, MapPoint[] boundaryPoints) {
// 防止第一个点与最后一个点相同
if (boundaryPoints != null && boundaryPoints.length > 0
&& boundaryPoints[boundaryPoints.length - 1].equals(boundaryPoints[0])) {
boundaryPoints = Arrays.copyOf(boundaryPoints, boundaryPoints.length - 1);
}
int pointCount = boundaryPoints.length;
// 首先判断点是否在多边形的外包矩形内,如果在,则进一步判断,否则返回false
if (!isPointInRectangle(point, boundaryPoints)) {
return false;
}
// 如果点与多边形的其中一个顶点重合,那么直接返回true
for (int i = 0; i < pointCount; i++) {
if (point.equals(boundaryPoints[i])) {
return true;
}
}
/**
* 基本思想是利用X轴射线法,计算射线与多边形各边的交点,如果是偶数,则点在多边形外,否则在多边形内。还会考虑一些特殊情况,如点在多边形顶点上
* , 点在多边形边上等特殊情况。
*/
// X轴射线与多边形的交点数
int intersectPointCount = 0;
// X轴射线与多边形的交点权值
float intersectPointWeights = 0;
// 浮点类型计算时候与0比较时候的容差
double precision = 2e-10;
// 边P1P2的两个端点
MapPoint point1 = boundaryPoints[0], point2;
// 循环判断所有的边
for (int i = 1; i <= pointCount; i++) {
point2 = boundaryPoints[i % pointCount];
/**
* 如果点的y坐标在边P1P2的y坐标开区间范围之外,那么不相交。
*/
if (point.getLat() < Math.min(point1.getLat(), point2.getLat())
|| point.getLat() > Math.max(point1.getLat(), point2.getLat())) {
point1 = point2;
continue;
}
/**
* 此处判断射线与边相交
*/
if (point.getLat() > Math.min(point1.getLat(), point2.getLat())
// 如果点的y坐标在边P1P2的y坐标开区间内
&& point.getLat() < Math.max(point1.getLat(), point2.getLat())) {
// 若边P1P2是垂直的
if (point1.getLng() == point2.getLng()) {
if (point.getLng() == point1.getLng()) {
// 若点在垂直的边P1P2上,则点在多边形内
return true;
} else if (point.getLng() < point1.getLng()) {
// 若点在在垂直的边P1P2左边,则点与该边必然有交点
++intersectPointCount;
}
} else {// 若边P1P2是斜线
// 点point的x坐标在点P1和P2的左侧
if (point.getLng() <= Math.min(point1.getLng(), point2.getLng())) {
++intersectPointCount;
}
// 点point的x坐标在点P1和P2的x坐标中间
else if (point.getLng() > Math.min(point1.getLng(), point2.getLng())
&& point.getLng() < Math.max(point1.getLng(), point2.getLng())) {
double slopeDiff = getSlopeDiff(point, point1, point2);
if (slopeDiff > 0) {
// 由于double精度在计算时会有损失,故匹配一定的容差。经试验,坐标经度可以达到0.0001
if (slopeDiff < precision) {
// 点在斜线P1P2上
return true;
} else {
// 点与斜线P1P2有交点
intersectPointCount++;
}
}
}
}
} else {
// 边P1P2水平
if (point1.getLat() == point2.getLat()) {
if (checkPointInLine(point, point1, point2)) {
return true;
}
}
/**
* 判断点通过多边形顶点
*/
if (((point.getLat() == point1.getLat() && point.getLng() < point1.getLng()))
|| (point.getLat() == point2.getLat() && point.getLng() < point2.getLng())) {
if (point2.getLat() < point1.getLat()) {
intersectPointWeights += -0.5;
} else if (point2.getLat() > point1.getLat()) {
intersectPointWeights += 0.5;
}
}
}
point1 = point2;
}
// 偶数在多边形外
if ((intersectPointCount + Math.abs(intersectPointWeights)) % 2 == 0) {
return false;
} else { // 奇数在多边形内
return true;
}
}
private static double getSlopeDiff(MapPoint point, MapPoint point1, MapPoint point2) {
double slopeDiff = 0.0d;
if (point1.getLat() > point2.getLat()) {
slopeDiff = (point.getLat() - point2.getLat()) / (point.getLng() - point2.getLng())
- (point1.getLat() - point2.getLat()) / (point1.getLng() - point2.getLng());
} else {
slopeDiff = (point.getLat() - point1.getLat()) / (point.getLng() - point1.getLng())
- (point2.getLat() - point1.getLat()) / (point2.getLng() - point1.getLng());
}
return slopeDiff;
}
private static boolean checkPointInLine(MapPoint point, MapPoint point1, MapPoint point2) {
if (point.getLng() <= Math.max(point1.getLng(), point2.getLng())
&& point.getLng() >= Math.min(point1.getLng(), point2.getLng())) {
// 若点在水平的边P1P2上,则点在多边形内
return true;
}
return false;
}
/**
* 判断点是否在矩形内在矩形边界上,也算在矩形内(根据这些点,构造一个外包矩形)
*
* @param point 点对象
* @param boundaryPoints 矩形边界点
* @return
*/
public static boolean isPointInRectangle(MapPoint point, MapPoint[] boundaryPoints) {
// 西南角点
MapPoint southWestPoint = getSouthWestPoint(boundaryPoints);
// 东北角点
MapPoint northEastPoint = getNorthEastPoint(boundaryPoints);
return (point.getLng() >= southWestPoint.getLng() && point.getLng() <= northEastPoint.getLng()
&& point.getLat() >= southWestPoint.getLat() && point.getLat() <= northEastPoint.getLat());
}
/**
* 根据这组坐标,画一个矩形,然后得到这个矩形西南角的顶点坐标
*
* @param vertexs
* @return
*/
private static MapPoint getSouthWestPoint(MapPoint[] vertexs) {
double minLng = vertexs[0].getLng(), minLat = vertexs[0].getLat();
for (MapPoint bmapPoint : vertexs) {
double lng = bmapPoint.getLng();
double lat = bmapPoint.getLat();
if (lng < minLng) {
minLng = lng;
}
if (lat < minLat) {
minLat = lat;
}
}
return new MapPoint(minLng, minLat);
}
/**
* 根据这组坐标,画一个矩形,然后得到这个矩形东北角的顶点坐标
*
* @param vertexs
* @return
*/
private static MapPoint getNorthEastPoint(MapPoint[] vertexs) {
double maxLng = 0.0d, maxLat = 0.0d;
for (MapPoint bmapPoint : vertexs) {
double lng = bmapPoint.getLng();
double lat = bmapPoint.getLat();
if (lng > maxLng) {
maxLng = lng;
}
if (lat > maxLat) {
maxLat = lat;
}
}
return new MapPoint(maxLng, maxLat);
}
}
\ No newline at end of file
......@@ -109,6 +109,9 @@ public class ImageThumbnailsUtil {
return list;
}
public static void main(String[] args) throws IOException {
generateDirectoryThumbnail("D:/qianhe/file/送水/水韵照片/2");
}
/**
* 将指定目录下所有图片生成缩略图
*
......
package com.qianhe.system.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.qianhe.common.utils.uuid.UUID;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class OSSUtil {
@Value("${aliyun.endpoint}")
private String endpoint;
@Value("${aliyun.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.bucketName}")
private String bucketName;
@Value("${aliyun.urlPrefix}")
private String urlPrefix;
/**
* 文件上传
*
* @return 返回文件的 阿里云url 路径
*/
public String upload(MultipartFile uploadFile,String fileName) {
// 创建OSSClient实例。
OSS ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
//定义子文件的格式
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
String fileUrl = urlPrefix+ (dateStr + "/" + fileName);
// 上传到阿里云
try {
ossClient.putObject(bucketName, fileUrl, new
ByteArrayInputStream(uploadFile.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}finally {
if(ossClient!=null){
ossClient.shutdown();
}
}
//约定文件访问路径规则 https://BucketName.Endpoint/ObjectName
StringBuilder stringBuilder = new StringBuilder("https://");
stringBuilder
.append(bucketName)
.append(".")
.append(endpoint)
.append("/")
.append(fileUrl);
return stringBuilder.toString();
}
}
package com.qianhe.system.vo;
import lombok.Data;
@Data
public class GzhVo {
private int tagid;
}
......@@ -75,6 +75,7 @@ public class WaterGoodsVo {
private String spjj;
private String spe;
private BigDecimal sjjg;
/** 封面图集合 */
private List<WaterGoodsImg> coverImgs;
......
......@@ -33,4 +33,7 @@ public class WaterSpeVo
/** 价格 */
private BigDecimal price;
private BigDecimal sjjg;
private String pp;//品牌
private String cd;//产地
}
......@@ -50,4 +50,8 @@ public class WaterStationUserVo {
private Date createTime;
private String isOpen;
/** 公众号用户openid */
@Excel(name = "公众号用户openid")
private String openId;
}
......@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qianhe.common.annotation.Excel;
import com.qianhe.system.domain.WaterStationRegion;
import com.qianhe.system.domain.WaterStationUser;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
......@@ -68,4 +70,6 @@ public class WaterStationVo {
/** 送水工集合 */
private List<WaterStationUserVo> waterStationUserList;
//区域范围集合
private List<WaterStationRegion> waterStationRegionList =new ArrayList<>();
}
......@@ -4,6 +4,9 @@ import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.qianhe.common.utils.uuid.UUID;
import com.qianhe.system.utils.OSSUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -37,6 +40,9 @@ public class CommonController
private static final String FILE_DELIMETER = ",";
@Autowired
private OSSUtil aliOssUtil;
/**
* 通用下载请求
*
......@@ -131,6 +137,34 @@ public class CommonController
return AjaxResult.error(e.getMessage());
}
}
/**
* 通用上传请求(上传到oss)
*/
@PostMapping("/uploadOSS")
public AjaxResult uploadOSS(MultipartFile file) throws Exception
{
try
{
//原始文件名
String originalFilename = file.getOriginalFilename();
//截取文件名后缀 xxx.png
String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
// //构造新文件名称
String objectName = UUID.randomUUID() + extension;
// 上传文件路径
String url = aliOssUtil.upload(file,objectName);
AjaxResult ajax = AjaxResult.success();
ajax.put("url", url);
ajax.put("fileName", url);
ajax.put("newFileName", objectName);
ajax.put("originalFilename", originalFilename);
return ajax;
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
/**
* 本地资源通用下载
......
......@@ -6,12 +6,12 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://1.116.38.25:3986/slsy?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true
# url: jdbc:mysql://1.116.38.25:3986/slsy?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true
# username: root
# password: qianhe2022
url: jdbc:mysql://1.116.38.25:3986/slsy_cs?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true
username: root
password: qianhe2022
# url: jdbc:mysql://192.168.0.105:3306/slsy?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true
# username: root
# password: 123456
# 从库数据源
slave:
# 从数据源开关/默认关闭
......
......@@ -9,7 +9,8 @@ ruoyi:
# 实例演示开关
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile: C:/ruoyi/uploadPath
# profile: F:/ruoyi/uploadPath
profile: D:/ruoyi/uploadPath
# 获取ip地址开关
addressEnabled: false
# 验证码类型 math 数组计算 char 字符验证
......@@ -71,13 +72,17 @@ spring:
# redis 配置
redis:
# 地址
host: 1.116.38.25
# 端口,默认为6379
port: 7789
# host: 1.116.38.25
# # 端口,默认为6379
# port: 7789
#
# # 密码
# password: qianheRedis2021
host: 127.0.0.1
port: 34597
password:
# 数据库索引
database: 2
# 密码
password: qianheRedis2021
# 连接超时时间
timeout: 10s
lettuce:
......@@ -171,3 +176,16 @@ sswx:
appId: wx75635671bf9fe9bb
appSecret: 5ac4f25af14d7cfb3e62870fa1719459
access-token-uri: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${sswx.appId}&secret=${sswx.appSecret}
#阿里云
aliyun:
endpoint: oss-cn-qingdao.aliyuncs.com
accessKeyId: LTAI5tCjYnM8G7BEp8tFsSEj
accessKeySecret: TUq4ht1HxRqCp1FkCZrLwKhpoiyPev
bucketName: qianhe-slsy-test
urlPrefix: test/
# 微信公众号
wxgzh:
appId: wxb1da01db0d0feb95
appSecret: 907d7f545d5fd2ba57c08a9d497f353d
access-token-uri: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${wxgzh.appId}&secret=${wxgzh.appSecret}
template_id: uHjot1RT24Ws9he-8EVffVHq6hQgqPVTD1Y4w8wRHg8
......@@ -19,10 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="delFlag" column="del_flag" />
<result property="spjj" column="spjj" />
<result property="spe" column="spe" />
<result property="sjjg" column="sjjg" />
</resultMap>
<sql id="selectWaterGoodsVo">
select distinct a.id id, title, goods_type_id, belong_station_id, cover_img, details_img, c.price, volume, a.create_user, a.create_time, status,a.spjj, c.spe
select distinct a.id id, title, goods_type_id, belong_station_id, cover_img, details_img, c.price, volume, a.create_user, a.create_time, status,a.spjj, c.spe,c.sjjg
from
water_goods a
left join
......@@ -30,12 +31,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
on
a.id = b.goods_id
left join
(select a.* from water_goods_spe_val a
left join (select spe_id,min(id) id from water_goods_spe_val where del_flag = '0' group by spe_id ) b
on a.spe_id = b.spe_id and a.id =b.id
where b.id is not null) c
on
b.water_spe_id = c.spe_id
water_goods_spe_val c on b.id=c.spe_id
# (select a.* from water_goods_spe_val a
# left join (select spe_id,max(id) id from water_goods_spe_val where del_flag = '0' group by spe_id ) b
# on a.spe_id = b.spe_id and a.id =b.id
# where b.id is not null) c
# on
# b.water_spe_id = c.spe_id
</sql>
<select id="selectWaterGoodsList" parameterType="WaterGoods" resultMap="WaterGoodsResult">
......@@ -88,8 +90,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getPriceByID" parameterType="Long" resultMap="WaterGoodsResult">
select price from water_goods_spe_val where spe_id =
(select water_spe_id from water_goods_spe where goods_id = #{id} and del_flag = '0')
select price,sjjg from water_goods_spe_val where spe_id =
(select id from water_goods_spe where goods_id = #{id} and del_flag = '0')
and del_flag = '0'
</select>
......
......@@ -28,7 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectWaterGoodsSpeValList" parameterType="WaterGoodsSpeVal" resultType="WaterGoodsSpeVal">
select id, spe_id, spe, spe_val, price from water_goods_spe_val
select id, spe_id, spe, spe_val, price,sjjg,pp,cd from water_goods_spe_val
<where>
del_flag = '0'
<if test="speId != null"> and spe_id = #{speId}</if>
......@@ -100,10 +100,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update>
<insert id="batchInsertWaterGoodsSpeVal">
insert into water_goods_spe_val(spe_id, spe, spe_val, price)
insert into water_goods_spe_val(spe_id, spe, spe_val, price,sjjg,cd,pp)
values
<foreach collection="list" item="item" separator=",">
(#{item.speId}, #{item.spe}, #{item.speVal}, #{item.price})
(#{item.speId}, #{item.spe}, #{item.speVal}, #{item.price}, #{item.sjjg}, #{item.cd}, #{item.pp})
</foreach>
</insert>
</mapper>
......@@ -26,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectWaterSpeValList" parameterType="WaterSpeVal" resultType="WaterSpeVal">
select a.id, a.spe_id, a.spe, a.spe_val,b.price from water_spe_val a
select a.id, a.spe_id, a.spe, a.spe_val,b.price,b.sjjg,b.pp,b.cd from water_spe_val a
left join
water_goods_spe_val b
on a.spe_id = b.spe_id
......@@ -111,10 +111,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</insert>
<insert id="batchInsertWaterGoodsSpeVal">
insert into water_goods_spe_val(spe_id, spe, spe_val,price,spe_val_id)
insert into water_goods_spe_val(spe_id, spe, spe_val,price,sjjg,spe_val_id,pp,cd)
values
<foreach collection="list" item="item" separator=",">
(#{item.speId}, #{item.spe}, #{item.speVal},#{item.price},#{item.speValId})
(#{item.speId}, #{item.spe}, #{item.speVal},#{item.price},#{item.sjjg},#{item.speValId},#{item.pp},#{item.cd})
</foreach>
</insert>
</mapper>
<?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.qianhe.system.mapper.WaterStationRegionMapper">
<resultMap type="WaterStationRegion" id="WaterStationRegionResult">
<result property="ID" column="ID" />
<result property="stationId" column="station_id" />
<result property="lon" column="lon" />
<result property="lat" column="lat" />
<result property="px" column="px" />
<result property="LRR" column="LRR" />
<result property="LRSJ" column="LRSJ" />
<result property="XGR" column="XGR" />
<result property="XGSJ" column="XGSJ" />
<result property="BZ" column="BZ" />
<result property="YL1" column="YL1" />
<result property="YL2" column="YL2" />
<result property="YL3" column="YL3" />
<result property="YL4" column="YL4" />
<result property="YL5" column="YL5" />
</resultMap>
<sql id="selectWaterStationRegionVo">
select ID, station_id, lon, lat, px, LRR, LRSJ, XGR, XGSJ, BZ, YL1, YL2, YL3, YL4, YL5 from water_station_region
</sql>
<select id="selectWaterStationRegionList" parameterType="WaterStationRegion" resultMap="WaterStationRegionResult">
<include refid="selectWaterStationRegionVo"/>
<where>
<if test="stationId != null "> and station_id = #{stationId}</if>
<if test="lon != null "> and lon = #{lon}</if>
<if test="lat != null "> and lat = #{lat}</if>
<if test="px != null "> and px = #{px}</if>
<if test="LRR != null and LRR != ''"> and LRR = #{LRR}</if>
<if test="LRSJ != null "> and LRSJ = #{LRSJ}</if>
<if test="XGR != null and XGR != ''"> and XGR = #{XGR}</if>
<if test="XGSJ != null "> and XGSJ = #{XGSJ}</if>
<if test="BZ != null and BZ != ''"> and BZ = #{BZ}</if>
<if test="YL1 != null and YL1 != ''"> and YL1 = #{YL1}</if>
<if test="YL2 != null and YL2 != ''"> and YL2 = #{YL2}</if>
<if test="YL3 != null and YL3 != ''"> and YL3 = #{YL3}</if>
<if test="YL4 != null and YL4 != ''"> and YL4 = #{YL4}</if>
<if test="YL5 != null and YL5 != ''"> and YL5 = #{YL5}</if>
</where>
</select>
<select id="selectWaterStationRegionByID" parameterType="Long" resultMap="WaterStationRegionResult">
<include refid="selectWaterStationRegionVo"/>
where ID = #{ID}
</select>
<select id="selectWaterStationRegionByStationId" resultMap="WaterStationRegionResult">
<include refid="selectWaterStationRegionVo"/>
where station_id = #{stationId} order by px
</select>
<insert id="insertWaterStationRegion" parameterType="WaterStationRegion" useGeneratedKeys="true" keyProperty="ID">
insert into water_station_region
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="stationId != null">station_id,</if>
<if test="lon != null">lon,</if>
<if test="lat != null">lat,</if>
<if test="px != null">px,</if>
<if test="LRR != null">LRR,</if>
<if test="LRSJ != null">LRSJ,</if>
<if test="XGR != null">XGR,</if>
<if test="XGSJ != null">XGSJ,</if>
<if test="BZ != null">BZ,</if>
<if test="YL1 != null">YL1,</if>
<if test="YL2 != null">YL2,</if>
<if test="YL3 != null">YL3,</if>
<if test="YL4 != null">YL4,</if>
<if test="YL5 != null">YL5,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="stationId != null">#{stationId},</if>
<if test="lon != null">#{lon},</if>
<if test="lat != null">#{lat},</if>
<if test="px != null">#{px},</if>
<if test="LRR != null">#{LRR},</if>
<if test="LRSJ != null">#{LRSJ},</if>
<if test="XGR != null">#{XGR},</if>
<if test="XGSJ != null">#{XGSJ},</if>
<if test="BZ != null">#{BZ},</if>
<if test="YL1 != null">#{YL1},</if>
<if test="YL2 != null">#{YL2},</if>
<if test="YL3 != null">#{YL3},</if>
<if test="YL4 != null">#{YL4},</if>
<if test="YL5 != null">#{YL5},</if>
</trim>
</insert>
<update id="updateWaterStationRegion" parameterType="WaterStationRegion">
update water_station_region
<trim prefix="SET" suffixOverrides=",">
<if test="stationId != null">station_id = #{stationId},</if>
<if test="lon != null">lon = #{lon},</if>
<if test="lat != null">lat = #{lat},</if>
<if test="px != null">px = #{px},</if>
<if test="LRR != null">LRR = #{LRR},</if>
<if test="LRSJ != null">LRSJ = #{LRSJ},</if>
<if test="XGR != null">XGR = #{XGR},</if>
<if test="XGSJ != null">XGSJ = #{XGSJ},</if>
<if test="BZ != null">BZ = #{BZ},</if>
<if test="YL1 != null">YL1 = #{YL1},</if>
<if test="YL2 != null">YL2 = #{YL2},</if>
<if test="YL3 != null">YL3 = #{YL3},</if>
<if test="YL4 != null">YL4 = #{YL4},</if>
<if test="YL5 != null">YL5 = #{YL5},</if>
</trim>
where ID = #{ID}
</update>
<delete id="deleteWaterStationRegionByID" parameterType="Long">
delete from water_station_region where ID = #{ID}
</delete>
<delete id="deleteWaterStationRegionByIDs" parameterType="String">
delete from water_station_region where ID in
<foreach item="ID" collection="array" open="(" separator="," close=")">
#{ID}
</foreach>
</delete>
<delete id="deleteWaterStationRegionByStationId">
delete from water_station_region where station_id = #{stationId}
</delete>
<insert id="batchWaterStationRegion">
insert into water_station_region( station_id, lon, lat, px, LRR, XGR, XGSJ, BZ, YL1, YL2, YL3, YL4, YL5) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.stationId}, #{item.lon}, #{item.lat}, #{item.px}, #{item.LRR}, #{item.XGR}, #{item.XGSJ}, #{item.BZ}, #{item.YL1}, #{item.YL2}, #{item.YL3}, #{item.YL4}, #{item.YL5})
</foreach>
</insert>
</mapper>
\ No newline at end of file
......@@ -16,14 +16,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createTime" column="create_time" />
<result property="createUser" column="create_user" />
<result property="isOpen" column="is_open" />
<result property="openId" column="open_id" />
</resultMap>
<sql id="selectWaterStationUserVo">
select a.id, name, age, gender, phone, id_num, station_id, a.create_time, a.create_user,b.is_open from water_station_user a left join water_station b on a.station_id=b.id
select a.id, name, age, gender, phone, id_num, station_id, a.create_time, a.create_user,b.is_open, open_id from water_station_user a left join water_station b on a.station_id=b.id
</sql>
<select id="selectWaterStationUserList" parameterType="WaterStationUser" resultMap="WaterStationUserResult">
select su.id, su.name, su.age, su.gender, su.phone, su.id_num, su.station_id, s.station_name, su.create_time, su.create_user
select su.id, su.name, su.age, su.gender, su.phone, su.id_num, su.station_id, s.station_name, su.create_time, su.create_user, su.open_id
from water_station_user su LEFT JOIN water_station s ON s.id = su.station_id
<where>
su.del_flag = '0'
......@@ -34,12 +35,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="idNum != null and idNum != ''"> and su.id_num = #{idNum}</if>
<if test="stationId != null "> and su.station_id = #{stationId}</if>
<if test="createUser != null and createUser != ''"> and su.create_user = #{createUser}</if>
<if test="openId != null and openId != ''"> and su.open_id = #{openId}</if>
</where>
order by su.create_time DESC
</select>
<select id="selectWaterStationUserById" parameterType="Long" resultType="com.qianhe.system.domain.WaterStationUser">
select su.id, su.name, su.age, su.gender, su.phone, su.id_num, su.station_id, s.station_name, su.create_time, su.create_user
select su.id, su.name, su.age, su.gender, su.phone, su.id_num, su.station_id, s.station_name, su.create_time, su.create_user, su.open_id
from water_station_user su LEFT JOIN water_station s ON s.id = su.station_id
where su.id = #{id}
</select>
......@@ -61,6 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="stationId != null">station_id,</if>
<if test="createTime != null">create_time,</if>
<if test="createUser != null">create_user,</if>
<if test="openId != null">open_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
......@@ -71,6 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="stationId != null">#{stationId},</if>
<if test="createTime != null">#{createTime},</if>
<if test="createUser != null">#{createUser},</if>
<if test="openId != null">#{openId},</if>
</trim>
</insert>
......@@ -85,6 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="stationId != null">station_id = #{stationId},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="createUser != null">create_user = #{createUser},</if>
<if test="openId != null">open_id = #{openId},</if>
</trim>
where id = #{id}
</update>
......
......@@ -121,6 +121,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.antMatchers("/callback/payNotify/").permitAll()
//银行回调
.antMatchers("/ccbback/payNotify/").permitAll()
.antMatchers("/msg/**").permitAll()
.antMatchers("/system/order/gzhSend").permitAll()
//通用接口放行
.antMatchers("/common/**").permitAll()
//测试放行所有接口
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment