Commit 926c3aaf by sdif

Merge remote-tracking branch 'origin/dev' into dev

parents 79742b4e 4599979f
package com.pz.accompany;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
import com.pz.common.core.page.TableDataInfo;
import com.pz.merchant.domain.vo.EmployeesVo;
import com.pz.merchant.service.IEmployeesService;
import com.pz.system.domain.bo.IncomeBo;
import com.pz.system.domain.vo.IncomeVo;
import com.pz.system.service.IIncomeService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 陪诊员-财务收益
*
* @author ruoyi
* @date 2023-09-07
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/accompany/employees")
public class EmployeesIncomeController extends BaseController {
private final IEmployeesService iEmployeesService;
private final IIncomeService iIncomeService;
/**
* 获取总收益与余额
*/
@GetMapping("/getIncome")
public R<EmployeesVo> getIncome() {
return R.ok(iEmployeesService.queryByUserId(getUserId()));
}
/**
* 查询陪诊员提现记录
*/
@GetMapping("/list")
public TableDataInfo<IncomeVo> list(IncomeBo bo, PageQuery pageQuery) {
EmployeesVo employeesVo = iEmployeesService.queryByUserId(getUserId());
bo.setEcId(employeesVo.getId());
return iIncomeService.queryByEidList(bo, pageQuery);
}
}
package com.pz.web.controller.system;
import java.util.List;
import java.util.Arrays;
import java.util.Optional;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.system.domain.StoreInfo;
import com.pz.system.mapper.StoreInfoMapper;
import com.pz.system.service.IStoreInfoService;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.pz.common.annotation.RepeatSubmit;
import com.pz.common.annotation.Log;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
import com.pz.common.core.validate.AddGroup;
import com.pz.common.core.validate.EditGroup;
import com.pz.common.enums.BusinessType;
import com.pz.common.utils.poi.ExcelUtil;
import com.pz.system.domain.vo.StoreGoodsCategoryVo;
import com.pz.system.domain.bo.StoreGoodsCategoryBo;
import com.pz.system.service.IStoreGoodsCategoryService;
import com.pz.common.core.page.TableDataInfo;
/**
* 商品分类
*
* @author ruoyi
* @date 2023-09-12
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/goodsCategory")
public class StoreGoodsCategoryController extends BaseController {
private final IStoreGoodsCategoryService iStoreGoodsCategoryService;
private final StoreInfoMapper storeInfoMapper;
/**
* 查询商品分类列表
*/
@SaCheckPermission("system:goodsCategory:list")
@GetMapping("/list")
public TableDataInfo<StoreGoodsCategoryVo> list(StoreGoodsCategoryBo bo, PageQuery pageQuery) {
Optional.ofNullable(storeInfoMapper.selectOne(Wrappers.<StoreInfo>lambdaQuery().eq(StoreInfo::getUid, getUserId())))
.ifPresent(storeInfo -> bo.setStoreId(storeInfo.getId()));
return iStoreGoodsCategoryService.queryPageList(bo, pageQuery);
}
/**
* 导出商品分类列表
*/
@SaCheckPermission("system:goodsCategory:export")
@Log(title = "商品分类", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(StoreGoodsCategoryBo bo, HttpServletResponse response) {
List<StoreGoodsCategoryVo> list = iStoreGoodsCategoryService.queryList(bo);
ExcelUtil.exportExcel(list, "商品分类", StoreGoodsCategoryVo.class, response);
}
/**
* 获取商品分类详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:goodsCategory:query")
@GetMapping("/{id}")
public R<StoreGoodsCategoryVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Integer id) {
return R.ok(iStoreGoodsCategoryService.queryById(id));
}
/**
* 新增商品分类
*/
@SaCheckPermission("system:goodsCategory:add")
@Log(title = "商品分类", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody StoreGoodsCategoryBo bo) {
return toAjax(iStoreGoodsCategoryService.insertByBo(bo));
}
/**
* 修改商品分类
*/
@SaCheckPermission("system:goodsCategory:edit")
@Log(title = "商品分类", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody StoreGoodsCategoryBo bo) {
return toAjax(iStoreGoodsCategoryService.updateByBo(bo));
}
/**
* 删除商品分类
*
* @param ids 主键串
*/
@SaCheckPermission("system:goodsCategory:remove")
@Log(title = "商品分类", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Integer[] ids) {
return toAjax(iStoreGoodsCategoryService.deleteWithValidByIds(Arrays.asList(ids), true));
}
}
package com.pz.web.controller.system;
import java.util.List;
import java.util.Arrays;
import java.util.Optional;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.system.domain.StoreInfo;
import com.pz.system.mapper.StoreInfoMapper;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.pz.common.annotation.RepeatSubmit;
import com.pz.common.annotation.Log;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
import com.pz.common.core.validate.AddGroup;
import com.pz.common.core.validate.EditGroup;
import com.pz.common.enums.BusinessType;
import com.pz.common.utils.poi.ExcelUtil;
import com.pz.system.domain.vo.StoreGoodsTagVo;
import com.pz.system.domain.bo.StoreGoodsTagBo;
import com.pz.system.service.IStoreGoodsTagService;
import com.pz.common.core.page.TableDataInfo;
/**
* 商品标签
*
* @author ruoyi
* @date 2023-09-12
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/goodsTag")
public class StoreGoodsTagController extends BaseController {
private final IStoreGoodsTagService iStoreGoodsTagService;
private final StoreInfoMapper storeInfoMapper;
/**
* 查询商品标签列表
*/
@SaCheckPermission("system:goodsTag:list")
@GetMapping("/list")
public TableDataInfo<StoreGoodsTagVo> list(StoreGoodsTagBo bo, PageQuery pageQuery) {
Optional.ofNullable(storeInfoMapper.selectOne(Wrappers.<StoreInfo>lambdaQuery().eq(StoreInfo::getUid, getUserId())))
.ifPresent(storeInfo -> bo.setStoreId(storeInfo.getId()));
return iStoreGoodsTagService.queryPageList(bo, pageQuery);
}
/**
* 导出商品标签列表
*/
@SaCheckPermission("system:goodsTag:export")
@Log(title = "商品标签", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(StoreGoodsTagBo bo, HttpServletResponse response) {
List<StoreGoodsTagVo> list = iStoreGoodsTagService.queryList(bo);
ExcelUtil.exportExcel(list, "商品标签", StoreGoodsTagVo.class, response);
}
/**
* 获取商品标签详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:goodsTag:query")
@GetMapping("/{id}")
public R<StoreGoodsTagVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Integer id) {
return R.ok(iStoreGoodsTagService.queryById(id));
}
/**
* 新增商品标签
*/
@SaCheckPermission("system:goodsTag:add")
@Log(title = "商品标签", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody StoreGoodsTagBo bo) {
return toAjax(iStoreGoodsTagService.insertByBo(bo));
}
/**
* 修改商品标签
*/
@SaCheckPermission("system:goodsTag:edit")
@Log(title = "商品标签", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody StoreGoodsTagBo bo) {
return toAjax(iStoreGoodsTagService.updateByBo(bo));
}
/**
* 删除商品标签
*
* @param ids 主键串
*/
@SaCheckPermission("system:goodsTag:remove")
@Log(title = "商品标签", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Integer[] ids) {
return toAjax(iStoreGoodsTagService.deleteWithValidByIds(Arrays.asList(ids), true));
}
}
......@@ -2,10 +2,16 @@ package com.pz.web.controller.system;
import java.util.List;
import java.util.Arrays;
import java.util.Optional;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.system.domain.StoreInfo;
import com.pz.system.mapper.StoreInfoMapper;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
......@@ -37,12 +43,16 @@ public class StoreIncomeController extends BaseController {
private final IStoreIncomeService iStoreIncomeService;
private final StoreInfoMapper storeInfoMapper;
/**
* 查询商城提现审批列表
*/
@SaCheckPermission("system:storeIncome:list")
@GetMapping("/list")
public TableDataInfo<StoreIncomeVo> list(StoreIncomeBo bo, PageQuery pageQuery) {
Optional.ofNullable(storeInfoMapper.selectOne(Wrappers.<StoreInfo>lambdaQuery().eq(StoreInfo::getUid, getUserId())))
.ifPresent(storeInfo -> bo.setStoreId(storeInfo.getId()));
return iStoreIncomeService.queryPageList(bo, pageQuery);
}
......@@ -77,6 +87,8 @@ public class StoreIncomeController extends BaseController {
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody StoreIncomeBo bo) {
Optional.ofNullable(storeInfoMapper.selectOne(Wrappers.<StoreInfo>lambdaQuery().eq(StoreInfo::getUid, getUserId())))
.ifPresent(storeInfo -> bo.setStoreId(storeInfo.getId()));
return toAjax(iStoreIncomeService.insertByBo(bo));
}
......
......@@ -2,8 +2,12 @@ package com.pz.web.controller.system;
import java.util.List;
import java.util.Arrays;
import java.util.Optional;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.system.domain.StoreInfo;
import com.pz.system.domain.vo.StoreAdminOrderVo;
import com.pz.system.mapper.StoreInfoMapper;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
......@@ -40,12 +44,16 @@ public class StoreOrderController extends BaseController {
private final IStoreOrderService iStoreOrderService;
private final StoreInfoMapper storeInfoMapper;
/**
* 查询商城订单列表
*/
@SaCheckPermission("system:storeOrder:list")
@GetMapping("/list")
public TableDataInfo<StoreAdminOrderVo> list(StoreOrderBo bo, PageQuery pageQuery) {
Optional.ofNullable(storeInfoMapper.selectOne(Wrappers.<StoreInfo>lambdaQuery().eq(StoreInfo::getUid, getUserId())))
.ifPresent(storeInfo -> bo.setStoreId(storeInfo.getId()));
return iStoreOrderService.queryPageList(bo, pageQuery);
}
......
......@@ -246,7 +246,7 @@ xss:
# 过滤开关
enabled: true
# 排除链接(多个用逗号分隔)
excludes: /system/notice,/system/hospital
excludes: /system/notice,/system/hospital,/system/goods
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
......@@ -286,9 +286,16 @@ wechat:
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
pay:
appId: wx6cc2fd1bca9472ae #微信公众号或者小程序等的appid
mchId: 1640662528 #微信支付商户号
mchKey: FogyUzGHMnsoUU3exYyDO8DEKEtNjsSx #微信支付商户密钥
keyPath: classpath:/apiclient_cert.p12 # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
--- # 文件上传设置
file:
#upload-path: /www/wwwroot/pz/upload
upload-path: D:/www/wwwroot/pz/upload
#注意:响应路径必须加上file后缀
response-path: https://www.pz.com/file
......@@ -52,6 +52,12 @@
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.39</version>
</dependency>
<!-- JSON工具类 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
......@@ -171,8 +177,12 @@
<artifactId>weixin-java-miniapp</artifactId>
<version>4.5.5.B</version>
</dependency>
<!--微信支付-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>4.5.0</version>
</dependency>
</dependencies>
</project>
......@@ -3,8 +3,6 @@ package com.pz.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
/**
* 微信小程序配置属性
*
......@@ -12,7 +10,7 @@ import java.util.List;
*/
@Data
@ConfigurationProperties(prefix = "wechat.applet")
public class WechatProperties {
public class WechatAppletProperties {
/**
* 设置微信小程序的appid
......
......@@ -27,14 +27,14 @@ import java.io.File;
*/
@Slf4j
@Configuration
@EnableConfigurationProperties(WechatProperties.class)
@EnableConfigurationProperties({WechatAppletProperties.class, WechatPayProperties.class})
public class WechatConfiguration {
private final WechatProperties properties;
private final WechatAppletProperties properties;
private static WxMaMessageRouter router;
private static WxMaService maServices;
@Autowired
public WechatConfiguration(WechatProperties properties) {
public WechatConfiguration(WechatAppletProperties properties) {
this.properties = properties;
}
......@@ -54,7 +54,7 @@ public class WechatConfiguration {
@PostConstruct
public void init() {
WechatProperties properties = this.properties;
WechatAppletProperties properties = this.properties;
if (properties == null) {
throw new WxRuntimeException("未检测到合法微信配置属性");
}
......
package com.pz.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 微信小程序配置属性
*
* @author Wangmin
*/
@Data
@ConfigurationProperties(prefix = "wechat.pay")
public class WechatPayProperties {
/**
* 设置微信公众号或者小程序等的appid
*/
private String appId;
/**
* 微信支付商户号
*/
private String mchId;
/**
* 微信支付商户密钥
*/
private String mchKey;
/**
* P12 证书位置
*/
private String keyPath;
}
package com.pz.common.config;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Binary Wang
*/
@Configuration
@ConditionalOnClass(WxPayService.class)
@EnableConfigurationProperties(WechatPayProperties.class)
@AllArgsConstructor
public class WxPayConfiguration {
private WechatPayProperties properties;
@Bean
@ConditionalOnMissingBean
public WxPayService wxService() {
WxPayConfig payConfig = new WxPayConfig();
payConfig.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
payConfig.setMchId(StringUtils.trimToNull(this.properties.getMchId()));
payConfig.setMchKey(StringUtils.trimToNull(this.properties.getMchKey()));
payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
// 可以指定是否使用沙箱环境
payConfig.setUseSandboxEnv(false);
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(payConfig);
return wxPayService;
}
}
......@@ -42,6 +42,11 @@ public class SysUser extends BaseEntity {
private String openId;
/**
* 微信公众号openid
*/
private String wxOpenid;
/**
* 部门ID
*/
private Long deptId;
......
package com.pz.common.response;
import lombok.Data;
@Data
public class WxAuthResponse {
private String access_token;
private String openid;
private String expires_in;
private String refresh_token;
private String scope;
}
package com.pz.merchant.controller.applet;
import cn.dev33.satoken.annotation.SaIgnore;
import com.dtflys.forest.annotation.Get;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.validate.EditGroup;
import com.pz.merchant.domain.bo.EmployeesListBo;
import com.pz.merchant.domain.bo.SetEmployeeWorkingHourBo;
import com.pz.merchant.domain.vo.EmployeesListVo;
import com.pz.merchant.domain.bo.CompanyBalanceBo;
import com.pz.merchant.domain.bo.ModifyCompanyInfoBo;
import com.pz.merchant.domain.vo.CompanyAppVo;
import com.pz.merchant.domain.vo.CompanyBalanceVo;
import com.pz.merchant.domain.vo.FinanceStatisticVo;
import com.pz.merchant.service.ICompanyService;
import com.pz.merchant.service.IEmployeesService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
/**
* 商户[小程序]
*
......@@ -32,6 +33,53 @@ public class CompanyController extends BaseController {
private final ICompanyService companyService;
/**
* 修改商户名称/头像
*
* @param bo 商户参数
* @return 操作结果
*/
@PutMapping("/modify")
public R<Boolean> modifyCompanySimpleData(@Validated(EditGroup.class) @RequestBody ModifyCompanyInfoBo bo) {
return R.ok(companyService.modifyCompanySimpleInfo(bo));
}
/**
* 查询商户信息
*
* @param companyId 商户ID
* @return 商户信息
*/
@GetMapping("/info")
public R<CompanyAppVo> getCompanyInfo(@NotNull(message = "商户ID不能为空") Integer companyId) {
return R.ok(companyService.queryCompanyDataForApp(companyId));
}
/**
* 查询商户财务统计
*
* @param companyId 商户ID
* @param page 分页
* @return 商户财务统计及成交明细
*/
@GetMapping("/finance")
public R<FinanceStatisticVo> getFinanceStatistic(@NotNull(message = "商户ID不能为空") Integer companyId, PageQuery page) {
return R.ok(companyService.queryFinanceStatistic(companyId, page));
}
/**
* 查询商户账户余额
*
* @param bo 查询参数
* @param page 分页
* @return 商户账户余额及提现记录
*/
@GetMapping("/balance")
public R<CompanyBalanceVo> getBalance(CompanyBalanceBo bo, PageQuery page) {
if (bo.getCompanyId() == null) {
R.fail("未指定商户ID");
}
return R.ok(companyService.queryCompanyBalance(bo, page));
}
}
package com.pz.merchant.controller.applet;
import cn.dev33.satoken.annotation.SaIgnore;
import com.dtflys.forest.annotation.Put;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
......@@ -82,7 +83,7 @@ public class EmployeesController extends BaseController {
* @param emId 陪诊员ID
* @return 切换用户身份结果
*/
@GetMapping("/switchIdentity")
@PutMapping("/switchIdentity")
public R<Boolean> switchIdentity(@NotNull(message = "陪诊员ID不能为空") Integer emId) {
return R.ok(employeesService.switchEmployeeIdentity(emId));
}
......@@ -93,7 +94,7 @@ public class EmployeesController extends BaseController {
* @param emId 陪诊员ID
* @return 切换用户状态结果
*/
@GetMapping("/switchStatus")
@PutMapping("/switchStatus")
public R<Boolean> switchStatus(@NotNull(message = "陪诊员ID不能为空") Integer emId) {
return R.ok(employeesService.disableOrRecover(emId));
}
......
......@@ -6,20 +6,28 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.alibaba.fastjson.JSONObject;
import com.pz.common.constant.Constants;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.R;
import com.pz.common.core.domain.entity.SysUser;
import com.pz.common.exception.ServiceException;
import com.pz.common.response.WxAuthResponse;
import com.pz.common.utils.StringUtils;
import com.pz.common.config.WechatConfiguration;
import com.pz.merchant.domain.WechatUserInfo;
import com.pz.merchant.domain.bo.WechatLoginBo;
import com.pz.system.mapper.SysUserMapper;
import com.pz.system.service.ISysUserService;
import com.pz.system.service.SysLoginService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
/**
......@@ -38,6 +46,8 @@ public class WechatLoginController extends BaseController {
private final SysLoginService loginService;
private final SysUserMapper sysUserMapper;
/**
* 登录
*
......@@ -71,6 +81,25 @@ public class WechatLoginController extends BaseController {
}
/**
* 解析公众号openid重定向
*/
@SaIgnore
@GetMapping("wxopenid")
public void wxopenid(String userId, String code, String state, HttpServletResponse response) throws IOException {
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx6cc2fd1bca9472ae&secret=2edf95828b1a19fc5149f6650cde71f1&code=" + code
+ "&grant_type=authorization_code";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
WxAuthResponse authResponse = JSONObject.parseObject(result, WxAuthResponse.class);
String mpOpenId = authResponse.getOpenid();
SysUser sysUser = new SysUser();
sysUser.setUserId(Long.valueOf(userId));
sysUser.setWxOpenid(mpOpenId);
sysUserMapper.updateById(sysUser);
response.sendRedirect("https://peizheng.shanpeikj.com/wx/index.html");
}
/**
* 注销
*/
@GetMapping("logout")
......
package com.pz.merchant.domain.bo;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 商户余额实体
* <p>created in 2023/9/13 11:17
*
* @author WangMin
* @version 1.0
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CompanyBalanceBo extends BaseEntity {
/**
* 商户ID
*/
private Integer companyId;
/**
* 提现状态:0-审核中,1-成功提现,2-拒绝提现
*/
private Integer incomeStatus;
}
package com.pz.merchant.domain.bo;
import com.pz.common.core.validate.EditGroup;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* <p>created in 2023/9/12 14:11
*
......@@ -7,5 +12,23 @@ package com.pz.merchant.domain.bo;
* @version 1.0
*/
@Data
public class ModifyCompanyInfoBo {
/**
* 商户ID
*/
@NotNull(groups = EditGroup.class, message = "商户ID不能为空")
private Integer companyId;
/**
* 用户名称
*/
private String companyName;
/**
* 用户头像
*/
private String avatar;
}
package com.pz.merchant.domain.vo;
import lombok.Data;
/**
* 小程序商户信息返回数据实体
* <p>created in 2023/9/12 14:37
*
* @author WangMin
* @version 1.0
*/
@Data
public class CompanyAppVo {
/**
* 商户名称
*/
private String name;
/**
* 头像
*/
private String avatar;
/**
* 手机号
*/
private String phone;
/**
* 商户地址
*/
private String address;
/**
* 商户状态 0审核 1正常 2禁用
*/
private Integer status;
/**
* 营业执照
*/
private String businessLicense;
}
package com.pz.merchant.domain.vo;
import lombok.Data;
import java.util.List;
/**
* 商户余额实体
* <p>created in 2023/9/13 11:13
*
* @author WangMin
* @version 1.0
*/
@Data
public class CompanyBalanceVo {
/**
* 总收益
*/
private Float totalRevenue;
/**
* 可用余额
*/
private Float balance;
/**
* 冻结余额
*/
private Float freezeBalance;
/**
* 提现记录总数
*/
private Long total;
/**
* 提现记录
*/
private List<CompanyIncomeVo> incomes;
}
package com.pz.merchant.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* 商户提现实体
* <p>created in 2023/9/13 11:05
*
* @author WangMin
* @version 1.0
*/
@Data
public class CompanyIncomeVo {
/**
* 提现单号
*/
private String partnerTradeNo;
/**
* 提现金额
*/
private Float amount;
/**
* 提现审核备注,拒绝提现时可能用到
*/
private String remark;
/**
* 更新时间
*/
private Date updateTime;
}
package com.pz.merchant.domain.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>created in 2023/9/13 9:29
*
* @author WangMin
* @version 1.0
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class FinanceOrderInfoVo extends OrderInfoVO {
/**
* 陪诊员名称
*/
private String emName;
}
package com.pz.merchant.domain.vo;
import lombok.Data;
import java.util.List;
/**
* 财务统计实体
* <p>created in 2023/9/13 9:34
*
* @author WangMin
* @version 1.0
*/
@Data
public class FinanceStatisticVo {
/**
* 今日收益
*/
private Float todayDeal;
/**
* 数据总量
*/
private Long total;
/**
* 所有已完成订单
*/
private List<FinanceOrderInfoVo> orders;
}
package com.pz.merchant.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.pz.common.core.mapper.BaseMapperPlus;
import com.pz.merchant.domain.Company;
import com.pz.merchant.domain.vo.CompanyAppVo;
import com.pz.merchant.domain.vo.CompanyVo;
import com.pz.merchant.domain.vo.FinanceOrderInfoVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
/**
* 商户Mapper接口
......@@ -15,4 +23,26 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CompanyMapper extends BaseMapperPlus<CompanyMapper, Company, CompanyVo> {
/**
* 查询商户信息
*
* @param companyId 商户ID
* @return 商户信息
*/
CompanyAppVo selectCompanyDataForApp(Integer companyId);
/**
* @param companyId 商户ID
* @return 商户今日收益
*/
BigDecimal selectFinanceStatistic(Integer companyId);
/**
* 查询所有已完成订单
*
* @param queryWrapper 查询条件
* @return 订单
*/
IPage<FinanceOrderInfoVo> selectAllOrder(IPage<FinanceOrderInfoVo> page, @Param(Constants.WRAPPER) Wrapper<Company> queryWrapper);
}
......@@ -41,10 +41,9 @@ public interface EmployeesMapper extends BaseMapperPlus<EmployeesMapper, Employe
*/
TodayOrderListVo selectEmployeesInfoById(@Param("id") Integer emId);
/**
* 查询订单
*
* @param queryWrapper 查询条件
* @return 订单
*/
......
......@@ -3,8 +3,13 @@ package com.pz.merchant.service;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.page.TableDataInfo;
import com.pz.merchant.domain.bo.CompanyBalanceBo;
import com.pz.merchant.domain.bo.CompanyBo;
import com.pz.merchant.domain.bo.ModifyCompanyInfoBo;
import com.pz.merchant.domain.vo.CompanyAppVo;
import com.pz.merchant.domain.vo.CompanyBalanceVo;
import com.pz.merchant.domain.vo.CompanyVo;
import com.pz.merchant.domain.vo.FinanceStatisticVo;
import java.util.Collection;
import java.util.List;
......@@ -46,4 +51,38 @@ public interface ICompanyService {
* 校验并批量删除商户信息
*/
Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
/**
* 修改商户名称/头像 信息
*
* @param bo 商户信息
* @return 操作结果
*/
boolean modifyCompanySimpleInfo(ModifyCompanyInfoBo bo);
/**
* 查询商户信息
*
* @param companyId 商户ID
* @return 商户信息
*/
CompanyAppVo queryCompanyDataForApp(Integer companyId);
/**
* 查询商户今日收益以及所有已完成订单
*
* @param companyId 商户ID
* @param page 分页设置
* @return 商户财务统计
*/
FinanceStatisticVo queryFinanceStatistic(Integer companyId, PageQuery page);
/**
* 查询账户余额
*
* @param bo 查询参数
* @param page 分页结果
* @return 商户余额及提现记录
*/
CompanyBalanceVo queryCompanyBalance(CompanyBalanceBo bo, PageQuery page);
}
......@@ -117,4 +117,11 @@ public interface IEmployeesService {
* @return 操作结果
*/
boolean disableOrRecover(Integer emId);
/**
* 根据用户id获取陪诊员信息
* @param userId
* @return
*/
EmployeesVo queryByUserId(Long userId);
}
......@@ -2,25 +2,33 @@ package com.pz.merchant.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pz.common.core.domain.entity.SysUser;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.utils.StringUtils;
import com.pz.merchant.domain.Company;
import com.pz.merchant.domain.bo.CompanyBalanceBo;
import com.pz.merchant.domain.bo.CompanyBo;
import com.pz.merchant.domain.vo.CompanyVo;
import com.pz.merchant.domain.bo.ModifyCompanyInfoBo;
import com.pz.merchant.domain.vo.*;
import com.pz.merchant.mapper.CompanyMapper;
import com.pz.merchant.service.ICompanyService;
import com.pz.merchant.service.ISonOrderService;
import com.pz.system.domain.Income;
import com.pz.system.mapper.CityMapper;
import com.pz.system.mapper.IncomeMapper;
import com.pz.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Optional;
import java.math.BigDecimal;
import java.util.*;
/**
* 商户Service业务层处理
......@@ -36,11 +44,17 @@ public class CompanyServiceImpl implements ICompanyService {
private final CityMapper cityMapper;
private final SysUserMapper userMapper;
private final SonOrderServiceBuilder sonOrderServiceBuilder;
private final IncomeMapper incomeMapper;
/**
* 查询商户
*/
@Override
public CompanyVo queryById(Integer id){
public CompanyVo queryById(Integer id) {
return baseMapper.selectVoById(id);
}
......@@ -109,8 +123,8 @@ public class CompanyServiceImpl implements ICompanyService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(Company entity){
//TODO 做一些数据校验,如唯一约束
private void validEntityBeforeSave(Company entity) {
// TODO 做一些数据校验,如唯一约束
}
/**
......@@ -118,9 +132,101 @@ public class CompanyServiceImpl implements ICompanyService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
if (isValid) {
// TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 修改商户名称/头像 信息
*
* @param bo 商户信息
* @return 操作结果
*/
@Override
public boolean modifyCompanySimpleInfo(ModifyCompanyInfoBo bo) {
CompanyVo companyVo = baseMapper.selectVoById(bo.getCompanyId());
Objects.requireNonNull(companyVo, "该商户不存在");
boolean companyFlag = true;
if (StringUtils.isNotEmpty(bo.getCompanyName())) {
LambdaUpdateWrapper<Company> companyWrapper = Wrappers.lambdaUpdate();
companyWrapper.set(Company::getName, bo.getCompanyName())
.eq(Company::getId, companyVo.getId());
companyFlag = baseMapper.update(null, companyWrapper) > 0;
}
boolean userFlag = true;
if (StringUtils.isNotEmpty(bo.getAvatar())) {
LambdaUpdateWrapper<SysUser> userWrapper = Wrappers.lambdaUpdate();
userWrapper.set(SysUser::getAvatar, bo.getAvatar())
.eq(SysUser::getUserId, companyVo.getUid());
userFlag = userMapper.update(null, userWrapper) > 0;
}
return companyFlag && userFlag;
}
/**
* 查询商户信息
*
* @param companyId 商户ID
* @return 商户信息
*/
@Override
public CompanyAppVo queryCompanyDataForApp(Integer companyId) {
return baseMapper.selectCompanyDataForApp(companyId);
}
/**
* 查询商户今日收益以及所有已完成订单
*
* @param companyId 商户ID
* @param page 分页设置
* @return 商户财务统计
*/
@Override
public FinanceStatisticVo queryFinanceStatistic(Integer companyId, PageQuery page) {
BigDecimal todayDeal = Optional.ofNullable(baseMapper.selectFinanceStatistic(companyId)).orElse(BigDecimal.ZERO);
FinanceStatisticVo result = new FinanceStatisticVo();
result.setTodayDeal(todayDeal.floatValue());
QueryWrapper<Company> query = Wrappers.query();
query.eq("employees.company_id", companyId)
.eq("total_order.status", 2); // 查询已完成的订单数据
IPage<FinanceOrderInfoVo> pageResult = baseMapper.selectAllOrder(page.build(), query);
result.setTotal(pageResult.getTotal());
// 根据不同子订单装载就诊人员信息和子订单状态
pageResult.getRecords().forEach(suborder -> {
ISonOrderService orderService = sonOrderServiceBuilder.getSonOrderService(suborder.getBid());
SonOrderVo orderStatus;
if (orderService != null && (orderStatus = orderService.getSonOrderInfoByTotalId(suborder.getOrderId())) != null) {
suborder.setUserName(orderStatus.getUserName());
suborder.setSonOrderStatus(orderStatus.getOrderStatus());
}
});
result.setOrders(pageResult.getRecords());
return result;
}
/**
* 查询账户余额
*
* @param bo 查询参数
* @param page 分页结果
* @return 商户余额及提现记录
*/
@Override
public CompanyBalanceVo queryCompanyBalance(CompanyBalanceBo bo, PageQuery page) {
CompanyBalanceVo result = new CompanyBalanceVo();
CompanyVo companyVo = baseMapper.selectVoById(bo.getCompanyId());
Objects.requireNonNull(companyVo, "未查询到商户信息");
result.setBalance(Float.valueOf(companyVo.getBalance()));
result.setFreezeBalance(Float.valueOf(companyVo.getFreezeBalance()));
result.setTotalRevenue(Float.valueOf(companyVo.getTotalRevenue()));
LambdaUpdateWrapper<Income> wrapper = Wrappers.lambdaUpdate();
wrapper.eq(bo.getCompanyId() != null, Income::getEcId, bo.getCompanyId())
.eq(bo.getIncomeStatus() != null, Income::getStatus, bo.getIncomeStatus());
IPage<CompanyIncomeVo> incomePage = incomeMapper.selectCompanyIncome(page.build(), wrapper);
result.setTotal(incomePage.getTotal());
result.setIncomes(incomePage.getRecords());
return result;
}
}
......@@ -144,25 +144,25 @@ public class EmployeesServiceImpl implements IEmployeesService {
SysUser sysUser = new SysUser();
sysUser.setUserId(bo.getUid().longValue());
sysUser.setPhonenumber(bo.getPhone());
if(bo.getIdentity() == 2){
if (bo.getIdentity() == 2) {
Employees add = BeanUtil.toBean(bo, Employees.class);
add.setNowType(1);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
//修改系统表角色
// 修改系统表角色
sysUser.setUserType(UserType.APP_USER.getUserType());
sysUserMapper.updateById(sysUser);
}
return flag;
}else if(bo.getIdentity() == 3){//商户新增
} else if (bo.getIdentity() == 3) {//商户新增
Company add = BeanUtil.toBean(bo, Company.class);
boolean flag = companyMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
//修改系统表角色
// 修改系统表角色
sysUser.setUserType(UserType.AMERCHANT_USER.getUserType());
sysUserMapper.updateById(sysUser);
}
......@@ -278,6 +278,11 @@ public class EmployeesServiceImpl implements IEmployeesService {
return baseMapper.updateById(BeanUtil.toBean(employeesVo, Employees.class)) > 0;
}
@Override
public EmployeesVo queryByUserId(Long userId) {
return baseMapper.selectVoOne(Wrappers.<Employees>lambdaQuery().eq(Employees::getUid, userId));
}
/**
* 保存前的数据校验
*/
......@@ -319,8 +324,9 @@ public class EmployeesServiceImpl implements IEmployeesService {
public TodayOrderListVo queryEmployeesInfo(Integer emId) {
TodayOrderListVo result = baseMapper.selectEmployeesInfoById(emId);
QueryWrapper<Employees> query = Wrappers.query();
query.apply("date_format(total_order.create_time,'%Y-%m-%d') = current_date")
.eq("total_order.em_id", emId);
query.apply(" to_days(current_date) = to_days(total_order.create_time)")// 查询当天数据
.eq("total_order.em_id", emId)
.ne("total_order.business_id", 0); // 排除商城订单
IPage<OrderInfoVO> page = baseMapper.selectOrder(new PageQuery().build(), query);
// 根据不同子订单装载就诊人员信息和子订单状态
List<OrderInfoVO> orders = page.getRecords();
......@@ -347,7 +353,8 @@ public class EmployeesServiceImpl implements IEmployeesService {
public TableDataInfo<OrderInfoVO> queryAllOrder(OrderBo bo, PageQuery pageQuery) {
QueryWrapper<Employees> query = Wrappers.query();
query.eq(bo.getEmId() != null, "total_order.em_id", bo.getEmId())
.eq(bo.getServiceStatus() != null, "total_order.status", bo.getServiceStatus());
.eq(bo.getServiceStatus() != null, "total_order.status", bo.getServiceStatus())
.ne("total_order.business_id", 0); // 排除商城订单
IPage<OrderInfoVO> page = baseMapper.selectOrder(pageQuery.build(), query);
// 根据不同子订单装载就诊人员信息和子订单状态
page.getRecords().forEach(suborder -> {
......
package com.pz.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 商品分类对象 store_goods_category
*
* @author ruoyi
* @date 2023-09-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("store_goods_category")
public class StoreGoodsCategory extends BaseEntity {
private static final long serialVersionUID=1L;
/**
*
*/
@TableId(value = "id")
private Integer id;
/**
*
*/
private Integer storeId;
/**
* 分类名称
*/
private String title;
/**
* 排序
*/
private Integer sortord;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
/**
* 备注
*/
private String remark;
}
package com.pz.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 商品标签对象 store_goods_tag
*
* @author ruoyi
* @date 2023-09-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("store_goods_tag")
public class StoreGoodsTag extends BaseEntity {
private static final long serialVersionUID=1L;
/**
*
*/
@TableId(value = "id")
private Integer id;
/**
*
*/
private Integer storeId;
/**
* 标签
*/
private String title;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
/**
* 备注
*/
private String remark;
}
......@@ -26,7 +26,7 @@ public class StoreInfo extends BaseEntity {
/**
*
*/
private Integer storeId;
private Integer uid;
/**
*
*/
......
......@@ -69,5 +69,6 @@ public class DbghOrderBo extends BaseEntity {
*/
private String remark;
private String orderSn;
}
......@@ -119,5 +119,5 @@ public class DbmyOrderBo extends BaseEntity {
*/
private String remark;
private String orderSn;
}
......@@ -104,5 +104,5 @@ public class DbwzOrderBo extends BaseEntity {
*/
private String remark;
private String orderSn;
}
......@@ -4,6 +4,7 @@ import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.List;
/**
......@@ -38,9 +39,9 @@ public class StoreGoodsBo extends BaseEntity {
private String title;
/**
* 标签
* 标签
*/
private String tags;
private List<Integer> tagIds;
/**
* 原价
......
package com.pz.system.domain.bo;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
/**
* 商品分类业务对象 store_goods_category
*
* @author ruoyi
* @date 2023-09-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class StoreGoodsCategoryBo extends BaseEntity {
/**
*
*/
private Integer id;
/**
*
*/
private Integer storeId;
/**
* 分类名称
*/
private String title;
/**
* 排序
*/
private Integer sortord;
/**
* 备注
*/
private String remark;
}
package com.pz.system.domain.bo;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
/**
* 商品标签业务对象 store_goods_tag
*
* @author ruoyi
* @date 2023-09-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class StoreGoodsTagBo extends BaseEntity {
/**
*
*/
private Integer id;
/**
*
*/
private Integer storeId;
/**
* 标签
*/
private String title;
/**
* 备注
*/
private String remark;
}
......@@ -55,6 +55,4 @@ public class StoreIncomeBo extends BaseEntity {
* 备注
*/
private String remark;
}
......@@ -25,7 +25,7 @@ public class StoreInfoBo extends BaseEntity {
/**
*
*/
private Integer storeId;
private Integer uid;
/**
*
......
......@@ -88,4 +88,6 @@ public class StoreOrderBo extends BaseEntity {
* 商户名称
*/
private String title;
private Long userId;
}
......@@ -74,5 +74,5 @@ public class ZqghOrderBo extends BaseEntity {
*/
private String remark;
private String orderSn;
}
......@@ -84,5 +84,5 @@ public class ZyphOrderBo extends BaseEntity {
*/
private String remark;
private String orderSn;
}
......@@ -6,6 +6,8 @@ import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 支付订单视图对象 payment_record
......@@ -61,5 +63,8 @@ public class PaymentRecordVo {
@ExcelProperty(value = "备注")
private String remark;
private String userName;
private Date createTime;
}
package com.pz.system.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
......@@ -38,6 +39,7 @@ public class StoreAdminOrderVo implements Serializable {
*/
private String sName;
private Integer addressId;
/**
* 用户名称
*/
......@@ -57,4 +59,30 @@ public class StoreAdminOrderVo implements Serializable {
* 创建时间
*/
private Date createTime;
/**
* 物流名称
*/
private String logistics;
/**
* 物流单号
*/
private String logisticsCode;
/**
* 退货物流
*/
private String refundLogistics;
/**
* 退货物流单号
*/
private String refundLogisticsCode;
/**
* 用户收货信息
*/
private UserAddressVo userAddressVo;
}
package com.pz.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 商品分类视图对象 store_goods_category
*
* @author ruoyi
* @date 2023-09-12
*/
@Data
@ExcelIgnoreUnannotated
public class StoreGoodsCategoryVo {
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Integer id;
/**
*
*/
@ExcelProperty(value = "")
private Integer storeId;
/**
* 分类名称
*/
@ExcelProperty(value = "分类名称")
private String title;
/**
* 排序
*/
@ExcelProperty(value = "排序")
private Integer sortord;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}
package com.pz.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 商品标签视图对象 store_goods_tag
*
* @author ruoyi
* @date 2023-09-12
*/
@Data
@ExcelIgnoreUnannotated
public class StoreGoodsTagVo {
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Integer id;
/**
*
*/
@ExcelProperty(value = "")
private Integer storeId;
/**
* 标签
*/
@ExcelProperty(value = "标签")
private String title;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}
......@@ -4,7 +4,9 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert;
import com.pz.common.core.domain.BaseEntity;
import com.pz.system.domain.Carousel;
import com.pz.system.domain.StoreGoodsTag;
import lombok.Data;
import java.util.List;
......@@ -18,7 +20,7 @@ import java.util.List;
*/
@Data
@ExcelIgnoreUnannotated
public class StoreGoodsVo {
public class StoreGoodsVo extends BaseEntity {
private static final long serialVersionUID = 1L;
......@@ -107,4 +109,10 @@ public class StoreGoodsVo {
private Integer saleNum;
private List<Carousel> carousel;
private List<Integer> ids;
private List<StoreGoodsTagVo> list;
private String typeName;
}
......@@ -30,8 +30,7 @@ public class StoreInfoVo extends BaseEntity {
*
*/
@ExcelProperty(value = "")
private Integer storeId;
private Integer uid;
/**
* 商户名称
*/
......
package com.pz.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.pz.merchant.domain.Employees;
import com.pz.merchant.domain.bo.EmployeesListBo;
import com.pz.merchant.domain.vo.CompanyIncomeVo;
import com.pz.system.domain.Income;
import com.pz.system.domain.vo.IncomeVo;
import com.pz.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 陪诊员/商户提现Mapper接口
......@@ -10,6 +18,15 @@ import com.pz.common.core.mapper.BaseMapperPlus;
* @author ruoyi
* @date 2023-09-12
*/
@Mapper
public interface IncomeMapper extends BaseMapperPlus<IncomeMapper, Income, IncomeVo> {
/**
* 查询商户提现记录
* @param page 分页
* @param queryWrapper 查询参数
* @return 提现记录
*/
IPage<CompanyIncomeVo> selectCompanyIncome(IPage<CompanyIncomeVo> page, @Param(Constants.WRAPPER) Wrapper<Income> queryWrapper);
}
package com.pz.system.mapper;
import com.pz.system.domain.StoreGoodsCategory;
import com.pz.system.domain.vo.StoreGoodsCategoryVo;
import com.pz.common.core.mapper.BaseMapperPlus;
/**
* 商品分类Mapper接口
*
* @author ruoyi
* @date 2023-09-12
*/
public interface StoreGoodsCategoryMapper extends BaseMapperPlus<StoreGoodsCategoryMapper, StoreGoodsCategory, StoreGoodsCategoryVo> {
}
package com.pz.system.mapper;
import com.pz.system.domain.StoreGoodsTag;
import com.pz.system.domain.vo.StoreGoodsTagVo;
import com.pz.common.core.mapper.BaseMapperPlus;
/**
* 商品标签Mapper接口
*
* @author ruoyi
* @date 2023-09-12
*/
public interface StoreGoodsTagMapper extends BaseMapperPlus<StoreGoodsTagMapper, StoreGoodsTag, StoreGoodsTagVo> {
}
......@@ -46,4 +46,10 @@ public interface IIncomeService {
* 校验并批量删除陪诊员/商户提现信息
*/
Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
/**
* 根据陪诊员id获取提现记录
* @return
*/
TableDataInfo<IncomeVo> queryByEidList(IncomeBo bo,PageQuery pageQuery);
}
package com.pz.system.service;
import com.github.binarywang.wxpay.bean.request.WxPayRefundQueryRequest;
import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
import com.github.binarywang.wxpay.bean.result.WxPayRefundQueryResult;
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.page.TableDataInfo;
import com.pz.system.domain.bo.CityBo;
import com.pz.system.domain.vo.CityVo;
import java.util.Collection;
import java.util.List;
/**
* 城市Service接口
*
* @author ruoyi
* @date 2023-09-07
*/
public interface IPayService {
/**
* <pre>
* 查询订单(详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2)
* 该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
* 需要调用查询接口的情况:
* ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
* ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
* ◆ 调用被扫支付API,返回USERPAYING的状态;
* ◆ 调用关单或撤销接口API之前,需确认支付状态;
* 接口地址:https://api.mch.weixin.qq.com/pay/orderquery
* </pre>
*
* @param transactionId 微信订单号
* @param outTradeNo 商户系统内部的订单号,当没提供transactionId时需要传这个。
*/
WxPayOrderQueryResult queryOrder(String transactionId, String outTradeNo) throws WxPayException;
/**
* 统一下单
* 调用统一下单接口,并组装生成支付所需参数对象.
*
* @param request 统一下单请求参数
* @param <T> 请使用{@link com.github.binarywang.wxpay.bean.order}包下的类
* @return 返回 {@link com.github.binarywang.wxpay.bean.order}包下的类对象
*/
<T> T createOrder(WxPayUnifiedOrderRequest request) throws WxPayException;
/**
* <pre>
* 微信支付-申请退款
* 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
* 接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
* </pre>
*
* @param request 请求对象
* @return 退款操作结果
*/
WxPayRefundResult refund(WxPayRefundRequest request) throws WxPayException;
/**
* <pre>
* 微信支付-查询退款
* 应用场景:
* 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,
* 银行卡支付的退款3个工作日后重新查询退款状态。
* 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
* 接口链接:https://api.mch.weixin.qq.com/pay/refundquery
* </pre>
* 以下四个参数四选一
*
* @param transactionId 微信订单号
* @param outTradeNo 商户订单号
* @param outRefundNo 商户退款单号
* @param refundId 微信退款单号
* @return 退款信息
*/
WxPayRefundQueryResult refundQuery(String transactionId, String outTradeNo, String outRefundNo, String refundId) throws WxPayException;
/**
* 支付回调通知处理
* 微信请求的接口,要求可以公网访问,要放开token校验
* @param xmlData 微信提交的请求参数
*/
String parseOrderNotifyResult(String xmlData) throws WxPayException;
/**
* 退款回调通知处理
* 微信请求的接口,要求可以公网访问,要放开token校验
* @param xmlData 微信提交的请求参数
*/
String parseRefundNotifyResult(String xmlData) throws WxPayException;
}
package com.pz.system.service;
import com.pz.system.domain.StoreGoodsCategory;
import com.pz.system.domain.vo.StoreGoodsCategoryVo;
import com.pz.system.domain.bo.StoreGoodsCategoryBo;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 商品分类Service接口
*
* @author ruoyi
* @date 2023-09-12
*/
public interface IStoreGoodsCategoryService {
/**
* 查询商品分类
*/
StoreGoodsCategoryVo queryById(Integer id);
/**
* 查询商品分类列表
*/
TableDataInfo<StoreGoodsCategoryVo> queryPageList(StoreGoodsCategoryBo bo, PageQuery pageQuery);
/**
* 查询商品分类列表
*/
List<StoreGoodsCategoryVo> queryList(StoreGoodsCategoryBo bo);
/**
* 新增商品分类
*/
Boolean insertByBo(StoreGoodsCategoryBo bo);
/**
* 修改商品分类
*/
Boolean updateByBo(StoreGoodsCategoryBo bo);
/**
* 校验并批量删除商品分类信息
*/
Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
}
package com.pz.system.service;
import com.pz.system.domain.StoreGoodsTag;
import com.pz.system.domain.vo.StoreGoodsTagVo;
import com.pz.system.domain.bo.StoreGoodsTagBo;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 商品标签Service接口
*
* @author ruoyi
* @date 2023-09-12
*/
public interface IStoreGoodsTagService {
/**
* 查询商品标签
*/
StoreGoodsTagVo queryById(Integer id);
/**
* 查询商品标签列表
*/
TableDataInfo<StoreGoodsTagVo> queryPageList(StoreGoodsTagBo bo, PageQuery pageQuery);
/**
* 查询商品标签列表
*/
List<StoreGoodsTagVo> queryList(StoreGoodsTagBo bo);
/**
* 新增商品标签
*/
Boolean insertByBo(StoreGoodsTagBo bo);
/**
* 修改商品标签
*/
Boolean updateByBo(StoreGoodsTagBo bo);
/**
* 校验并批量删除商品标签信息
*/
Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
}
package com.pz.system.service;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.constant.CacheConstants;
......@@ -23,10 +25,8 @@ import com.pz.common.exception.user.CaptchaException;
import com.pz.common.exception.user.CaptchaExpireException;
import com.pz.common.exception.user.UserException;
import com.pz.common.helper.LoginHelper;
import com.pz.common.utils.DateUtils;
import com.pz.common.utils.MessageUtils;
import com.pz.common.utils.ServletUtils;
import com.pz.common.utils.StringUtils;
import com.pz.common.response.WxAuthResponse;
import com.pz.common.utils.*;
import com.pz.common.utils.redis.RedisUtils;
import com.pz.common.utils.spring.SpringUtils;
import com.pz.merchant.domain.WechatUserInfo;
......@@ -36,7 +36,11 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.Duration;
import java.util.List;
import java.util.function.Supplier;
......@@ -151,7 +155,7 @@ public class SysLoginService {
public String xccLogin(WechatUserInfo loginBo) {
SysUser user = loadUserByOpenid(loginBo.getOpenId());
if (user == null) {
SysUser userByPhone = userMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhonenumber,loginBo.getMobilePhone()));
SysUser userByPhone = userMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhonenumber, loginBo.getMobilePhone()));
// 若该手机号已经被注册,则直接绑定OpenID
if (userByPhone != null) {
userByPhone.setOpenId(loginBo.getOpenId());
......@@ -189,6 +193,7 @@ public class SysLoginService {
return StpUtil.getTokenValue();
}
/**
* 退出登录
*/
......
......@@ -138,4 +138,10 @@ public class IncomeServiceImpl implements IIncomeService {
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public TableDataInfo<IncomeVo> queryByEidList(IncomeBo bo, PageQuery pageQuery) {
Page<IncomeVo> result = baseMapper.selectVoPage(pageQuery.build(), Wrappers.<Income>lambdaQuery().eq(Income::getEcId, bo.getEcId()).eq(Income::getUserType, 1).eq(Income::getStatus, bo.getStatus()));
return TableDataInfo.build(result);
}
}
package com.pz.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult;
import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult;
import com.github.binarywang.wxpay.bean.request.*;
import com.github.binarywang.wxpay.bean.result.*;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.page.TableDataInfo;
import com.pz.system.domain.City;
import com.pz.system.domain.bo.CityBo;
import com.pz.system.domain.vo.CityVo;
import com.pz.system.mapper.CityMapper;
import com.pz.system.service.ICityService;
import com.pz.system.service.IPayService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;
import java.io.File;
import java.util.Collection;
import java.util.List;
/**
* 城市Service业务层处理
*
* @author ruoyi
* @date 2023-09-07
*/
@RequiredArgsConstructor
@Service
public class PayServiceImpl implements IPayService {
@Autowired
private WxPayService wxService;
/**
* <pre>
* 查询订单(详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2)
* 该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
* 需要调用查询接口的情况:
* ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
* ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
* ◆ 调用被扫支付API,返回USERPAYING的状态;
* ◆ 调用关单或撤销接口API之前,需确认支付状态;
* 接口地址:https://api.mch.weixin.qq.com/pay/orderquery
* </pre>
*
* @param transactionId 微信订单号
* @param outTradeNo 商户系统内部的订单号,当没提供transactionId时需要传这个。
*/
@Override
public WxPayOrderQueryResult queryOrder(String transactionId, String outTradeNo) throws WxPayException {
return this.wxService.queryOrder(transactionId, outTradeNo);
}
/**
* 调用统一下单接口,并组装生成支付所需参数对象.
*
* @param request 统一下单请求参数
* @param <T> 请使用{@link com.github.binarywang.wxpay.bean.order}包下的类
* @return 返回 {@link com.github.binarywang.wxpay.bean.order}包下的类对象
*/
@Override
public <T> T createOrder(WxPayUnifiedOrderRequest request) throws WxPayException {
return this.wxService.createOrder(request);
}
/**
* <pre>
* 微信支付-申请退款
* 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
* 接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
* </pre>
*
* @param request 请求对象
* @return 退款操作结果
*/
@Override
public WxPayRefundResult refund(WxPayRefundRequest request) throws WxPayException {
return this.wxService.refund(request);
}
/**
* <pre>
* 微信支付-查询退款
* 应用场景:
* 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,
* 银行卡支付的退款3个工作日后重新查询退款状态。
* 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
* 接口链接:https://api.mch.weixin.qq.com/pay/refundquery
* </pre>
* 以下四个参数四选一
*
* @param transactionId 微信订单号
* @param outTradeNo 商户订单号
* @param outRefundNo 商户退款单号
* @param refundId 微信退款单号
* @return 退款信息
*/
@Override
public WxPayRefundQueryResult refundQuery(String transactionId, String outTradeNo,String outRefundNo,String refundId) throws WxPayException {
return this.wxService.refundQuery(transactionId, outTradeNo, outRefundNo, refundId);
}
/**
* 支付回调通知处理
* @param xmlData
* @return
* @throws WxPayException
*/
@Override
public String parseOrderNotifyResult(String xmlData) throws WxPayException {
// 参数解析
final WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
// TODO 根据自己业务场景需要构造返回对象
return WxPayNotifyResponse.success("成功");
}
/**
* 退款回调通知处理
* @param xmlData
* @return
* @throws WxPayException
*/
@Override
public String parseRefundNotifyResult(String xmlData) throws WxPayException {
// 参数解析
final WxPayRefundNotifyResult result = this.wxService.parseRefundNotifyResult(xmlData);
// TODO 根据自己业务场景需要构造返回对象
return WxPayNotifyResponse.success("成功");
}
}
......@@ -7,6 +7,7 @@ import com.pz.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.pz.system.domain.bo.PaymentRecordBo;
......@@ -32,11 +33,13 @@ public class PaymentRecordServiceImpl implements IPaymentRecordService {
private final PaymentRecordMapper baseMapper;
private final SysUserMapper sysUserMapper;
/**
* 查询支付订单
*/
@Override
public PaymentRecordVo queryById(Integer id){
public PaymentRecordVo queryById(Integer id) {
return baseMapper.selectVoById(id);
}
......@@ -49,7 +52,12 @@ public class PaymentRecordServiceImpl implements IPaymentRecordService {
Page<PaymentRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
Optional.ofNullable(result.getRecords())
.ifPresent(paymentRecordVos -> {
paymentRecordVos.forEach(paymentRecordVo -> {
Optional.ofNullable(sysUserMapper.selectUserById(paymentRecordVo.getUid()))
.ifPresent(sysUser -> {
paymentRecordVo.setUserName(sysUser.getUserName());
});
});
});
return TableDataInfo.build(result);
}
......@@ -101,7 +109,7 @@ public class PaymentRecordServiceImpl implements IPaymentRecordService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(PaymentRecord entity){
private void validEntityBeforeSave(PaymentRecord entity) {
//TODO 做一些数据校验,如唯一约束
}
......@@ -110,7 +118,7 @@ public class PaymentRecordServiceImpl implements IPaymentRecordService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
......
package com.pz.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.pz.system.domain.bo.StoreGoodsCategoryBo;
import com.pz.system.domain.vo.StoreGoodsCategoryVo;
import com.pz.system.domain.StoreGoodsCategory;
import com.pz.system.mapper.StoreGoodsCategoryMapper;
import com.pz.system.service.IStoreGoodsCategoryService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 商品分类Service业务层处理
*
* @author ruoyi
* @date 2023-09-12
*/
@RequiredArgsConstructor
@Service
public class StoreGoodsCategoryServiceImpl implements IStoreGoodsCategoryService {
private final StoreGoodsCategoryMapper baseMapper;
/**
* 查询商品分类
*/
@Override
public StoreGoodsCategoryVo queryById(Integer id){
return baseMapper.selectVoById(id);
}
/**
* 查询商品分类列表
*/
@Override
public TableDataInfo<StoreGoodsCategoryVo> queryPageList(StoreGoodsCategoryBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<StoreGoodsCategory> lqw = buildQueryWrapper(bo);
Page<StoreGoodsCategoryVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询商品分类列表
*/
@Override
public List<StoreGoodsCategoryVo> queryList(StoreGoodsCategoryBo bo) {
LambdaQueryWrapper<StoreGoodsCategory> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<StoreGoodsCategory> buildQueryWrapper(StoreGoodsCategoryBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<StoreGoodsCategory> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getStoreId() != null, StoreGoodsCategory::getStoreId, bo.getStoreId());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), StoreGoodsCategory::getTitle, bo.getTitle());
return lqw;
}
/**
* 新增商品分类
*/
@Override
public Boolean insertByBo(StoreGoodsCategoryBo bo) {
StoreGoodsCategory add = BeanUtil.toBean(bo, StoreGoodsCategory.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改商品分类
*/
@Override
public Boolean updateByBo(StoreGoodsCategoryBo bo) {
StoreGoodsCategory update = BeanUtil.toBean(bo, StoreGoodsCategory.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(StoreGoodsCategory entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除商品分类
*/
@Override
public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}
package com.pz.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONArray;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.utils.JsonUtils;
import com.pz.system.domain.StoreApply;
import com.pz.system.domain.StoreGoodsTag;
import com.pz.system.domain.vo.StoreApplyVo;
import com.pz.system.mapper.StoreApplyMapper;
import com.pz.system.mapper.StoreGoodsCategoryMapper;
import com.pz.system.mapper.StoreGoodsTagMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.pz.system.domain.bo.StoreGoodsBo;
......@@ -21,6 +27,7 @@ import com.pz.system.service.IStoreGoodsService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Optional;
/**
* 商品Service业务层处理
......@@ -36,19 +43,29 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
private final StoreApplyMapper storeApplyMapper;
private final StoreGoodsTagMapper goodsTagMapper;
private final StoreGoodsCategoryMapper storeGoodsCategoryMapper;
/**
* 查询商品
*/
@Override
public StoreGoodsVo queryById(Integer id){
return baseMapper.selectVoById(id);
public StoreGoodsVo queryById(Integer id) {
StoreGoodsVo storeGoodsVo = baseMapper.selectVoById(id);
if (StringUtils.isNotBlank(storeGoodsVo.getTags())) {
List<Integer> ids = JsonUtils.parseArray(storeGoodsVo.getTags(), Integer.class);
//查询商品标签
storeGoodsVo.setList(goodsTagMapper.selectVoList(new LambdaQueryWrapper<StoreGoodsTag>().in(StoreGoodsTag::getId, ids)));
}
return storeGoodsVo;
}
/**
* 小程序查询商品
*/
@Override
public StoreGoodsVo queryAppById(Integer id){
public StoreGoodsVo queryAppById(Integer id) {
StoreGoodsVo storeGoodsVo = baseMapper.selectVoById(id);
StoreGoods storeGoods = new StoreGoods();
storeGoods.setId(id);
......@@ -56,6 +73,7 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
baseMapper.updateById(storeGoods);
return storeGoodsVo;
}
/**
* 查询商品列表
*/
......@@ -63,6 +81,21 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
public TableDataInfo<StoreGoodsVo> queryPageList(StoreGoodsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<StoreGoods> lqw = buildQueryWrapper(bo);
Page<StoreGoodsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
Optional.ofNullable(result.getRecords()).ifPresent(storeGoodsVos -> {
storeGoodsVos.forEach(storeGoodsVo -> {
if (StringUtils.isNotBlank(storeGoodsVo.getTags())) {
List<Integer> ids = JsonUtils.parseArray(storeGoodsVo.getTags(), Integer.class);
//查询商品标签
storeGoodsVo.setList(goodsTagMapper.selectVoList(new LambdaQueryWrapper<StoreGoodsTag>().in(StoreGoodsTag::getId, ids)));
}
if (null != storeGoodsVo.getCategoryId()) {
Optional.ofNullable(storeGoodsCategoryMapper.selectVoById(storeGoodsVo.getCategoryId()))
.ifPresent(storeGoodsCategoryVo -> {
storeGoodsVo.setTypeName(storeGoodsCategoryVo.getTitle());
});
}
});
});
return TableDataInfo.build(result);
}
......@@ -85,12 +118,12 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
//查询所有商户分类
List<StoreApplyVo> storeApplies = storeApplyMapper.selectVoList(
new LambdaQueryWrapper<StoreApply>().eq(StoreApply::getStatus,1)
new LambdaQueryWrapper<StoreApply>().eq(StoreApply::getStatus, 1)
);
//查询商户下面的商品
for (StoreApplyVo storeApply : storeApplies) {
storeApply.setStoreGoodsVo(baseMapper.selectVoList(new LambdaQueryWrapper<StoreGoods>()
.eq(StoreGoods::getStoreId,storeApply.getId())));
.eq(StoreGoods::getStoreId, storeApply.getId())));
}
return storeApplies;
}
......@@ -110,7 +143,6 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
lqw.eq(bo.getCityId() != null, StoreGoods::getCityId, bo.getCityId());
lqw.eq(bo.getStoreId() != null, StoreGoods::getStoreId, bo.getStoreId());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), StoreGoods::getTitle, bo.getTitle());
lqw.eq(StringUtils.isNotBlank(bo.getTags()), StoreGoods::getTags, bo.getTags());
lqw.eq(StringUtils.isNotBlank(bo.getPrice()), StoreGoods::getPrice, bo.getPrice());
lqw.eq(StringUtils.isNotBlank(bo.getSalePrice()), StoreGoods::getSalePrice, bo.getSalePrice());
lqw.eq(StringUtils.isNotBlank(bo.getSmallCover()), StoreGoods::getSmallCover, bo.getSmallCover());
......@@ -129,7 +161,10 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
@Override
public Boolean insertByBo(StoreGoodsBo bo) {
StoreGoods add = BeanUtil.toBean(bo, StoreGoods.class);
validEntityBeforeSave(add);
if (CollectionUtils.isNotEmpty(bo.getTagIds())) {
String tags = JsonUtils.toJsonString(bo.getTagIds());
add.setTags(tags);
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
......@@ -143,14 +178,17 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
@Override
public Boolean updateByBo(StoreGoodsBo bo) {
StoreGoods update = BeanUtil.toBean(bo, StoreGoods.class);
validEntityBeforeSave(update);
if (CollectionUtils.isNotEmpty(bo.getTagIds())) {
String tags = JsonUtils.toJsonString(bo.getTagIds());
update.setTags(tags);
}
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(StoreGoods entity){
private void validEntityBeforeSave(StoreGoods entity) {
//TODO 做一些数据校验,如唯一约束
}
......@@ -159,7 +197,7 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
......
package com.pz.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.pz.system.domain.bo.StoreGoodsTagBo;
import com.pz.system.domain.vo.StoreGoodsTagVo;
import com.pz.system.domain.StoreGoodsTag;
import com.pz.system.mapper.StoreGoodsTagMapper;
import com.pz.system.service.IStoreGoodsTagService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 商品标签Service业务层处理
*
* @author ruoyi
* @date 2023-09-12
*/
@RequiredArgsConstructor
@Service
public class StoreGoodsTagServiceImpl implements IStoreGoodsTagService {
private final StoreGoodsTagMapper baseMapper;
/**
* 查询商品标签
*/
@Override
public StoreGoodsTagVo queryById(Integer id){
return baseMapper.selectVoById(id);
}
/**
* 查询商品标签列表
*/
@Override
public TableDataInfo<StoreGoodsTagVo> queryPageList(StoreGoodsTagBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<StoreGoodsTag> lqw = buildQueryWrapper(bo);
Page<StoreGoodsTagVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询商品标签列表
*/
@Override
public List<StoreGoodsTagVo> queryList(StoreGoodsTagBo bo) {
LambdaQueryWrapper<StoreGoodsTag> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<StoreGoodsTag> buildQueryWrapper(StoreGoodsTagBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<StoreGoodsTag> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getStoreId() != null, StoreGoodsTag::getStoreId, bo.getStoreId());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), StoreGoodsTag::getTitle, bo.getTitle());
return lqw;
}
/**
* 新增商品标签
*/
@Override
public Boolean insertByBo(StoreGoodsTagBo bo) {
StoreGoodsTag add = BeanUtil.toBean(bo, StoreGoodsTag.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改商品标签
*/
@Override
public Boolean updateByBo(StoreGoodsTagBo bo) {
StoreGoodsTag update = BeanUtil.toBean(bo, StoreGoodsTag.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(StoreGoodsTag entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除商品标签
*/
@Override
public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}
......@@ -72,7 +72,7 @@ public class StoreInfoServiceImpl implements IStoreInfoService {
private LambdaQueryWrapper<StoreInfo> buildQueryWrapper(StoreInfoBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<StoreInfo> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getStoreId() != null, StoreInfo::getStoreId, bo.getStoreId());
lqw.eq(bo.getUid() != null, StoreInfo::getUid, bo.getUid());
lqw.like(StringUtils.isNotBlank(bo.getName()), StoreInfo::getName, bo.getName());
lqw.eq(bo.getCityId() != null, StoreInfo::getCityId, bo.getCityId());
lqw.eq(StringUtils.isNotBlank(bo.getTel()), StoreInfo::getTel, bo.getTel());
......
......@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.system.domain.vo.StoreAdminOrderVo;
import com.pz.system.mapper.CityMapper;
import com.pz.system.mapper.TotalOrderMapper;
import com.pz.system.mapper.UserAddressMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.pz.system.domain.bo.StoreOrderBo;
......@@ -39,6 +40,8 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
private final CityMapper cityMapper;
private final UserAddressMapper userAddressMapper;
/**
* 查询商城订单
*/
......@@ -53,6 +56,11 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
@Override
public TableDataInfo<StoreAdminOrderVo> queryPageList(StoreOrderBo bo, PageQuery pageQuery) {
Page<StoreAdminOrderVo> result = baseMapper.findStoreAdminOrderVoPage(pageQuery.build(), bo);
Optional.ofNullable(result.getRecords()).ifPresent(storeAdminOrderVos -> {
storeAdminOrderVos.forEach(storeAdminOrderVo -> {
storeAdminOrderVo.setUserAddressVo(userAddressMapper.selectVoById(storeAdminOrderVo.getAddressId()));
});
});
return TableDataInfo.build(result);
}
......
......@@ -26,5 +26,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="delFlag" column="del_flag"/>
</resultMap>
<select id="selectCompanyDataForApp" resultType="com.pz.merchant.domain.vo.CompanyAppVo">
select company.name,
company.phone,
company.address,
company.status,
company.business_license,
user.avatar
from company
left join sys_user as user on user.user_id = company.uid
where company.id = #{id}
</select>
<select id="selectFinanceStatistic" resultType="java.math.BigDecimal">
select ifnull(sum(ifnull(divide_price, 0)),0)
from employees_divide
where company_id = #{id} and to_days(current_date) = to_days(create_time);
</select>
<select id="selectAllOrder" resultType="com.pz.merchant.domain.vo.FinanceOrderInfoVo">
select total_order.id as orderId,
total_order.status as orderStatus,
services.name as project,
employees.name as emName,
services.cover,
services.price,
CONVERT((1 - services.fenmo / 100), decimal(10, 2)) *
CONVERT(services.price, decimal(10, 2)) as commission,
services.bid
from total_order
left join employees on employees.id = total_order.em_id
left join services on total_order.service_id = services.id
<where>
and total_order.business_id != 0
<if test="ew.emptyOfWhere == false">
and ${ew.sqlSegment}
</if>
</where>
</select>
</mapper>
......@@ -46,9 +46,9 @@
LEFT JOIN department AS d ON d.id = yyod.did
LEFT JOIN services AS s ON s.id = tlo.service_id
LEFT JOIN employees AS e ON e.id = tlo.em_id
<!-- <if test="bo.orderSn != null and bo.orderSn != ''">-->
<!-- where tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')-->
<!-- </if>-->
<if test="bo.orderSn != null and bo.orderSn != ''">
where tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')
</if>
</select>
<select id="selectSonOrderInfoByTotalId" resultType="com.pz.merchant.domain.vo.SonOrderVo">
......
......@@ -50,6 +50,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN city AS c ON c.id = tlo.city_id
LEFT JOIN services AS s ON s.id = tlo.service_id
LEFT JOIN employees AS e ON e.id = tlo.em_id
<if test="bo.orderSn != null and bo.orderSn != ''">
where tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')
</if>
</select>
<select id="selectSonOrderInfoByTotalId" resultType="com.pz.merchant.domain.vo.SonOrderVo">
......
<?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.pz.system.mapper.IncomeMapper">
<select id="selectCompanyIncome" resultType="com.pz.merchant.domain.vo.CompanyIncomeVo">
select partner_trade_no,
amount,
remark,
update_time
from income
<where>
user_type = 2
<if test="ew.emptyOfWhere == false">
and ${ew.sqlSegment}
</if>
</where>
</select>
</mapper>
......@@ -24,6 +24,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bo.storeName != null and bo.storeName != ''">
where sin.name LIKE CONCAT('%', #{bo.storeName}, '%')
</if>
<if test="bo.storeId != null">
where si.store_id = #{storeId}
</if>
</select>
......
<?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">
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pz.system.mapper.StoreOrderMapper">
<resultMap type="com.pz.system.domain.StoreOrder" id="StoreOrderResult">
......@@ -34,7 +34,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
su.user_name AS userName,
so.`status` AS orderStatus,
so.create_time AS createTime,
tao.status as toStatus
tao.status as toStatus,
so.address_id addressId,
so.logistics logistics,
so.logistics_code logisticsCode,
so.refund_logistics refundLogistics,
so.refund_logistics_code refundLogisticsCode
FROM
store_order AS so
LEFT JOIN total_order AS tao ON tao.id = so.order_id
......@@ -42,9 +47,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN store_info AS si ON si.id = so.store_id
LEFT JOIN store_goods AS sg ON sg.id = so.goods_id
LEFT JOIN sys_user AS su ON su.user_id = tao.uid
<where>
<if test="bo.title != null and bo.title != ''">
where sg.title LIKE CONCAT('%', #{bo.title}, '%')
and sg.title LIKE CONCAT('%', #{bo.title}, '%')
</if>
<if test="bo.storeId != null">
and so.store_id = #{bo.storeId}
</if>
</where>
</select>
......
......@@ -47,9 +47,9 @@
LEFT JOIN department AS d ON d.id = yyod.did
LEFT JOIN doctor AS s ON s.id = yyod.doctor_id
LEFT JOIN sys_user as su on su.user_id = tlo.uid
<!-- <if test="bo.orderSn != null and bo.orderSn != ''">-->
<!-- where tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')-->
<!-- </if>-->
<if test="bo.orderSn != null and bo.orderSn != ''">
where tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')
</if>
</select>
......
......@@ -52,9 +52,9 @@
LEFT JOIN department AS d ON d.id = yyod.did
LEFT JOIN services AS s ON s.id = tlo.service_id
LEFT JOIN employees AS e ON e.id = tlo.em_id
<!-- <if test="bo.orderSn != null and bo.orderSn != ''">-->
<!-- where tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')-->
<!-- </if>-->
<if test="bo.orderSn != null and bo.orderSn != ''">
where tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')
</if>
</select>
<select id="selectSonOrderInfoByTotalId" resultType="com.pz.merchant.domain.vo.SonOrderVo">
......
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