Merge remote-tracking branch 'origin/master'

This commit is contained in:
zjf committed 2025-10-20 17:03:05 +08:00
commit 2b7bc8deab
14 files changed
+619 -2

No files matched your search

+39 -1
View File
@@ -642,4 +642,42 @@ CREATE TABLE mch_checkout
del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记',
tenant_id bigint DEFAULT NULL COMMENT '租户ID',
PRIMARY KEY (id)
) ENGINE = InnoDB COMMENT ='商户结账表';
) ENGINE = InnoDB COMMENT ='商户结账表';
-- ----------------------------
-- Table structure for mch_pick_up
-- ----------------------------
DROP TABLE IF EXISTS mch_pick_up;
CREATE TABLE mch_pick_up
(
id bigint NOT NULL AUTO_INCREMENT COMMENT '创建者',
name varchar(128) NOT NULL COMMENT '自提点名',
logo varchar(256) DEFAULT NULL COMMENT '门店logo',
introduction varchar(256) DEFAULT NULL COMMENT '门店简介',
phone varchar(16) DEFAULT NULL COMMENT '门店手机',
status varchar(32) DEFAULT NULL COMMENT '门店状态',
latitude double DEFAULT NULL COMMENT '纬度',
longitude double DEFAULT NULL COMMENT '经度',
detail_address varchar(256) DEFAULT NULL COMMENT '门店详细地址',
business_hours_json varchar(1024) DEFAULT NULL COMMENT '营业时间',
create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
create_time datetime DEFAULT NULL COMMENT '创建时间',
update_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人',
update_time datetime DEFAULT NULL COMMENT '修改时间',
del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记',
tenant_id bigint DEFAULT NULL COMMENT '租户ID',
PRIMARY KEY (id)
) ENGINE = InnoDB COMMENT ='商户自提点表';
-- ----------------------------
-- Table structure for mch_pick_up_join
-- ----------------------------
DROP TABLE IF EXISTS mch_pick_up_join;
CREATE TABLE mch_pick_up_join
(
id bigint NOT NULL AUTO_INCREMENT COMMENT '创建者',
mch_id bigint NOT NULL COMMENT '商户id',
mch_pick_up_id bigint NOT NULL COMMENT '自提点id',
PRIMARY KEY (id)
) ENGINE = InnoDB COMMENT ='商户自提点关联表';
@@ -62,7 +62,9 @@ public class PanelShopServiceImpl implements PanelShopService {
List<PanelPorductVo> list = hardOrderMapper.groupByMch(dto);
for (PanelPorductVo.ProductTypeItemVo v : result) {
List<PanelPorductVo> targetMchTotalList = list.stream().filter(item -> ObjectUtil.equals(v.getType(), String.valueOf(item.getMchId()))).toList();
if (ObjectUtil.isEmpty(targetMchTotalList)) continue;
if (ObjectUtil.isEmpty(targetMchTotalList)) {
targetMchTotalList = new ArrayList<>();
}
// 处理时间
List<PanelPorductVo> resultList = BeanUtil.copyToList(dateList, PanelPorductVo.class);
for (PanelPorductVo i : resultList) {
@@ -0,0 +1,26 @@
package com.bsd.pjcloud.wallet.api.constant.mch;
import cn.hutool.core.util.ObjectUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 自提点合作状态
*/
@Getter
@AllArgsConstructor
public enum WalletMchPickUpStatusEnum {
COOPERATION_ERROR("10", "未合作"),
COOPERATION_SUCCESS("20", "正在合作"),
;
private final String code;
private final String desc;
public static WalletMchPickUpStatusEnum valueOfByCode(String code) {
if (ObjectUtil.isEmpty(code)) return null;
return Arrays.stream(values()).filter(v -> ObjectUtil.equals(code, v.getCode())).findFirst().get();
}
}
@@ -0,0 +1,21 @@
package com.bsd.pjcloud.wallet.api.dto.mch;
import com.bsd.pjcloud.wallet.api.entity.mch.MchPickUpEntity;
import lombok.Data;
import java.util.List;
@Data
public class MchPickUpDto extends MchPickUpEntity {
/**
* 商户ID列表
*/
private List<Long> mchIds;
/**
* ids
*/
private List<Long> ids;
}
@@ -0,0 +1,146 @@
package com.bsd.pjcloud.wallet.api.entity.mch;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import com.bsd.pjcloud.common.core.util.TenantTable;
import java.time.LocalDateTime;
import java.util.List;
/**
* 商户自提点
*/
@Data
@TenantTable
@TableName("mch_pick_up")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "商户自提点")
public class MchPickUpEntity extends Model<MchPickUpEntity> {
/**
* 创建者
*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "创建者")
private Long id;
/**
* 自提点名
*/
@Schema(description = "自提点名")
private String name;
/**
* 门店logo
*/
@Schema(description = "门店logo")
private String logo;
/**
* 门店简介
*/
@Schema(description = "门店简介")
private String introduction;
/**
* 门店手机
*/
@Schema(description = "门店手机")
private String phone;
/**
* 门店状态
*/
@Schema(description = "门店状态")
private String status;
/**
* 纬度
*/
@Schema(description = "纬度")
private Double latitude;
/**
* 经度
*/
@Schema(description = "经度")
private Double longitude;
/**
* 门店详细地址
*/
@Schema(description = "门店详细地址")
private String detailAddress;
/**
* 营业时间
*/
@Schema(description = "营业时间")
private String businessHoursJson;
/**
* 排序
*/
@Schema(description = "排序")
private Long sort;
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建人")
private String createBy;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建时间")
private LocalDateTime createTime;
/**
* 修改人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改人")
private String updateBy;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改时间")
private LocalDateTime updateTime;
/**
* 删除标记
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
@Schema(description = "删除标记")
private String delFlag;
/**
* 租户ID
*/
@Schema(description = "租户ID")
private Long tenantId;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class BusinessHours {
private String title;
private String startTime;
private String endTime;
}
}
@@ -0,0 +1,37 @@
package com.bsd.pjcloud.wallet.api.entity.mch;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 商户自提点关联表
*/
@Data
@TableName("mch_pick_up_join")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "商户自提点关联表")
public class MchPickUpJoinEntity extends Model<MchPickUpJoinEntity> {
/**
* 创建者
*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "创建者")
private Long id;
/**
* 商户id
*/
@Schema(description = "商户id")
private Long mchId;
/**
* 自提点id
*/
@Schema(description = "自提点id")
private Long mchPickUpId;
}
@@ -0,0 +1,16 @@
package com.bsd.pjcloud.wallet.api.vo.mch;
import com.bsd.pjcloud.wallet.api.entity.mch.MchPickUpEntity;
import lombok.Data;
import java.util.List;
@Data
public class MchPickUpVo extends MchPickUpEntity {
/**
* 商户ID列表
*/
private List<Long> mchIds;
}
@@ -0,0 +1,102 @@
package com.bsd.pjcloud.wallet.controller.mch;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.wallet.api.constant.mch.WalletMchPickUpStatusEnum;
import com.bsd.pjcloud.wallet.api.dto.mch.MchPickUpDto;
import com.bsd.pjcloud.wallet.api.entity.mch.MchPickUpEntity;
import com.bsd.pjcloud.wallet.service.MchPickUpService;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 商户自提点
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/mch-pick-up")
@Tag(description = "mch-pick-up", name = "商户自提点管理")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class MchPickUpController {
private final MchPickUpService mchPickUpService;
/* ************************************* start app start ************************************* */
@Operation(summary = "分页查询", description = "分页查询")
@GetMapping("app/page")
public R appPage(@ParameterObject Page page, @ParameterObject MchPickUpDto dto) {
dto.setStatus(WalletMchPickUpStatusEnum.COOPERATION_SUCCESS.getCode());
return R.ok(mchPickUpService.scopPageJoin(page, dto, null));
}
@Operation(summary = "查询详情", description = "查询详情")
@GetMapping("app/detail")
public R appDetail(@RequestParam("id") Long id) {
return R.ok(mchPickUpService.join(id));
}
/* ************************************* end app end ************************************* */
@Operation(summary = "分页查询", description = "分页查询")
@GetMapping("/page")
@PreAuthorize("@pms.hasPermission('mch_mchPickUp_view')")
public R getMchPickUpPage(@ParameterObject Page page, @ParameterObject MchPickUpDto dto) {
return R.ok(mchPickUpService.scopPageJoin(page, dto, DataScope.of()));
}
@Operation(summary = "通过id查询", description = "通过id查询")
@GetMapping("/{id}")
@PreAuthorize("@pms.hasPermission('mch_mchPickUp_view')")
public R getById(@PathVariable("id") Long id) {
return R.ok(mchPickUpService.join(id));
}
@Operation(summary = "新增商户自提点", description = "新增商户自提点")
@SysLog("新增商户自提点")
@PostMapping
@PreAuthorize("@pms.hasPermission('mch_mchPickUp_add')")
public R save(@RequestBody MchPickUpDto dto) {
return R.ok(mchPickUpService.create(dto));
}
@Operation(summary = "修改商户自提点", description = "修改商户自提点")
@SysLog("修改商户自提点")
@PutMapping
@PreAuthorize("@pms.hasPermission('mch_mchPickUp_edit')")
public R updateById(@RequestBody MchPickUpDto dto) {
return R.ok(mchPickUpService.edit(dto));
}
@Operation(summary = "通过id删除商户自提点", description = "通过id删除商户自提点")
@SysLog("通过id删除商户自提点")
@DeleteMapping
@PreAuthorize("@pms.hasPermission('mch_mchPickUp_del')")
public R removeById(@RequestBody Long[] ids) {
return R.ok(mchPickUpService.removeBatchByIds(CollUtil.toList(ids)));
}
@ResponseExcel
@GetMapping("/export")
@PreAuthorize("@pms.hasPermission('mch_mchPickUp_export')")
public List<MchPickUpEntity> export(MchPickUpEntity mchPickUp, Long[] ids) {
return mchPickUpService.list(Wrappers.lambdaQuery(mchPickUp).in(ArrayUtil.isNotEmpty(ids), MchPickUpEntity::getId, ids));
}
}
@@ -0,0 +1,10 @@
package com.bsd.pjcloud.wallet.mapper.mch;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.wallet.api.entity.mch.MchPickUpJoinEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MchPickUpJoinMapper extends PjcloudBaseMapper<MchPickUpJoinEntity> {
}
@@ -0,0 +1,17 @@
package com.bsd.pjcloud.wallet.mapper.mch;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.wallet.api.dto.mch.MchPickUpDto;
import com.bsd.pjcloud.wallet.api.entity.mch.MchPickUpEntity;
import com.bsd.pjcloud.wallet.api.vo.mch.MchPickUpVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface MchPickUpMapper extends PjcloudBaseMapper<MchPickUpEntity> {
Page<MchPickUpVo> scopPageJoin(Page page, @Param("dto") MchPickUpDto dto, @Param("dataScope") DataScope dataScope);
}
@@ -0,0 +1,29 @@
package com.bsd.pjcloud.wallet.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.wallet.api.dto.mch.MchPickUpDto;
import com.bsd.pjcloud.wallet.api.entity.mch.MchPickUpEntity;
import com.bsd.pjcloud.wallet.api.vo.mch.MchPickUpVo;
public interface MchPickUpService extends IService<MchPickUpEntity> {
Page<MchPickUpVo> scopPageJoin(Page page, MchPickUpDto dto, DataScope dataScope);
/**
* 通过id查询
*/
MchPickUpVo join(Long id);
/**
* 新增商户自提点
*/
Long create(MchPickUpDto dto);
/**
* 修改商户自提点
*/
Long edit(MchPickUpDto dto);
}
@@ -0,0 +1,114 @@
package com.bsd.pjcloud.wallet.service.impl.mch;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.wallet.api.constant.mch.WalletMchPickUpStatusEnum;
import com.bsd.pjcloud.wallet.api.dto.mch.MchPickUpDto;
import com.bsd.pjcloud.wallet.api.entity.mch.MchPickUpEntity;
import com.bsd.pjcloud.wallet.api.entity.mch.MchPickUpJoinEntity;
import com.bsd.pjcloud.wallet.api.vo.mch.MchPickUpVo;
import com.bsd.pjcloud.wallet.mapper.mch.MchPickUpJoinMapper;
import com.bsd.pjcloud.wallet.mapper.mch.MchPickUpMapper;
import com.bsd.pjcloud.wallet.service.MchPickUpService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* 商户自提点
*/
@Service
@RequiredArgsConstructor
public class MchPickUpServiceImpl extends ServiceImpl<MchPickUpMapper, MchPickUpEntity> implements MchPickUpService {
private final MchPickUpJoinMapper pickUpJoinMapper;
@Override
public Page<MchPickUpVo> scopPageJoin(Page page, MchPickUpDto dto, DataScope dataScope) {
// 按照商户ids查询
if (ObjectUtil.isNotEmpty(dto.getMchIds())) {
List<MchPickUpJoinEntity> joinList = pickUpJoinMapper.selectList(new LambdaQueryWrapper<MchPickUpJoinEntity>()
.in(MchPickUpJoinEntity::getMchId, dto.getMchIds())
);
if (ObjectUtil.isEmpty(joinList)) return new Page<>();
List<Long> machPickUpIds = joinList.stream().map(MchPickUpJoinEntity::getMchPickUpId).toList();
dto.setIds(machPickUpIds);
}
return baseMapper.scopPageJoin(page, dto, dataScope);
}
@Override
public MchPickUpVo join(Long id) {
MchPickUpEntity detail = baseMapper.selectById(id);
if (ObjectUtil.isEmpty(detail)) return null;
MchPickUpVo result = BeanUtil.toBean(detail, MchPickUpVo.class);
// 查询合作商户
List<MchPickUpJoinEntity> joinList = pickUpJoinMapper.selectList(new LambdaQueryWrapper<MchPickUpJoinEntity>()
.eq(MchPickUpJoinEntity::getMchPickUpId, detail.getId())
);
if (ObjectUtil.isNotEmpty(joinList)) {
result.setMchIds(joinList.stream().map(MchPickUpJoinEntity::getMchId).toList());
}
return result;
}
/**
* 新增商户自提点
*/
@Override
public Long create(MchPickUpDto dto) {
MchPickUpEntity saveObj = BeanUtil.toBean(dto, MchPickUpEntity.class);
if (ObjectUtil.isEmpty(saveObj.getStatus())) {
saveObj.setStatus(WalletMchPickUpStatusEnum.COOPERATION_ERROR.getCode());
}
if (ObjectUtil.isEmpty(saveObj.getSort())) {
saveObj.setSort(0L);
}
baseMapper.insert(saveObj);
getSelf().generatePickUpJoin(dto.getId(), dto.getMchIds());
return saveObj.getId();
}
/**
* 修改商户自提点
*/
@Override
public Long edit(MchPickUpDto dto) {
MchPickUpEntity updateObj = BeanUtil.toBean(dto, MchPickUpEntity.class);
baseMapper.updateById(updateObj);
getSelf().generatePickUpJoin(dto.getId(), dto.getMchIds());
return updateObj.getId();
}
/**
* 生成商户自提点关联关系
*/
@Transactional(rollbackFor = Exception.class)
public void generatePickUpJoin(Long pickUpId, List<Long> mchIds) {
if (ObjectUtil.isEmpty(pickUpId) || ObjectUtil.isEmpty(mchIds)) return;
// 删除关系
pickUpJoinMapper.delete(new LambdaQueryWrapper<MchPickUpJoinEntity>().eq(MchPickUpJoinEntity::getMchPickUpId, pickUpId));
// 生成关系
List<MchPickUpJoinEntity> insertObj = new ArrayList<>();
for (Long mchId : mchIds) {
MchPickUpJoinEntity joinObj = new MchPickUpJoinEntity();
joinObj.setMchId(mchId);
joinObj.setMchPickUpId(pickUpId);
insertObj.add(joinObj);
}
pickUpJoinMapper.insert(insertObj);
}
private MchPickUpServiceImpl getSelf() {
return SpringUtil.getBean(getClass());
}
}
@@ -0,0 +1,7 @@
<?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.bsd.pjcloud.wallet.mapper.mch.MchPickUpJoinMapper">
</mapper>
@@ -0,0 +1,52 @@
<?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.bsd.pjcloud.wallet.mapper.mch.MchPickUpMapper">
<sql id="selectA">
select a.id,
a.name,
a.logo,
a.introduction,
a.phone,
a.status,
a.latitude,
a.longitude,
a.detail_address,
a.business_hours_json,
a.sort,
a.create_by,
a.create_time,
a.update_by,
a.update_time,
a.del_flag,
a.tenant_id
</sql>
<sql id="whereA">
a.del_flag = 0
<if test="dto.name != null and dto.name != '' ">
and a.name LIKE CONCAT('%', #{dto.name}, '%')
</if>
<if test="dto.phone != null and dto.phone != '' ">
and a.phone LIKE CONCAT('%', #{dto.phone}, '%')
</if>
<if test="dto.status != null and dto.status != '' ">
and a.status = #{dto.status}
</if>
<if test="dto.ids != null and dto.ids.size() != 0">
and a.id in
<foreach collection="dto.ids" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
</sql>
<select id="scopPageJoin" resultType="com.bsd.pjcloud.wallet.api.vo.mch.MchPickUpVo">
<include refid="selectA"/>
from mch_pick_up a
<where>
<include refid="whereA"/>
</where>
order by a.sort, a.create_time
</select>
</mapper>