Merge #71 into master from cc_20260318_wishlist

feat:订单待确认 审批流去掉

* cc_20260318_wishlist: (22 commits squashed)

  - feat:心愿单接口

  - feat:心愿单接口

  - feat:心愿单接口

  - feat:心愿单接口 查询当前门店铺位绑定的心愿单

  - feat:心愿单接口 状态

  - feat:心愿单接口 状态

  - feat:心愿单接口 状态

  - feat:心愿单接口 状态

  - Merge branch 'master' into cc_20260318_wishlist

  - feat:代码merge 错误处理

  - feat:新增storeType

  - feat:查询逻辑调整

  - feat:新增use_ai 赛选

  - feat:新增use_ai 赛选

  - feat:新增use_ai 赛选

  - feat:心愿单状态筛选

  - feat:查询当前门店铺位绑定的心愿单 mini

  - feat:bug修复

  - feat:类型调整

  - feat:名称

  - feat:订单待确认 审批流去掉

  - feat:订单待确认 审批流去掉

Signed-off-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/71
This commit is contained in:
正新
2026-03-23 11:51:20 +00:00
parent d50a31d044
commit a13ba2175c
38 changed files with 908 additions and 242 deletions

View File

@@ -360,6 +360,7 @@ public enum ErrorCodeEnum {
PAY_FAIL(1610107, "支付失败", null),
DUPLICATE_PAYMENTS(1610108, "订单支付中,请勿重复支付!", null),
CURRENT_ORDER_NOT_SUPPORT(1610109, "当前订单状态不支持审批!", null),
CURRENT_POINT_BIND_OTHER_WISHLIST(1610110, "当前铺位绑定了其他心愿单!", null),

View File

@@ -75,6 +75,7 @@ public enum UserRoleEnum {
INVESTMENT_MANGER(1765266125369L, "招商经理"),
OPERATION_GENERAL_CONSULTANT(1764642515446L,"运营片区总顾问"),
ORDER_GROUP(1766387359609L,"订单组"),
AI_STORE_TYPE_APPROVE(1774252055402L,"AI店型订单审核"),
;
private Long code;

View File

@@ -0,0 +1,45 @@
package com.cool.store.enums.order;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Auther zx_szh
* @Date 2026/3/18 14:24
* @Version 1.0
*/
public enum WishlistStatusEnum {
AGREE(0, "待完善加盟资质"),
COMPLETE_POINT(5, "待绑定铺位"),
LI_GUI_APPROVE(10, "待立规审核"),
PASS(20, "通过"),
REJECT(15, "拒绝"),
;
private final Integer code;
private final String desc;
WishlistStatusEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public Integer getCode() {
return code;
}
public String getDesc() {
return desc;
}
private static final Map<Integer, WishlistStatusEnum> MAP = Arrays.stream(values())
.collect(Collectors.toMap(WishlistStatusEnum::getCode, Function.identity(), (a, b) -> a));
public static WishlistStatusEnum of(Integer code) {
return MAP.get(code);
}
}

View File

@@ -169,7 +169,7 @@ public enum ShopSubStageStatusEnum {
SHOP_SUB_STAGE_STATUS_280(ShopSubStageEnum.SHOP_STAGE_28, 2800, "待选购", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_281(ShopSubStageEnum.SHOP_STAGE_28, 2810, "待立规审批", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_281_5(ShopSubStageEnum.SHOP_STAGE_28, 2815, "招商经理审批", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_281_5(ShopSubStageEnum.SHOP_STAGE_28, 2815, "加盟商确认", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_282(ShopSubStageEnum.SHOP_STAGE_28, 2820, "待财务确认", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_283(ShopSubStageEnum.SHOP_STAGE_28, 2830, "审批拒绝", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_284(ShopSubStageEnum.SHOP_STAGE_28, 2840, "待缴费", Boolean.FALSE),

View File

@@ -6,6 +6,7 @@ import com.cool.store.mapper.order.StoreWishlistMapper;
import com.cool.store.vo.order.MiniStoreWishlistListVO;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.entity.Example;
@@ -25,6 +26,20 @@ public class StoreWishlistDAO {
return mapper.insertBatch(list) > 0;
}
public boolean insert(StoreWishlistDO item) {
if (item == null) {
return false;
}
return mapper.insertSelective(item) > 0;
}
public int updateByExampleSelective(StoreWishlistDO item) {
if (item == null) {
return 0;
}
return mapper.updateByPrimaryKeySelective(item);
}
public boolean softDeleteByLineIdAndStoreTypeAndVersion(Long lineId, Long storeTypeId, String versionNo) {
if (lineId == null || storeTypeId == null || versionNo == null) {
return false;
@@ -39,6 +54,27 @@ public class StoreWishlistDAO {
return mapper.getById(id);
}
public StoreWishlistDO getByPointId(Long lineId,Long pointId) {
if (lineId == null||pointId==null) {
return null;
}
return mapper.getByPointId(lineId,pointId);
}
public Boolean updateByLineId(Long id) {
if (id == null) {
return null;
}
return mapper.updateByLineId(id);
}
public Integer getPointBindWishlistCount( Long pointId, Integer wishlistStatus) {
if (pointId == null||wishlistStatus==null) {
return 0;
}
return mapper.getPointBindWishlistCount(pointId,wishlistStatus);
}
public List<StoreWishlistDO> listByLineIdAndStoreTypeAndVersion(Long lineId, Long storeTypeId, String versionNo) {
if (lineId == null || storeTypeId == null || versionNo == null) {
return Collections.emptyList();
@@ -53,14 +89,8 @@ public class StoreWishlistDAO {
return mapper.listByLineId(lineId, storeTypeId);
}
public List<MiniStoreWishlistListVO> listByVersionList(List<String> versionNoList) {
if (CollectionUtils.isEmpty(versionNoList)) {
return Collections.emptyList();
}
return mapper.listByVersionList(versionNoList);
public List<MiniStoreWishlistListVO> listByVersionList(String keyword,Long storeTypeId,Integer wishlistStatus) {
return mapper.listByVersionList(keyword,storeTypeId,wishlistStatus);
}
public List<String> getDistinctVersion(String keyword,Long storeTypeId){
return mapper.versionNoList(keyword,storeTypeId);
}
}

View File

@@ -0,0 +1,38 @@
package com.cool.store.dao.order;
import com.cool.store.entity.order.StoreWishlistOptionDO;
import com.cool.store.mapper.order.StoreWishlistOptionMapper;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Repository;
import java.util.Collections;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class StoreWishlistOptionDAO {
private final StoreWishlistOptionMapper mapper;
public boolean insertBatch(List<StoreWishlistOptionDO> list) {
if (CollectionUtils.isEmpty(list)) {
return false;
}
return mapper.insertBatch(list) > 0;
}
public boolean softDeleteByWishlistIds(List<Long> wishlistIds) {
if (CollectionUtils.isEmpty(wishlistIds)) {
return false;
}
return mapper.softDeleteByWishlistIds(wishlistIds) > 0;
}
public List<StoreWishlistOptionDO> listByWishlistIds(List<Long> wishlistIds) {
if (CollectionUtils.isEmpty(wishlistIds)) {
return Collections.emptyList();
}
return mapper.listByWishlistIds(wishlistIds);
}
}

View File

@@ -17,6 +17,11 @@ public interface StoreWishlistMapper extends Mapper<StoreWishlistDO> {
StoreWishlistDO getById(@Param("id") Long id);
StoreWishlistDO getByPointId(@Param("lineId") Long lineId, @Param("pointId") Long pointId);
Integer getPointBindWishlistCount(@Param("pointId") Long pointId, @Param("wishlistStatus") Integer wishlistStatus);
List<StoreWishlistDO> listByLineIdAndStoreTypeAndVersion(@Param("lineId") Long lineId,
@Param("storeTypeId") Long storeTypeId,
@Param("versionNo") String versionNo);
@@ -25,7 +30,16 @@ public interface StoreWishlistMapper extends Mapper<StoreWishlistDO> {
@Param("storeTypeId") Long storeTypeId);
List<MiniStoreWishlistListVO> listByVersionList(@Param("versionNoList") List<String> versionNoList);
List<MiniStoreWishlistListVO> listByVersionList(@Param("keyword") String keyword,
@Param("storeTypeId") Long storeTypeId,
@Param("wishlistStatus") Integer wishlistStatus);
/**
* 更新心愿单状态 将当前加盟商所有的在待完善加盟资质的心愿单状态改为绑定铺位
* @param lineId
* @return
*/
Boolean updateByLineId(Long lineId) ;
List<String> versionNoList(@Param("keyword") String keyword, @Param("storeTypeId") Long storeTypeId);
}

View File

@@ -0,0 +1,16 @@
package com.cool.store.mapper.order;
import com.cool.store.entity.order.StoreWishlistOptionDO;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface StoreWishlistOptionMapper extends Mapper<StoreWishlistOptionDO> {
int insertBatch(@Param("list") List<StoreWishlistOptionDO> list);
int softDeleteByWishlistIds(@Param("wishlistIds") List<Long> wishlistIds);
List<StoreWishlistOptionDO> listByWishlistIds(@Param("wishlistIds") List<Long> wishlistIds);
}

View File

@@ -35,6 +35,12 @@
<result column="district_code" jdbcType="VARCHAR" property="districtCode"/>
<result column="point_location" jdbcType="VARCHAR" property="pointLocation"/>
<result column="protection_distance" jdbcType="VARCHAR" property="protectionDistance"/>
<result column="location_desc_code" jdbcType="TINYINT" property="locationDescCode"/>
<result column="use_ai" jdbcType="TINYINT" property="useAi"/>
<result column="door_inner_depth" jdbcType="DECIMAL" property="doorInnerDepth"/>
<result column="door_inner_width" jdbcType="DECIMAL" property="doorInnerWidth"/>
<result column="door_inner_height" jdbcType="DECIMAL" property="doorInnerHeight"/>
<result column="other_desc" jdbcType="VARCHAR" property="otherDesc"/>
</resultMap>
<sql id="allColumn">
@@ -43,7 +49,8 @@
development_time, point_status, point_score, select_status, submit_audit_count, point_source, deleted,
create_time, update_time,
province, city, district, township, opportunity_point_code, opportunity_point_name,
province_code, city_code, district_code, point_location,protection_distance
province_code, city_code, district_code, point_location,protection_distance,
location_desc_code, use_ai, door_inner_depth, door_inner_width, door_inner_height, other_desc
</sql>
<select id="getMyPointData" resultType="com.cool.store.vo.point.PointHomePageDataVO">
@@ -209,7 +216,7 @@
select
<include refid="allColumn"/>
from xfsg_point_info
where deleted = 0 and point_status in (4,5) and development_manager = #{request.developmentManager} and
where deleted = 0 and point_status = 5 and development_manager = #{request.developmentManager} and
select_status = 0
<if test="request.pointStatusList != null and request.pointStatusList.size() > 0">
and point_status in
@@ -220,6 +227,9 @@
<if test="request.pointName!=null and request.pointName!=''">
and point_name like concat('%',#{request.pointName},'%')
</if>
<if test="request.useAi!=null">
and use_ai = #{request.useAi}
</if>
</select>
<update id="updateSelectedDevelopmentManager">
@@ -555,7 +565,13 @@
province_code = #{request.provinceCode},
city_code = #{request.cityCode},
district_code = #{request.districtCode},
point_location = #{request.pointLocation}
point_location = #{request.pointLocation},
location_desc_code = #{request.locationDescCode},
use_ai = #{request.useAi},
door_inner_depth = #{request.doorInnerDepth},
door_inner_width = #{request.doorInnerWidth},
door_inner_height = #{request.doorInnerHeight},
other_desc = #{request.otherDesc}
where id = #{request.id}
</update>
<update id="updateAddress">

View File

@@ -4,10 +4,10 @@
<insert id="insertBatch">
INSERT INTO zxjp_store_wishlist
(line_id, store_type_id, option_id, quantity, total_amount, version_no, deleted, create_time, update_time)
(line_id, store_type_id, total_amount, version_no, wishlist_status, point_id, deleted, create_time, update_time)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.lineId}, #{item.storeTypeId}, #{item.optionId}, #{item.quantity}, #{item.totalAmount}, #{item.versionNo}, 0, NOW(), NOW())
(#{item.lineId}, #{item.storeTypeId}, #{item.totalAmount}, #{item.versionNo}, #{item.wishlistStatus}, #{item.pointId}, 0, NOW(), NOW())
</foreach>
</insert>
@@ -22,15 +22,41 @@
</update>
<select id="getById" resultType="com.cool.store.entity.order.StoreWishlistDO">
SELECT id, line_id, store_type_id, option_id, quantity, total_amount, version_no, deleted, create_time, update_time
SELECT id, line_id, store_type_id, total_amount, version_no, wishlist_status, point_id, deleted, create_time, update_time
FROM zxjp_store_wishlist
WHERE id = #{id}
AND deleted = 0
LIMIT 1
</select>
<select id="getByPointId" resultType="com.cool.store.entity.order.StoreWishlistDO">
SELECT id, line_id, store_type_id, total_amount, version_no, wishlist_status, point_id, deleted, create_time, update_time
FROM zxjp_store_wishlist
where deleted = 0
and wishlist_status !=15
<if test="lineId!=null">
and line_id = #{lineId}
</if>
<if test="pointId!=null">
and point_id = #{pointId}
</if>
limit 1
</select>
<select id="getPointBindWishlistCount" resultType="java.lang.Integer">
select count(1) from zxjp_store_wishlist
where deleted = 0
<if test="pointId != null">
AND point_id = #{pointId}
</if>
<if test="wishlistStatus != null">
AND wishlist_status != #{wishlistStatus}
</if>
</select>
<select id="listByLineIdAndStoreTypeAndVersion" resultType="com.cool.store.entity.order.StoreWishlistDO">
SELECT id, line_id, store_type_id, option_id, quantity, total_amount, version_no, deleted, create_time, update_time
SELECT id, line_id, store_type_id, total_amount, version_no, wishlist_status, point_id, deleted, create_time, update_time
FROM zxjp_store_wishlist
WHERE line_id = #{lineId}
AND store_type_id = #{storeTypeId}
@@ -41,14 +67,17 @@
<select id="listByLineId" resultType="com.cool.store.vo.order.MiniStoreWishlistListVO">
SELECT
w.id as wishlistId,
w.store_type_id AS storeTypeId,
st.brand AS brand,
st.store_type_name AS storeTypeName,
st.store_type AS storeType,
st.image_url AS imageUrl,
MIN(w.create_time) AS createTime,
MAX(w.total_amount) AS totalAmount,
w.version_no AS versionNo
w.create_time AS createTime,
w.total_amount AS totalAmount,
w.version_no AS versionNo,
w.point_id as pointId,
w.wishlist_status as wishlistStatus
FROM zxjp_store_wishlist w
LEFT JOIN zxjp_store_type st ON st.id = w.store_type_id
WHERE w.line_id = #{lineId}
@@ -56,48 +85,50 @@
<if test="storeTypeId != null">
AND w.store_type_id = #{storeTypeId}
</if>
GROUP BY w.version_no
ORDER BY w.create_time DESC
</select>
<select id="listByVersionList" resultType="com.cool.store.vo.order.MiniStoreWishlistListVO">
SELECT
w.id as wishlistId,
w.store_type_id AS storeTypeId,
w.line_id as lineId,
st.brand AS brand,
st.store_type_name AS storeTypeName,
st.store_type AS storeType,
st.image_url AS imageUrl,
MIN(w.create_time) AS createTime,
MAX(w.total_amount) AS totalAmount,
w.version_no AS versionNo
w.create_time AS createTime,
w.total_amount AS totalAmount,
w.version_no AS versionNo,
w.point_id as pointId,
w.wishlist_status as wishlistStatus
FROM zxjp_store_wishlist w
LEFT JOIN zxjp_store_type st ON st.id = w.store_type_id
WHERE w.deleted = 0
<if test="versionNoList != null and versionNoList.size>0">
and
<foreach collection="versionNoList" item="versionNo" separator="," open="w.version_no in (" close=")">
#{versionNo}
</foreach>
</if>
GROUP BY w.version_no
ORDER BY w.create_time DESC
</select>
<select id="versionNoList" resultType="java.lang.String">
SELECT DISTINCT version_no
FROM zxjp_store_wishlist a
<if test="keyword!=null and keyword !=''">
left join xfsg_line_info b on a.line_id = b.id
left join xfsg_line_info b on w.line_id = b.id
</if>
WHERE a.deleted = 0
<if test="storeTypeId!=null">
and a.store_type_id = #{storeTypeId}
WHERE w.deleted = 0
<if test="storeTypeId != null">
AND w.store_type_id = #{storeTypeId}
</if>
<if test="wishlistStatus != null">
AND w.wishlist_status = #{wishlistStatus}
</if>
<if test="keyword!=null and keyword !=''">
and (b.username like concat("%", #{keyword}, "%") or b.mobile like concat("%", #{keyword}, "%"))
</if>
ORDER BY version_no desc
ORDER BY w.create_time DESC
</select>
<update id="updateByLineId">
UPDATE zxjp_store_wishlist
SET wishlist_status = 5,
update_time = NOW()
WHERE wishlist_status = 0
and line_id = #{lineId}
AND deleted = 0
</update>
</mapper>

View File

@@ -0,0 +1,36 @@
<?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.cool.store.mapper.order.StoreWishlistOptionMapper">
<insert id="insertBatch">
INSERT INTO zxjp_store_wishlist_option
(wishlist_id, option_id, quantity, deleted, create_time, update_time)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.wishlistId}, #{item.optionId}, #{item.quantity}, 0, NOW(), NOW())
</foreach>
</insert>
<update id="softDeleteByWishlistIds">
UPDATE zxjp_store_wishlist_option
SET deleted = 1,
update_time = NOW()
WHERE deleted = 0
AND wishlist_id IN
<foreach collection="wishlistIds" item="wishlistId" open="(" separator="," close=")">
#{wishlistId}
</foreach>
</update>
<select id="listByWishlistIds" resultType="com.cool.store.entity.order.StoreWishlistOptionDO">
SELECT id, wishlist_id, option_id, quantity, deleted, create_time, update_time
FROM zxjp_store_wishlist_option
WHERE deleted = 0
AND wishlist_id IN
<foreach collection="wishlistIds" item="wishlistId" open="(" separator="," close=")">
#{wishlistId}
</foreach>
ORDER BY id ASC
</select>
</mapper>

View File

@@ -176,4 +176,40 @@ public class PointInfoDO {
@Column(name = "protection_distance")
private Integer protectionDistance;
/**
* 位置描述 字典表
*/
@Column(name = "location_desc_code")
private String locationDescCode;
/**
* 是否用于正新AI店(1是0否)
*/
@Column(name = "use_ai")
private Integer useAi;
/**
* 门内净深(m)
*/
@Column(name = "door_inner_depth")
private java.math.BigDecimal doorInnerDepth;
/**
* 门内净宽(m)
*/
@Column(name = "door_inner_width")
private java.math.BigDecimal doorInnerWidth;
/**
* 门内净高(m)
*/
@Column(name = "door_inner_height")
private java.math.BigDecimal doorInnerHeight;
/**
* 其他说明
*/
@Column(name = "other_desc")
private String otherDesc;
}

View File

@@ -30,18 +30,18 @@ public class StoreWishlistDO {
@Column(name = "store_type_id")
private Long storeTypeId;
@Column(name = "option_id")
private Long optionId;
@Column(name = "quantity")
private BigDecimal quantity;
@Column(name = "total_amount")
private BigDecimal totalAmount;
@Column(name = "version_no")
private String versionNo;
@Column(name = "wishlist_status")
private Integer wishlistStatus;
@Column(name = "point_id")
private Long pointId;
@Column(name = "deleted")
private Integer deleted;
@@ -50,4 +50,6 @@ public class StoreWishlistDO {
@Column(name = "update_time")
private Date updateTime;
private String remark;
}

View File

@@ -0,0 +1,44 @@
package com.cool.store.entity.order;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.math.BigDecimal;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "zxjp_store_wishlist_option")
public class StoreWishlistOptionDO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "wishlist_id")
private Long wishlistId;
@Column(name = "option_id")
private Long optionId;
@Column(name = "quantity")
private BigDecimal quantity;
@Column(name = "deleted")
private Integer deleted;
@Column(name = "create_time")
private Date createTime;
@Column(name = "update_time")
private Date updateTime;
}

View File

@@ -11,6 +11,7 @@ import org.apache.commons.lang3.StringUtils;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Objects;
@Data
@@ -255,6 +256,24 @@ public class AddPointDetailRequest {
@ApiModelProperty("保护距离")
private Integer protectionDistance;
@ApiModelProperty("位置描述 字典表")
private String locationDescCode;
@ApiModelProperty("是否用于正新AI店(1是0否)")
private Integer useAi;
@ApiModelProperty("门内净深(m)")
private BigDecimal doorInnerDepth;
@ApiModelProperty("门内净宽(m)")
private BigDecimal doorInnerWidth;
@ApiModelProperty("门内净高(m)")
private BigDecimal doorInnerHeight;
@ApiModelProperty("其他说明")
private String otherDesc;
public static PointDetailInfoDO convertDO(AddPointDetailRequest request) {
PointDetailInfoDO result = new PointDetailInfoDO();
result.setBusinessStatus(request.getBusinessStatus());
@@ -323,6 +342,12 @@ public class AddPointDetailRequest {
result.setDistrict(request.getDistrict());
result.setTownship(request.getTownship());
result.setProtectionDistance(request.getProtectionDistance());
result.setLocationDescCode(request.getLocationDescCode());
result.setUseAi(request.getUseAi());
result.setDoorInnerDepth(request.getDoorInnerDepth());
result.setDoorInnerWidth(request.getDoorInnerWidth());
result.setDoorInnerHeight(request.getDoorInnerHeight());
result.setOtherDesc(request.getOtherDesc());
if(StringUtils.isAnyBlank(result.getProvince(),result.getCity(), result.getDistrict(), result.getTownship())){
GeoMapUtil.AddressInfo addressInfo = GeoMapUtil.reverseGeoCoding(result.getLatitude(), result.getLongitude());
if(Objects.nonNull(addressInfo)){

View File

@@ -23,12 +23,17 @@ public class RecommendPointPageRequest extends PageBasicInfo {
@ApiModelProperty(value = "拓展专员", hidden = true)
private String developmentManager;
@ApiModelProperty(value = "线索ID", hidden = true)
private Long lineId;
@ApiModelProperty(value = "铺位状态列表", hidden = true)
private List<Integer> pointStatusList;
@ApiModelProperty(value = "铺位名称 模糊搜索")
private String pointName;
private Integer useAi;
public List<Integer> getPointStatusList() {
List<Integer> pointStatusList = new ArrayList<>();
if (pointStatus != null) {

View File

@@ -89,6 +89,12 @@ public class UpdatePointDetailRequest extends AddPointDetailRequest {
result.setDistrict(request.getDistrict());
result.setTownship(request.getTownship());
result.setProtectionDistance(request.getProtectionDistance());
result.setLocationDescCode(request.getLocationDescCode());
result.setUseAi(request.getUseAi());
result.setDoorInnerDepth(request.getDoorInnerDepth());
result.setDoorInnerWidth(request.getDoorInnerWidth());
result.setDoorInnerHeight(request.getDoorInnerHeight());
result.setOtherDesc(request.getOtherDesc());
if(StringUtils.isAnyBlank(result.getProvince(),result.getCity(), result.getDistrict(), result.getTownship())){
GeoMapUtil.AddressInfo addressInfo = GeoMapUtil.reverseGeoCoding(result.getLatitude(), result.getLongitude());
if(Objects.nonNull(addressInfo)){

View File

@@ -15,12 +15,9 @@ import javax.validation.constraints.NotNull;
@Data
public class MiniStoreWishlistDelRequest {
@ApiModelProperty("店型ID")
@ApiModelProperty("心愿单ID")
@NotNull
private Long storeTypeId;
private Long wishlistId;
@ApiModelProperty("版本号")
@NotBlank
private String versionNo;
}

View File

@@ -10,8 +10,8 @@ import java.util.List;
@Data
public class MiniStoreWishlistSaveRequest {
@ApiModelProperty("版本号")
private String versionNo;
@ApiModelProperty("心愿单ID-修改")
private Long wishlistId;
@ApiModelProperty(value = "店型ID", required = true)
@NotNull(message = "店型ID不能为空")

View File

@@ -15,5 +15,6 @@ public class WishAllListRequest extends PageBasicInfo {
private Long storeTypeId;
private Integer wishlistStatus;
}

View File

@@ -0,0 +1,21 @@
package com.cool.store.request.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Auther zx_szh
* @Date 2026/3/19 10:22
* @Version 1.0
*/
@Data
public class WishlistAuditRequest {
@ApiModelProperty("心愿单ID")
private Long wishlistId;
@ApiModelProperty("1-通过 0-拒绝")
private Integer auditStatus;
@ApiModelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,23 @@
package com.cool.store.request.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @Auther zx_szh
* @Date 2026/3/18 16:08
* @Version 1.0
*/
@Data
public class WishlistBindPointRequest {
@ApiModelProperty("点位ID")
@NotNull
private Long pointId;
@ApiModelProperty("心愿单ID")
@NotNull
private Long wishlistId;
}

View File

@@ -43,6 +43,8 @@ public class MiniStoreOrderDetailVO {
@ApiModelProperty("门店类型")
private Integer storeType;
private String storeTypeName;
@ApiModelProperty("下单时间")
private Date createTime;

View File

@@ -21,6 +21,16 @@ public class MiniStoreWishlistDetailVO {
@ApiModelProperty("总金额")
private BigDecimal totalAmount;
private Long pointId;
private Long shopId;
private Integer storeType;
private Long id;
private Integer wishlistStatus;
private Date createTime;
private String partnerName;

View File

@@ -12,9 +12,18 @@ import java.util.List;
@Data
public class MiniStoreWishlistListVO {
@ApiModelProperty("心愿单ID")
private Long wishlistId;
@ApiModelProperty("店型ID")
private Long storeTypeId;
private Long pointId;
private Long shopId;
private Integer wishlistStatus;
private Long lineId;
private String partnerName;

View File

@@ -284,6 +284,24 @@ public class PointDetailVO {
@ApiModelProperty("保护距离")
private Integer protectionDistance;
@ApiModelProperty("位置描述 字典表")
private String locationDescCode;
@ApiModelProperty("是否用于正新AI店(1是0否)")
private Integer useAi;
@ApiModelProperty("门内净深(m)")
private java.math.BigDecimal doorInnerDepth;
@ApiModelProperty("门内净宽(m)")
private java.math.BigDecimal doorInnerWidth;
@ApiModelProperty("门内净高(m)")
private java.math.BigDecimal doorInnerHeight;
@ApiModelProperty("其他说明")
private String otherDesc;
public static PointDetailVO convertVO(PointInfoDO pointInfo, PointDetailInfoDO pointDetailInfo) {
PointDetailVO result = new PointDetailVO();
result.setPointId(pointInfo.getId());
@@ -371,6 +389,12 @@ public class PointDetailVO {
result.setDistrictCode(pointInfo.getDistrictCode());
result.setLocation(pointInfo.getPointLocation());
result.setProtectionDistance(pointInfo.getProtectionDistance());
result.setLocationDescCode(pointInfo.getLocationDescCode());
result.setUseAi(pointInfo.getUseAi());
result.setDoorInnerDepth(pointInfo.getDoorInnerDepth());
result.setDoorInnerWidth(pointInfo.getDoorInnerWidth());
result.setDoorInnerHeight(pointInfo.getDoorInnerHeight());
result.setOtherDesc(pointInfo.getOtherDesc());
return result;
}

View File

@@ -6,6 +6,7 @@ import com.cool.store.request.*;
import com.cool.store.request.point.AddPointFinancialDataRequest;
import com.cool.store.request.point.UpdatePointFinancialDataRequest;
import com.cool.store.vo.LinePointBaseInfoVO;
import com.cool.store.vo.PartnerUserInfoVO;
import com.cool.store.vo.point.*;
import com.cool.store.vo.shop.RentInfoToDoVO;
import com.cool.store.vo.shop.ShopPointBaseInfoVO;

View File

@@ -31,6 +31,8 @@ public interface ShopService {
*/
Integer initShop(LineInfoDO lineInfo);
Long initAiShop(LineInfoDO lineInfo);
/**
* 获取首页数据
* @param lineId

View File

@@ -326,12 +326,12 @@ public class DeskServiceImpl implements DeskService {
List<Integer> subStageStatusList = new ArrayList<>();
List<Long> userRoleIds = enterpriseUserRoleMapper.getUserRoleIds(user.getUserId());
//两个角色都包含
if (userRoleIds.contains(UserRoleEnum.HEAD_OF_DESIGN.getCode())&&userRoleIds.contains(UserRoleEnum.FINANCE.getCode())){
if (userRoleIds.contains(UserRoleEnum.AI_STORE_TYPE_APPROVE.getCode())&&userRoleIds.contains(UserRoleEnum.FINANCE.getCode())){
subStageStatusList.add(SHOP_SUB_STAGE_STATUS_281.getShopSubStageStatus());
subStageStatusList.add(SHOP_SUB_STAGE_STATUS_282.getShopSubStageStatus());
}
//加盟内勤 待确认
if (userRoleIds.contains(UserRoleEnum.HEAD_OF_DESIGN.getCode())){
//立规 待确认
if (userRoleIds.contains(UserRoleEnum.AI_STORE_TYPE_APPROVE.getCode())){
subStageStatusList.add(SHOP_SUB_STAGE_STATUS_281.getShopSubStageStatus());
}
//如果是财务 待财务确认

View File

@@ -236,6 +236,9 @@ public class IntentAgreementServiceImpl extends LineFlowService implements Inten
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean skipIntentAgreement(Long lineId, LoginUserInfo user) {
if (user==null){
user = new LoginUserInfo();
}
log.info("skipIntentAgreement lineId:{},操作人:{}", lineId, user.getName());
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId);
if (lineInfo == null) {

View File

@@ -3,6 +3,7 @@ package com.cool.store.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.*;
import com.cool.store.dao.order.StoreWishlistDAO;
import com.cool.store.entity.*;
import com.cool.store.enums.*;
import com.cool.store.exception.ServiceException;
@@ -66,6 +67,8 @@ public class JoinIntentionServiceImpl extends LineFlowService implements JoinInt
CommonService commonService;
@Resource
HyPartnerUserInfoDAO hyPartnerUserInfoDAO;
@Resource
StoreWishlistDAO wishlistDAO;
@Override
@@ -147,6 +150,8 @@ public class JoinIntentionServiceImpl extends LineFlowService implements JoinInt
hyPartnerUserInfoDO.setDownstreamSystemSalting(salt);
hyPartnerUserInfoDO.setUpdateTime(new Date());
hyPartnerUserInfoDAO.updatePasswordByPartnerId(hyPartnerUserInfoDO);
log.info("auditPass:大区老总审核通过");
wishlistDAO.updateByLineId(lineInfo.getId());
}
return Boolean.TRUE;
}

View File

@@ -840,6 +840,10 @@ public class PointServiceImpl implements PointService {
@Override
public PageInfo<PointPageVO> getRecommendPointList(RecommendPointPageRequest request) {
if (StringUtils.isEmpty(request.getDevelopmentManager())){
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId());
request.setDevelopmentManager(lineInfo.getInvestmentManager());
}
List<PointPageVO> resultList = new ArrayList();
Page<PCPointListDTO> pointPage = pointInfoDAO.getRecommendPointList(request);
if (Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())) {

View File

@@ -3,12 +3,16 @@ package com.cool.store.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.*;
import com.cool.store.dao.order.StoreOrderDAO;
import com.cool.store.dao.store.StoreTypeDAO;
import com.cool.store.dto.OpenInfoDTO;
import com.cool.store.dto.Preparation.PreparationDTO;
import com.cool.store.dto.Preparation.ScheduleDTO;
import com.cool.store.dto.ShopNameAndCodeDTO;
import com.cool.store.dto.UserDTO;
import com.cool.store.entity.*;
import com.cool.store.entity.order.StoreOrderDO;
import com.cool.store.entity.store.StoreTypeDO;
import com.cool.store.enums.*;
import com.cool.store.enums.point.*;
import com.cool.store.enums.point.ShopStatusEnum;
@@ -119,6 +123,9 @@ public class ShopServiceImpl implements ShopService {
ShopAccountService shopAccountService;
@Resource
PushService pushService;
@Autowired
private StoreOrderDAO storeOrderDAO;
private StoreTypeDAO storeTypeDAO;
@Override
@@ -171,6 +178,46 @@ public class ShopServiceImpl implements ShopService {
return result;
}
@Override
public Long initAiShop(LineInfoDO lineInfo) {
if (Objects.isNull(lineInfo)) {
throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST);
}
List<ShopInfoDO> shopList = shopInfoDAO.getShopList(lineInfo.getId());
int shopSize = shopList.size();
List<ShopInfoDO> addShopList = new ArrayList<>();
ShopInfoDO shopInfo = new ShopInfoDO();
shopInfo.setRegionId(lineInfo.getRegionId());
shopInfo.setLineId(lineInfo.getId());
shopInfo.setPartnerId(lineInfo.getPartnerId());
//初始化
shopInfo.setWantShopAreaId(lineInfo.getWantShopAreaId());
shopInfo.setDevelopmentManager(lineInfo.getDevelopmentManager());
shopInfo.setFranchiseBrand(lineInfo.getFranchiseBrand());
shopInfo.setJoinMode(lineInfo.getJoinMode());
shopInfo.setStoreNum(RandomEightCharCodeUtils.getCode());
shopInfo.setSupervisorUserId(lineInfo.getInvestmentManager());
shopInfo.setShopName("AI店铺" + NumberConverter.convertArabicToChinese(shopSize + 1));
shopInfo.setCreateTime(new Date());
shopInfo.setUseStandardStore(lineInfo.getUseStandardStore());
shopInfo.setInvestmentManager(lineInfo.getInvestmentManager());
shopInfo.setInvestRegionId(lineInfo.getInvestRegionId());
addShopList.add(shopInfo);
shopInfoDAO.batchAddShop(addShopList);
List<Long> shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList());
Integer result = shopStageInfoDAO.initShopStageInfo(lineInfo, addShopList, true);
//初始化平台账号
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(lineInfo.getPartnerId());
shopAccountDAO.initShopAccount(hyPartnerUserInfoDO, shopIds);
HashMap<String, String> map = new HashMap<>();
map.put("partnerUsername", lineInfo.getUsername());
map.put("partnerMobile", lineInfo.getMobile());
commonService.sendQWMessage(Collections.singletonList(lineInfo.getInvestmentManager()),
MessageEnum.MESSAGE_21,
map);
return shopInfo.getId();
}
/**
* @Auther: wangshuo
* @Date: 2025/1/13
@@ -883,6 +930,7 @@ public class ShopServiceImpl implements ShopService {
case SHOP_SUB_STAGE_STATUS_280:
case SHOP_SUB_STAGE_STATUS_283:
case SHOP_SUB_STAGE_STATUS_284:
case SHOP_SUB_STAGE_STATUS_281_5:
return Collections.singletonList(new UserDTO(lineInfo.getUsername(), lineInfo.getMobile()));
case SHOP_SUB_STAGE_STATUS_11:
@@ -988,7 +1036,7 @@ public class ShopServiceImpl implements ShopService {
case SHOP_SUB_STAGE_STATUS_172:
return getUsersByRoleAndRegion(ORDER_GROUP, shopInfo.getRegionId());
case SHOP_SUB_STAGE_STATUS_281:
return getUsersByRolesAndRegion(Arrays.asList(JOIN_OFFICE), shopInfo.getInvestRegionId());
return getUsersByRole(AI_STORE_TYPE_APPROVE);
default:
return Collections.emptyList();
}

View File

@@ -50,10 +50,15 @@ public interface MiniStoreOrderService {
Boolean deleted(MiniStoreWishlistDelRequest miniStoreWishlistDelRequest,PartnerUserInfoVO userInfoVO);
MiniStoreWishlistDetailVO wishlistDetail(Long storeTypeId,String versionNo, Long lineId);
MiniStoreWishlistDetailVO wishlistDetail(Long wishlistId);
List<MiniStoreWishlistListVO> wishlistList(PartnerUserInfoVO userInfoVO);
PageInfo<MiniStoreWishlistListVO> wishAllList(WishAllListRequest request);
Boolean wishlistBindPoint(WishlistBindPointRequest request);
Boolean wishlistApprove(WishlistAuditRequest request,LoginUserInfo userInfo);
MiniStoreWishlistDetailVO getCurrentShopBindWishlist(Long shopId);
}

View File

@@ -15,9 +15,11 @@ import com.cool.store.dao.order.PreAllocationRecordDAO;
import com.cool.store.dao.order.StoreOrderDAO;
import com.cool.store.dao.order.StoreOrderOptionSnapshotDAO;
import com.cool.store.dao.order.StoreWishlistDAO;
import com.cool.store.dao.order.StoreWishlistOptionDAO;
import com.cool.store.dao.store.StoreTypeDAO;
import com.cool.store.dao.store.StoreTypeOptionDAO;
import com.cool.store.dao.wallet.WalletTradeDAO;
import com.cool.store.dto.PointInfoDTO;
import com.cool.store.entity.*;
import com.cool.store.entity.config.ConfigOptionDO;
import com.cool.store.entity.dict.SysDictTableDO;
@@ -26,6 +28,7 @@ import com.cool.store.entity.order.PreAllocationRecordDO;
import com.cool.store.entity.order.StoreOrderDO;
import com.cool.store.entity.order.StoreOrderOptionSnapshotDO;
import com.cool.store.entity.order.StoreWishlistDO;
import com.cool.store.entity.order.StoreWishlistOptionDO;
import com.cool.store.entity.store.StoreTypeDO;
import com.cool.store.entity.store.StoreTypeOptionDO;
import com.cool.store.entity.wallet.WalletTradeDO;
@@ -33,15 +36,21 @@ import com.cool.store.enums.*;
import com.cool.store.enums.fees.AllocationPayStatusEnum;
import com.cool.store.enums.fees.WalletFeeItemEnum;
import com.cool.store.enums.order.StoreOrderStatusEnum;
import com.cool.store.enums.order.WishlistStatusEnum;
import com.cool.store.enums.point.ShopSubStageStatusEnum;
import com.cool.store.enums.wallet.WalletTradeModuleEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.dto.wallet.BatchTransferDTO;
import com.cool.store.mapper.ShopAuditInfoMapper;
import com.cool.store.request.PointRecommendLineRequest;
import com.cool.store.request.SelectPointRequest;
import com.cool.store.request.SysRoleRequest;
import com.cool.store.request.order.*;
import com.cool.store.request.dict.DictColumnQueryRequest;
import com.cool.store.request.wallet.BatchTransferRequest;
import com.cool.store.service.OperationLogService;
import com.cool.store.service.PointService;
import com.cool.store.service.ShopService;
import com.cool.store.service.UserAuthMappingService;
import com.cool.store.service.dict.DictColumnService;
import com.cool.store.service.order.MiniStoreOrderService;
@@ -68,9 +77,11 @@ import io.swagger.models.auth.In;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
@@ -93,6 +104,7 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
private final StoreOrderDAO storeOrderDAO;
private final StoreOrderOptionSnapshotDAO snapshotDAO;
private final StoreWishlistDAO storeWishlistDAO;
private final StoreWishlistOptionDAO storeWishlistOptionDAO;
private final ShopInfoDAO shopInfoDAO;
private final LineInfoDAO lineInfoDAO;
private final StoreTypeDAO storeTypeDAO;
@@ -114,6 +126,10 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
private final OperationLogDAO operationLogDAO;
private final ConfigItemCategoryDAO configItemCategoryDAO;
private final ConfigItemDAO configItemDAO;
private final QualificationsInfoDAO qualificationsInfoDAO;
private final PointService pointService;
private final PointInfoDAO pointInfoDAO;
private final ShopService shopService;
@Override
@@ -329,10 +345,11 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_280, user.getPartnerId(), user.getUsername(),
OperationTypeEnum.OPERATION_TYPE_0, "店型选购提交", OperationStatusEnum.PROCESSED);
List<EnterpriseUserDO> users = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Collections.singletonList(UserRoleEnum.JOIN_OFFICE),
shopInfo.getInvestRegionId());
SysRoleRequest sysRoleRequest = new SysRoleRequest();
sysRoleRequest.setRoleName(AI_STORE_TYPE_APPROVE.getDesc());
List<EnterpriseUserDO> userListByRole = userAuthMappingService.findUserListByRole(sysRoleRequest, false);
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281,
user.getPartnerId(), users,
user.getPartnerId(), userListByRole,
OperationTypeEnum.OPERATION_TYPE_1, "店型选购待立规审批", OperationStatusEnum.NOT_PROCESSED, 1);
return order.getId();
@@ -349,11 +366,14 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(order.getShopId());
StoreTypeDO storeType = storeTypeDAO.getById(order.getStoreTypeId());
MiniStoreOrderDetailVO vo = new MiniStoreOrderDetailVO();
MiniStoreOrderDetailVO.OrderInfoVO orderInfo = new MiniStoreOrderDetailVO.OrderInfoVO();
orderInfo.setStoreType(order.getStoreType());
orderInfo.setStoreTypeId(order.getStoreTypeId());
orderInfo.setStoreTypeName(storeType.getStoreTypeName());
orderInfo.setOrderNo(order.getOrderNo());
orderInfo.setOrderId(order.getId());
orderInfo.setShopId(order.getShopId());
@@ -557,15 +577,6 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
//处理审批记录 通过
handleAudit(order.getShopId(),user,0,request.getRemark(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281);
List<EnterpriseUserDO> users = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Arrays.asList(HEAD_OF_DESIGN), shopInfoDAO.getShopInfo(order.getShopId()).getRegionId());
List<String> userIds = new ArrayList<>();
if (CollectionUtils.isNotEmpty(users)) {
userIds = users.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toList());
}
operationLogService.addOperationLog(order.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281_5,
user.getUserId(), users,
OperationTypeEnum.OPERATION_TYPE_1, "店型选配待招商经理审批", OperationStatusEnum.NOT_PROCESSED);
}
if (INVEST_MANAGER_CONFIRM.getCode().equals(currentStatus)){
order.setStatus(FINANCIAL_CONFIRM.getCode());
@@ -574,9 +585,6 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
//修改阶段数据
shopStageInfoDAO.updateShopStageInfo(order.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_282);
//处理审批记录 通过
handleAudit(order.getShopId(),user,0,request.getRemark(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281_5);
}
return Boolean.TRUE;
}
@@ -603,12 +611,10 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
ShopSubStageStatusEnum current = null;
if (WAIT_CONFIRM.getCode().equals(currentStatus)){
current = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281;
//处理审批记录
handleAudit(order.getShopId(),userInfo,1,request.getRemark(),current);
}
if (INVEST_MANAGER_CONFIRM.getCode().equals(currentStatus)){
current = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281_5;
}
//处理审批记录
handleAudit(order.getShopId(),userInfo,1,request.getRemark(),current);
return Boolean.TRUE;
}
@@ -825,11 +831,11 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_280, user.getPartnerId(), user.getUsername(),
OperationTypeEnum.OPERATION_TYPE_0, "店型选购提交", OperationStatusEnum.PROCESSED);
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(order.getShopId());
List<EnterpriseUserDO> users = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Collections.singletonList(UserRoleEnum.JOIN_OFFICE),
shopInfo.getInvestRegionId());
SysRoleRequest sysRoleRequest = new SysRoleRequest();
sysRoleRequest.setRoleName(AI_STORE_TYPE_APPROVE.getDesc());
List<EnterpriseUserDO> userListByRole = userAuthMappingService.findUserListByRole(sysRoleRequest, false);
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281,
user.getPartnerId(), users,
user.getPartnerId(), userListByRole,
OperationTypeEnum.OPERATION_TYPE_1, "店型选购待立规审批", OperationStatusEnum.NOT_PROCESSED, 1);
return order.getId();
@@ -1292,12 +1298,14 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a));
}
if (request.getVersionNo() != null) {
storeWishlistDAO.softDeleteByLineIdAndStoreTypeAndVersion(userInfoVO.getLineId(), request.getStoreTypeId(), request.getVersionNo());
if (request.getWishlistId() != null) {
MiniStoreWishlistDelRequest miniStoreWishlistDelRequest = new MiniStoreWishlistDelRequest();
miniStoreWishlistDelRequest.setWishlistId(request.getWishlistId());
//删除逻辑
deleted(miniStoreWishlistDelRequest,null);
}
String versionNo = generateOrderNo();
List<StoreWishlistDO> saveList = new ArrayList<>();
BigDecimal totalAmount = BigDecimal.ZERO;
BigDecimal storeFixedAmount = safe(storeType.getFranchiseFee())
@@ -1326,67 +1334,279 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
BigDecimal quantity = selected.getQuantity();
BigDecimal defaultQty = binding.getDefaultQuantity();
BigDecimal amount = BigDecimal.ZERO;
//原价
BigDecimal originalPrice = cfg.getOriginalOptionPrice();
if(quantity.compareTo(defaultQty)<=0){
if (quantity.compareTo(defaultQty) <= 0) {
amount = price.multiply(quantity);
}else {
// 店型优惠价*默认数量 + 原价 *(选择数量-默认数量)
} else {
amount = price.multiply(defaultQty).add(originalPrice.multiply(quantity.subtract(defaultQty)));
}
totalAmount = totalAmount.add(amount);
saveList.add(StoreWishlistDO.builder()
.lineId(userInfoVO.getLineId())
.storeTypeId(request.getStoreTypeId())
.optionId(selected.getOptionId())
.quantity(selected.getQuantity())
.totalAmount(BigDecimal.ZERO)
.versionNo(versionNo)
.deleted(0)
.build());
}
totalAmount = storeFixedAmount.add(totalAmount);
for (StoreWishlistDO row : saveList) {
row.setTotalAmount(totalAmount);
StoreWishlistDO wishlist = StoreWishlistDO.builder()
.lineId(userInfoVO.getLineId())
.storeTypeId(request.getStoreTypeId())
.totalAmount(totalAmount)
.versionNo(versionNo)
.wishlistStatus(getWishlistStatus(userInfoVO.getLineId()))
.deleted(0)
.build();
storeWishlistDAO.insert(wishlist);
List<StoreWishlistOptionDO> optionSaveList = new ArrayList<>();
for (MiniStoreWishlistSaveRequest.SelectedOption selected : request.getSelectedOptions()) {
optionSaveList.add(StoreWishlistOptionDO.builder()
.wishlistId(wishlist.getId())
.optionId(selected.getOptionId())
.quantity(selected.getQuantity())
.deleted(0)
.build());
}
storeWishlistDAO.insertBatch(saveList);
storeWishlistOptionDAO.insertBatch(optionSaveList);
return Boolean.TRUE;
}
/**
* 获取线索阶段
* @param lineId
* @return
*/
private Integer getWishlistStatus(Long lineId){
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId);
if (lineInfo.getWorkflowSubStageStatus()>=WorkflowSubStageStatusEnum.INTENT_5.getCode()){
return WishlistStatusEnum.COMPLETE_POINT.getCode();
}
return WishlistStatusEnum.AGREE.getCode();
}
@Override
public Boolean deleted(MiniStoreWishlistDelRequest request, PartnerUserInfoVO userInfoVO) {
storeWishlistDAO.softDeleteByLineIdAndStoreTypeAndVersion(userInfoVO.getLineId(),request.getStoreTypeId(),request.getVersionNo());
StoreWishlistDO storewishlist = storeWishlistDAO.getById(request.getWishlistId());
if (storewishlist==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
storewishlist.setDeleted(1);
storeWishlistDAO.updateByExampleSelective(storewishlist);
//更新配置项数据
storeWishlistOptionDAO.softDeleteByWishlistIds(Arrays.asList(request.getWishlistId()));
return Boolean.TRUE;
}
@Override
public MiniStoreWishlistDetailVO wishlistDetail(Long storeTypeId,String versionNo, Long lineId) {
if (lineId == null) {
public MiniStoreWishlistDetailVO wishlistDetail(Long wishlistId) {
StoreWishlistDO storeWishlistDO = storeWishlistDAO.getById(wishlistId);
if (storeWishlistDO==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
return convert(storeWishlistDO);
}
List<StoreWishlistDO> rows = storeWishlistDAO.listByLineIdAndStoreTypeAndVersion(lineId, storeTypeId, versionNo);
if (CollectionUtils.isEmpty(rows)){
@Override
public List<MiniStoreWishlistListVO> wishlistList( PartnerUserInfoVO userInfoVO) {
if (userInfoVO == null || userInfoVO.getLineId() == null) {
return Collections.emptyList();
}
List<MiniStoreWishlistListVO> wishlistList = storeWishlistDAO.listByLineId(userInfoVO.getLineId(), null);
if (CollectionUtils.isEmpty(wishlistList)) {
return Collections.emptyList();
}
List<Long> wishlistIds = wishlistList.stream().map(MiniStoreWishlistListVO::getWishlistId).filter(Objects::nonNull).collect(Collectors.toList());
List<StoreWishlistOptionDO> optionRows = storeWishlistOptionDAO.listByWishlistIds(wishlistIds);
Map<Long, List<StoreWishlistOptionDO>> map = optionRows.stream().collect(Collectors.groupingBy(StoreWishlistOptionDO::getWishlistId));
List<Long> optionIds = optionRows.stream().distinct().map(StoreWishlistOptionDO::getOptionId).collect(Collectors.toList());
Map<Long, ConfigOptionDO> optionMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(optionIds)) {
List<ConfigOptionDO> options = configOptionDAO.listActiveByIds(optionIds);
optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a));
}
List<Long> pointList = wishlistList.stream().filter(x -> x.getPointId() != null).map(MiniStoreWishlistListVO::getPointId).collect(Collectors.toList());
List<PointInfoDO> pointDOList = pointInfoDAO.getPointListByIds(pointList);
Map<Long, Long> pointMap = pointDOList.stream().filter(x -> x.getShopId() != null).collect(Collectors.toMap(PointInfoDO::getId, PointInfoDO::getShopId));
for (MiniStoreWishlistListVO item : wishlistList) {
List<StoreWishlistOptionDO> storeWishlistOptionDOS = map.get(item.getWishlistId());
List<MiniStoreWishlistListVO.OptionVO> optionList = new ArrayList<>();
if (item.getPointId()!=null){
item.setShopId(pointMap.get(item.getPointId()));
}
for (StoreWishlistOptionDO row : storeWishlistOptionDOS) {
MiniStoreWishlistListVO.OptionVO vo = new MiniStoreWishlistListVO.OptionVO();
vo.setOptionId(row.getOptionId());
vo.setQuantity(row.getQuantity());
ConfigOptionDO cfg = optionMap.get(row.getOptionId());
if (cfg != null) {
vo.setOptionName(cfg.getOptionName());
vo.setOptionPrice(cfg.getOptionPrice());
vo.setImageUrl(cfg.getImageUrl());
}
optionList.add(vo);
}
item.setOptions(optionList);
}
return wishlistList;
}
@Override
public PageInfo<MiniStoreWishlistListVO> wishAllList(WishAllListRequest request) {
PageHelper.startPage(request.getPageNum(),request.getPageSize());
List<MiniStoreWishlistListVO> wishlist = storeWishlistDAO.listByVersionList(request.getKeyword(), request.getStoreTypeId(),request.getWishlistStatus());
if (CollectionUtils.isEmpty(wishlist)){
return new PageInfo<>();
}
PageInfo<MiniStoreWishlistListVO> result = new PageInfo<>(wishlist);
List<Long> lineIdList = wishlist.stream().map(MiniStoreWishlistListVO::getLineId).collect(Collectors.toList());
List<LineInfoDO> lineList = lineInfoDAO.getByLineIds(lineIdList);
Map<Long, LineInfoDO> map = lineList.stream().collect(Collectors.toMap(LineInfoDO::getId, data -> data));
List<Long> wishlistIds = wishlist.stream().map(MiniStoreWishlistListVO::getWishlistId).filter(Objects::nonNull).collect(Collectors.toList());
List<StoreWishlistOptionDO> optionRows = storeWishlistOptionDAO.listByWishlistIds(wishlistIds);
Map<Long, List<StoreWishlistOptionDO>> wishlistOptionMap = optionRows.stream().collect(Collectors.groupingBy(StoreWishlistOptionDO::getWishlistId));
List<Long> optionIds = optionRows.stream().distinct().map(StoreWishlistOptionDO::getOptionId).collect(Collectors.toList());
Map<Long, ConfigOptionDO> optionMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(optionIds)) {
List<ConfigOptionDO> options = configOptionDAO.listActiveByIds(optionIds);
optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a));
}
for (MiniStoreWishlistListVO item : wishlist) {
LineInfoDO lineInfoDO = map.get(item.getLineId());
if (lineInfoDO != null) {
item.setPartnerMobile(lineInfoDO.getMobile());
item.setPartnerName(lineInfoDO.getUsername());
}
List<StoreWishlistOptionDO> storeWishlistOptionDOS = wishlistOptionMap.get(item.getWishlistId());
List<MiniStoreWishlistListVO.OptionVO> optionList = new ArrayList<>();
for (StoreWishlistOptionDO row : storeWishlistOptionDOS) {
MiniStoreWishlistListVO.OptionVO vo = new MiniStoreWishlistListVO.OptionVO();
vo.setOptionId(row.getOptionId());
vo.setQuantity(row.getQuantity());
ConfigOptionDO cfg = optionMap.get(row.getOptionId());
if (cfg != null) {
vo.setOptionName(cfg.getOptionName());
vo.setOptionPrice(cfg.getOptionPrice());
vo.setImageUrl(cfg.getImageUrl());
}
optionList.add(vo);
}
item.setOptions(optionList);
}
return result;
}
@Override
public Boolean wishlistBindPoint(WishlistBindPointRequest request) {
StoreWishlistDO storeWishlist = storeWishlistDAO.getById(request.getWishlistId());
if (!WishlistStatusEnum.COMPLETE_POINT.getCode().equals(storeWishlist.getWishlistStatus())){
throw new ServiceException(ErrorCodeEnum.TASK_STATUS_NOT_ALLOW_OPERATE);
}
//校验铺位是否关联了其他心愿单 且心愿单不是拒绝状态
Integer pointBindWishlistCount = storeWishlistDAO.getPointBindWishlistCount(request.getPointId(), WishlistStatusEnum.REJECT.getCode());
if (pointBindWishlistCount>0){
throw new ServiceException(ErrorCodeEnum.CURRENT_POINT_BIND_OTHER_WISHLIST);
}
storeWishlist.setPointId(request.getPointId());
storeWishlist.setWishlistStatus(WishlistStatusEnum.LI_GUI_APPROVE.getCode());
storeWishlistDAO.updateByExampleSelective(storeWishlist);
return Boolean.TRUE;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean wishlistApprove(WishlistAuditRequest request, LoginUserInfo userInfo) {
log.info("wishlistApprove:{},审批人:{}",JSONObject.toJSONString(request),userInfo.getName());
//查看心愿单状态
StoreWishlistDO wishlistDO = storeWishlistDAO.getById(request.getWishlistId());
if (wishlistDO==null){
throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE);
}
if (!WishlistStatusEnum.LI_GUI_APPROVE.getCode().equals(wishlistDO.getWishlistStatus())){
throw new ServiceException(ErrorCodeEnum.TASK_STATUS_NOT_ALLOW_OPERATE);
}
Integer wishlistStatus = null;
//通过
if (request.getAuditStatus()==1){
//查看线索阶段是否完成 如果没有完成 直接跳过意向金和意向协议阶段
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(wishlistDO.getLineId());
if (Objects.isNull(lineInfo.getRegionId())||lineInfo.getRegionId() == 0){
throw new ServiceException(ErrorCodeEnum.LINE_REGION_NOT_EXIST);
}
lineInfo.setWorkflowStage(WorkflowStageEnum.STORE.getCode());
lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_125.getCode());
lineInfo.setDevelopmentManager(lineInfo.getInvestmentManager());
lineInfoDAO.updateLineInfo(lineInfo);
//初始化店铺 AI店
lineInfo.setUseStandardStore(1);
Long shopId = shopService.initAiShop(lineInfo);
//选址阶段直接完成
PointRecommendLineRequest recommendLineRequest = new PointRecommendLineRequest();
recommendLineRequest.setShopIds(Arrays.asList(Long.valueOf(shopId)));
recommendLineRequest.setPointId(wishlistDO.getPointId());
recommendLineRequest.setDevelopmentManager(lineInfo.getDevelopmentManager());
//推荐逻辑
pointService.pointRecommendLine(recommendLineRequest);
SelectPointRequest selectPointRequest = new SelectPointRequest();
selectPointRequest.setPointId(wishlistDO.getPointId());
selectPointRequest.setLineId(wishlistDO.getLineId());
selectPointRequest.setShopId(shopId);
//选址
pointService.lineSelectPoint(selectPointRequest);
//修改心愿单状态
wishlistStatus = WishlistStatusEnum.PASS.getCode();
}
if (request.getAuditStatus()==0){
wishlistStatus = WishlistStatusEnum.REJECT.getCode();
}
wishlistDO.setWishlistStatus(wishlistStatus);
wishlistDO.setRemark(request.getRemark());
wishlistDO.setUpdateTime(new Date());
storeWishlistDAO.updateByExampleSelective(wishlistDO);
return Boolean.TRUE;
}
@Override
public MiniStoreWishlistDetailVO getCurrentShopBindWishlist(Long shopId) {
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId);
if (shopInfo == null) {
throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE);
}
if (shopInfo.getPointId()==null){
return null;
}
StoreWishlistDO storelistDO = storeWishlistDAO.getByPointId(shopInfo.getLineId(), shopInfo.getPointId());
return convert(storelistDO);
}
private MiniStoreWishlistDetailVO convert(StoreWishlistDO storeWishlistDO){
if (storeWishlistDO==null){
return null;
}
MiniStoreWishlistDetailVO vo = new MiniStoreWishlistDetailVO();
vo.setStoreTypeId(storeTypeId);
vo.setVersionNo(versionNo);
StoreWishlistDO storeWishlistDO = rows.get(0);
if (storeWishlistDO!=null){
vo.setTotalAmount(storeWishlistDO.getTotalAmount());
vo.setCreateTime(storeWishlistDO.getCreateTime());
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(storeWishlistDO.getLineId());
if (lineInfo!=null){
vo.setPartnerMobile(lineInfo.getMobile());
vo.setPartnerName(lineInfo.getUsername());
}
vo.setStoreTypeId(storeWishlistDO.getStoreTypeId());
vo.setId(storeWishlistDO.getId());
vo.setVersionNo(storeWishlistDO.getVersionNo());
vo.setTotalAmount(storeWishlistDO.getTotalAmount());
vo.setPointId(storeWishlistDO.getPointId());
vo.setWishlistStatus(storeWishlistDO.getWishlistStatus());
vo.setCreateTime(storeWishlistDO.getCreateTime());
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(storeWishlistDO.getLineId());
if (lineInfo != null) {
vo.setPartnerMobile(lineInfo.getMobile());
vo.setPartnerName(lineInfo.getUsername());
}
StoreTypeDO storeTypeDO = storeTypeDAO.getById(storeTypeId);
StoreTypeDO storeTypeDO = storeTypeDAO.getById(storeWishlistDO.getStoreTypeId());
MiniStoreWishlistDetailVO.FeeInfoVO feeInfo = new MiniStoreWishlistDetailVO.FeeInfoVO();
feeInfo.setFranchiseFee(storeTypeDO.getFranchiseFee());
feeInfo.setBrandUsageFee(storeTypeDO.getBrandUsageFee());
@@ -1397,8 +1617,20 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
feeInfo.setFirstOrderFee(storeTypeDO.getFirstOrderFee());
vo.setFeeInfoVO(feeInfo);
vo.setStoreTypeName(storeTypeDO.getStoreTypeName());
vo.setStoreType(storeTypeDO.getStoreType());
List<Long> optionIds = rows.stream().map(StoreWishlistDO::getOptionId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
if (storeWishlistDO.getPointId()!=null){
PointInfoDO pointInfoDO = pointInfoDAO.getPointInfoById(storeWishlistDO.getPointId());
vo.setShopId(pointInfoDO.getShopId());
}
List<StoreWishlistOptionDO> optionRows = storeWishlistOptionDAO.listByWishlistIds(Arrays.asList(storeWishlistDO.getId()));
if (CollectionUtils.isEmpty(optionRows)) {
vo.setOptions(Collections.emptyList());
return vo;
}
List<Long> optionIds = optionRows.stream().map(StoreWishlistOptionDO::getOptionId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
Map<Long, ConfigOptionDO> optionMap = new HashMap<>();
List<ConfigOptionDO> options = new ArrayList<>();
if (CollectionUtils.isNotEmpty(optionIds)) {
@@ -1406,7 +1638,7 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a));
}
List<StoreTypeOptionDO> bindings = storeTypeOptionDAO.listByStoreTypeId(storeTypeId);
List<StoreTypeOptionDO> bindings = storeTypeOptionDAO.listByStoreTypeId(storeWishlistDO.getStoreTypeId());
Map<Long, StoreTypeOptionDO> bindingMap = bindings.stream()
.collect(Collectors.toMap(StoreTypeOptionDO::getOptionId, Function.identity(), (a, b) -> a));
@@ -1417,7 +1649,7 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
Map<String, String> itemCodeMap = configItemDAO.nameMap(itemCodeList);
List<MiniStoreWishlistDetailVO.OptionVO> list = new ArrayList<>();
for (StoreWishlistDO row : rows) {
for (StoreWishlistOptionDO row : optionRows) {
MiniStoreWishlistDetailVO.OptionVO item = new MiniStoreWishlistDetailVO.OptionVO();
BigDecimal quantity = row.getQuantity();
item.setOptionId(row.getOptionId());
@@ -1431,16 +1663,14 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
item.setCategoryCode(cfg.getCategoryCode());
item.setItemCode(cfg.getItemCode());
}
if (storeTypeOptionDO!=null){
if (storeTypeOptionDO != null && cfg != null) {
BigDecimal price = storeTypeOptionDO.getOptionPrice();
BigDecimal amount = BigDecimal.ZERO;
BigDecimal defaultQty = storeTypeOptionDO.getDefaultQuantity();
//原价
BigDecimal originalPrice = cfg.getOriginalOptionPrice();
if(quantity.compareTo(defaultQty)<=0){
if (quantity.compareTo(defaultQty) <= 0) {
amount = price.multiply(quantity);
}else {
// 店型优惠价*默认数量 + 原价 *(选择数量-默认数量)
} else {
amount = price.multiply(defaultQty).add(originalPrice.multiply(quantity.subtract(defaultQty)));
}
item.setOptionPrice(price);
@@ -1454,100 +1684,6 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
return vo;
}
@Override
public List<MiniStoreWishlistListVO> wishlistList( PartnerUserInfoVO userInfoVO) {
if (userInfoVO == null || userInfoVO.getLineId() == null) {
return Collections.emptyList();
}
List<MiniStoreWishlistListVO> wishlist = storeWishlistDAO.listByLineId(userInfoVO.getLineId(), null);
if (CollectionUtils.isEmpty(wishlist)) {
return Collections.emptyList();
}
for (MiniStoreWishlistListVO item : wishlist) {
List<StoreWishlistDO> rows = storeWishlistDAO.listByLineIdAndStoreTypeAndVersion(userInfoVO.getLineId(), item.getStoreTypeId(), item.getVersionNo());
if (CollectionUtils.isEmpty(rows)) {
item.setOptions(Collections.emptyList());
continue;
}
List<Long> optionIds = rows.stream().map(StoreWishlistDO::getOptionId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
Map<Long, ConfigOptionDO> optionMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(optionIds)) {
List<ConfigOptionDO> options = configOptionDAO.listActiveByIds(optionIds);
optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a));
}
List<MiniStoreWishlistListVO.OptionVO> optionList = new ArrayList<>();
for (StoreWishlistDO row : rows) {
MiniStoreWishlistListVO.OptionVO vo = new MiniStoreWishlistListVO.OptionVO();
vo.setOptionId(row.getOptionId());
vo.setQuantity(row.getQuantity());
ConfigOptionDO cfg = optionMap.get(row.getOptionId());
if (cfg != null) {
vo.setOptionName(cfg.getOptionName());
vo.setOptionPrice(cfg.getOptionPrice());
vo.setImageUrl(cfg.getImageUrl());
}
optionList.add(vo);
}
item.setOptions(optionList);
}
return wishlist;
}
@Override
public PageInfo<MiniStoreWishlistListVO> wishAllList(WishAllListRequest request) {
PageHelper.startPage(request.getPageNum(),request.getPageSize());
List<String> distinctVersion = storeWishlistDAO.getDistinctVersion(request.getKeyword(),request.getStoreTypeId());
if (CollectionUtils.isEmpty(distinctVersion)){
return new PageInfo<>();
}
PageInfo result = new PageInfo<>(distinctVersion);
List<MiniStoreWishlistListVO> wishlist = storeWishlistDAO.listByVersionList(distinctVersion);
List<Long> lineIdList = wishlist.stream().map(MiniStoreWishlistListVO::getLineId).collect(Collectors.toList());
List<LineInfoDO> lineList = lineInfoDAO.getByLineIds(lineIdList);
Map<Long, LineInfoDO> map = lineList.stream().collect(Collectors.toMap(LineInfoDO::getId, data -> data));
for (MiniStoreWishlistListVO item : wishlist) {
LineInfoDO lineInfoDO = map.get(item.getLineId());
if (lineInfoDO!=null){
item.setPartnerMobile(lineInfoDO.getMobile());
item.setPartnerName(lineInfoDO.getUsername());
}
List<StoreWishlistDO> rows = storeWishlistDAO.listByLineIdAndStoreTypeAndVersion(item.getLineId(), item.getStoreTypeId(), item.getVersionNo());
if (CollectionUtils.isEmpty(rows)) {
item.setOptions(Collections.emptyList());
continue;
}
List<Long> optionIds = rows.stream().map(StoreWishlistDO::getOptionId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
Map<Long, ConfigOptionDO> optionMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(optionIds)) {
List<ConfigOptionDO> options = configOptionDAO.listActiveByIds(optionIds);
optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a));
}
List<MiniStoreWishlistListVO.OptionVO> optionList = new ArrayList<>();
for (StoreWishlistDO row : rows) {
MiniStoreWishlistListVO.OptionVO vo = new MiniStoreWishlistListVO.OptionVO();
vo.setOptionId(row.getOptionId());
vo.setQuantity(row.getQuantity());
ConfigOptionDO cfg = optionMap.get(row.getOptionId());
if (cfg != null) {
vo.setOptionName(cfg.getOptionName());
vo.setOptionPrice(cfg.getOptionPrice());
vo.setImageUrl(cfg.getImageUrl());
}
optionList.add(vo);
}
item.setOptions(optionList);
}
result.setList(wishlist);
return result;
}
private BigDecimal safe(BigDecimal v) {
return v == null ? BigDecimal.ZERO : v;

View File

@@ -2,10 +2,7 @@ package com.cool.store.controller.webb;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.request.order.OrderAuditRecordRequest;
import com.cool.store.request.order.PCStoreOrderOptionQuantityUpdateRequest;
import com.cool.store.request.order.PCStoreOrderQueryRequest;
import com.cool.store.request.order.WishAllListRequest;
import com.cool.store.request.order.*;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.order.MiniStoreOrderService;
import com.cool.store.vo.order.*;
@@ -78,11 +75,8 @@ public class StoreOrderController {
@ApiOperation("心愿单详情")
@GetMapping("/wishlist/detail")
public ResponseResult<MiniStoreWishlistDetailVO> wishlistDetail(@RequestParam("storeTypeId") Long storeTypeId,
@RequestParam("lineId") Long lineId,
@RequestParam("versionNo") String versionNo) {
return ResponseResult.success(miniStoreOrderService.wishlistDetail(storeTypeId,versionNo, lineId));
public ResponseResult<MiniStoreWishlistDetailVO> wishlistDetail(@RequestParam("wishlistId") Long wishlistId) {
return ResponseResult.success(miniStoreOrderService.wishlistDetail(wishlistId));
}
@ApiOperation("PC心愿单列表")
@@ -91,4 +85,16 @@ public class StoreOrderController {
return ResponseResult.success(miniStoreOrderService.wishAllList( request));
}
@ApiOperation("心愿单待立规审批")
@PostMapping("/wishlist/wishlistApprove")
public ResponseResult<Boolean> wishlistApprove(@RequestBody @Valid WishlistAuditRequest request) {
return ResponseResult.success(miniStoreOrderService.wishlistApprove(request,CurrentUserHolder.getUser()));
}
@ApiOperation("查询当前门店铺位绑定的心愿单")
@GetMapping("/wishlist/getCurrentShopBindWishlist")
public ResponseResult<MiniStoreWishlistDetailVO> getCurrentShopBindWishlist(@RequestParam("shopId") Long shopId) {
return ResponseResult.success(miniStoreOrderService.getCurrentShopBindWishlist(shopId));
}
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.controller.webc;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.dto.OpenInfoDTO;
import com.cool.store.request.*;
@@ -10,10 +11,7 @@ import com.cool.store.response.ShopResponse;
import com.cool.store.service.PointService;
import com.cool.store.service.ShopService;
import com.cool.store.vo.PartnerUserInfoVO;
import com.cool.store.vo.point.MiniPointPageVO;
import com.cool.store.vo.point.PointDetailVO;
import com.cool.store.vo.point.PointFinancialDataVO;
import com.cool.store.vo.point.ShopRentInfoVO;
import com.cool.store.vo.point.*;
import com.cool.store.vo.shop.MiniShopPageVO;
import com.cool.store.vo.shop.ShopStageInfoVO;
import com.cool.store.vo.shop.ShopStageVO;
@@ -170,4 +168,12 @@ public class MiniShopController {
public ResponseResult<OpenInfoDTO> getShopOpenInfo(@RequestParam("shopId")Long shopId) {
return ResponseResult.success(shopService.getShopOpenInfo(shopId));
}
@ApiOperation("选址人员获取可推荐铺位列表")
@PostMapping("/getRecommendPointList")
public ResponseResult<PageInfo<PointPageVO>> getRecommendPointList(@RequestBody @Validated RecommendPointPageRequest request) {
request.setLineId(PartnerUserHolder.getUser().getLineId());
request.setUseAi(1);
return ResponseResult.success(pointService.getRecommendPointList(request));
}
}

View File

@@ -103,9 +103,8 @@ public class MiniStoreOrderController {
@ApiOperation("心愿单详情")
@GetMapping("/wishlist/detail")
public ResponseResult<MiniStoreWishlistDetailVO> wishlistDetail(@RequestParam("storeTypeId") Long storeTypeId,
@RequestParam("versionNo") String versionNo) {
return ResponseResult.success(miniStoreOrderService.wishlistDetail(storeTypeId,versionNo, PartnerUserHolder.getUser().getLineId()));
public ResponseResult<MiniStoreWishlistDetailVO> wishlistDetail(@RequestParam("wishlistId") Long wishlistId) {
return ResponseResult.success(miniStoreOrderService.wishlistDetail(wishlistId));
}
@ApiOperation("心愿单列表")
@@ -114,4 +113,22 @@ public class MiniStoreOrderController {
return ResponseResult.success(miniStoreOrderService.wishlistList( PartnerUserHolder.getUser()));
}
@ApiOperation("心愿单绑定铺位")
@PostMapping("/wishlist/wishlistBindPoint")
public ResponseResult<Boolean> wishlistBindPoint(@RequestBody @Valid WishlistBindPointRequest request) {
return ResponseResult.success(miniStoreOrderService.wishlistBindPoint(request));
}
@ApiOperation("查询当前门店铺位绑定的心愿单")
@GetMapping("/wishlist/getCurrentShopBindWishlist")
public ResponseResult<MiniStoreWishlistDetailVO> getCurrentShopBindWishlist(@RequestParam("shopId") Long shopId) {
return ResponseResult.success(miniStoreOrderService.getCurrentShopBindWishlist(shopId));
}
@ApiOperation("订单 加盟商确认")
@PostMapping("/passOrder")
public ResponseResult<Boolean> passOrder(@RequestBody OrderAuditRecordRequest request) {
return ResponseResult.success(miniStoreOrderService.passOrder(request, null));
}
}