小程序首页模块自定义

This commit is contained in:
shuo.wang
2025-04-08 14:23:19 +08:00
parent 844c36caaa
commit d7869f39da
18 changed files with 587 additions and 1 deletions

View File

@@ -236,6 +236,7 @@ public enum ErrorCodeEnum {
UPDATE_INVESTMENT_MANAGER_FAIL(131005,"当前用户已经为该门店招商经理",null), UPDATE_INVESTMENT_MANAGER_FAIL(131005,"当前用户已经为该门店招商经理",null),
CONFIRM_THE_APPROVER(131006,"您提交的铺位暂时找不到选址审批人,请联系系统管理员配置选址审批权限后再提交铺位审批",null), CONFIRM_THE_APPROVER(131006,"您提交的铺位暂时找不到选址审批人,请联系系统管理员配置选址审批权限后再提交铺位审批",null),
CREATE_PASSWORD_FAIL(131007,"身份证号信息错误",null), CREATE_PASSWORD_FAIL(131007,"身份证号信息错误",null),
GET_HOME_TEMPLATE_ERROR(131008,"获取首页模板失败",null),
TALLY_BOOK_NOT_EXIST(180001, "记账本数据不存在", null), TALLY_BOOK_NOT_EXIST(180001, "记账本数据不存在", null),

View File

@@ -0,0 +1,23 @@
package com.cool.store.utils;
/**
* @Author: WangShuo
* @Date: 2025/04/08/09:52
* @Version 1.0
* @注释:
*/
public enum HomeTemplateTypeEnum {
MINI_OPEN_SOURCE_HOME(1,"Mini开源首页");
private Integer code;
private String desc;
HomeTemplateTypeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public Integer getCode() {
return code;
}
public String getDesc() {
return desc;
}
}

View File

@@ -0,0 +1,31 @@
package com.cool.store.dao;
import com.cool.store.entity.HomeTemplateDO;
import com.cool.store.mapper.HomeTemplateMapper;
import io.swagger.models.auth.In;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
/**
* @Author: WangShuo
* @Date: 2025/04/08/09:39
* @Version 1.0
* @注释:
*/
@Repository
public class HomeTemplateDAO {
@Resource
private HomeTemplateMapper homeTemplateMapper;
public HomeTemplateDO getHomeTemplateById(Long id) {
return homeTemplateMapper.selectByPrimaryKey(id);
}
public Long insertSelective(HomeTemplateDO homeTemplateDO) {
homeTemplateMapper.insertSelective(homeTemplateDO);
return homeTemplateDO.getId();
}
public Integer updateByPrimaryKeySelective(HomeTemplateDO homeTemplateDO) {
return homeTemplateMapper.updateByPrimaryKeySelective(homeTemplateDO);
}
}

View File

@@ -0,0 +1,34 @@
package com.cool.store.dao;
import com.cool.store.entity.HomeTemplateUserMappingDO;
import com.cool.store.mapper.HomeTemplateUserMappingMapper;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
/**
* @Author: WangShuo
* @Date: 2025/04/08/10:25
* @Version 1.0
* @注释:
*/
@Repository
public class HomeTemplateUserMappingDAO {
@Resource
private HomeTemplateUserMappingMapper homeTemplateUserMappingMapper;
public int insertSelective(HomeTemplateUserMappingDO homeTemplateRoleMappingDO) {
return homeTemplateUserMappingMapper.insertSelective(homeTemplateRoleMappingDO);
}
public HomeTemplateUserMappingDO getHomeTemplateRoleMappingByUserId(String userId) {
Example example = new Example(HomeTemplateUserMappingDO.class);
example.createCriteria().andEqualTo("userId", userId);
return homeTemplateUserMappingMapper.selectOneByExample(example);
}
public int updateByPrimaryKeySelective(HomeTemplateUserMappingDO homeTemplateRoleMappingDO) {
return homeTemplateUserMappingMapper.updateByPrimaryKeySelective(homeTemplateRoleMappingDO);
}
}

View File

@@ -0,0 +1,14 @@
package com.cool.store.mapper;
import com.cool.store.entity.HomeTemplateDO;
import tk.mybatis.mapper.common.Mapper;
/**
* @Author: WangShuo
* @Date: 2025/04/08/09:35
* @Version 1.0
* @注释:
*/
public interface HomeTemplateMapper extends Mapper<HomeTemplateDO> {
}

View File

@@ -0,0 +1,13 @@
package com.cool.store.mapper;
import com.cool.store.entity.HomeTemplateUserMappingDO;
import tk.mybatis.mapper.common.Mapper;
/**
* @Author: WangShuo
* @Date: 2025/04/08/10:19
* @Version 1.0
* @注释:
*/
public interface HomeTemplateUserMappingMapper extends Mapper<HomeTemplateUserMappingDO> {
}

View File

@@ -0,0 +1,20 @@
<?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">
<!--mybatis-3-mapper.dtd:约束文件的名称限制和检查在当前文件中出现的标签和属性符合mybatis的要求-->
<!--namespace命名空间要有唯一的值要求使用dao接口的权限定名称一个dao接口对应一个mappernamespace指明对应哪个dao接口-->
<mapper namespace="com.cool.store.mapper.HomeTemplateMapper">
<resultMap id="BaseResultMap" type="com.cool.store.entity.HomeTemplateDO">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="template_name" jdbcType="VARCHAR" property="templateName" />
<result column="template_description" jdbcType="VARCHAR" property="templateDescription" />
<result column="is_default" jdbcType="BIT" property="isDefault" />
<result column="deleted" jdbcType="BIT" property="deleted" />
<result column="mini_open_components_json" jdbcType="VARCHAR" property="miniOpenComponentsJson" />
<result column="create_id" jdbcType="VARCHAR" property="createId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_id" jdbcType="VARCHAR" property="updateId" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
</mapper>

View File

@@ -0,0 +1,16 @@
<?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">
<!--mybatis-3-mapper.dtd:约束文件的名称限制和检查在当前文件中出现的标签和属性符合mybatis的要求-->
<!--namespace命名空间要有唯一的值要求使用dao接口的权限定名称一个dao接口对应一个mappernamespace指明对应哪个dao接口-->
<mapper namespace="com.cool.store.mapper.HomeTemplateUserMappingMapper">
<resultMap id="BaseResultMapper" type="com.cool.store.entity.HomeTemplateUserMappingDO">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="template_id" jdbcType="BIGINT" property="templateId" />
<result column="user_id" jdbcType="VARCHAR" property="userId" />
<result column="create_id" jdbcType="VARCHAR" property="createId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_id" jdbcType="VARCHAR" property="updateId" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
</mapper>

View File

@@ -0,0 +1,63 @@
package com.cool.store.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author: WangShuo
* @Date: 2025/04/08/09:42
* @Version 1.0
* @注释:
*/
@Data
public class HomeTemplateDTO {
/**
* 模块列表
*/
@ApiModelProperty(value = "模块列表")
private List<Module> moduleList;
@Data
public static class Module {
/**
* 模块的唯一标识符
*/
@ApiModelProperty(value = "模块的唯一标识符")
private String key;
/**
* 模块名称
*/
@ApiModelProperty(value = "模块名称")
private String name;
/**
* 是否可见
*/
@ApiModelProperty(value = "是否可见")
private Boolean visible;
/**
* 是否可拖动
*/
@ApiModelProperty(value = "是否可拖动")
private Boolean dragable;
/**
* 是否可配置
*/
@ApiModelProperty(value = "是否可配置")
private Boolean configurable;
/**
* 模块 ID
*/
@ApiModelProperty(value = "模块 ID")
private String id;
}
}

View File

@@ -0,0 +1,73 @@
package com.cool.store.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
@Data // 自动生成 getter、setter、toString 等方法
@Table(name = "xfsg_home_template")
public class HomeTemplateDO {
/**
* 主键
*/
@Column(name = "id")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 首页模板名称
*/
@Column(name = "template_name")
private String templateName;
/**
* 首页模板描述
*/
@Column(name = "template_description")
private String templateDescription;
/**
* 系统默认标识 0: 否1: 是
*/
@Column(name = "is_default")
private Boolean isDefault;
/**
* 是否删除: 0: 未删除1: 删除
*/
@Column(name = "deleted")
private Integer deleted;
/**
* 小程序开源首页组件json
*/
@Column(name = "mini_open_components_json")
private String miniOpenComponentsJson;
/**
* 创建人
*/
@Column(name = "create_id")
private String createId;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新人
*/
@Column(name = "update_id")
private String updateId;
/**
* 更新时间
*/
@Column(name = "update_time")
private Date updateTime;
}

View File

@@ -0,0 +1,55 @@
package com.cool.store.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
@Data // 自动生成 getter、setter、toString 等方法
@Table(name = "xfsg_home_template_user_mapping") // MyBatis 别名
public class HomeTemplateUserMappingDO {
/**
* 主键
*/
@Column(name = "id")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 模板 ID
*/
@Column(name = "template_id")
private Long templateId;
/**
* 用户 ID 或 Partner ID
*/
@Column(name = "user_id")
private String userId;
/**
* 创建人
*/
@Column(name = "create_id")
private String createId;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新人
*/
@Column(name = "update_id")
private String updateId;
/**
* 更新时间
*/
@Column(name = "update_time")
private Date updateTime;
}

View File

@@ -0,0 +1,20 @@
package com.cool.store.response;
import com.cool.store.dto.HomeTemplateDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author: WangShuo
* @Date: 2025/04/08/09:42
* @Version 1.0
* @注释:
*/
@Data
public class HomeTemplateResponse {
@ApiModelProperty(value = "小程序开源首页模板")
private HomeTemplateDTO miniOpenSourceHomeTemplate;
}

View File

@@ -0,0 +1,15 @@
package com.cool.store.service;
import com.cool.store.response.HomeTemplateResponse;
import com.cool.store.utils.HomeTemplateTypeEnum;
/**
* @Author: WangShuo
* @Date: 2025/04/08/09:41
* @Version 1.0
* @注释:
*/
public interface HomeTemplateService {
HomeTemplateResponse getHomeTemplateById(Long id);
}

View File

@@ -0,0 +1,16 @@
package com.cool.store.service;
import com.cool.store.response.HomeTemplateResponse;
/**
* @Author: WangShuo
* @Date: 2025/04/08/10:44
* @Version 1.0
* @注释:
*/
public interface HomeTemplateUserMappingService {
HomeTemplateResponse getHomeTemplateByUserId(String userId);
Integer insertOrUpdateHomeTemplateUserMapping(HomeTemplateResponse homeTemplateResponse,String userId);
}

View File

@@ -0,0 +1,50 @@
package com.cool.store.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dao.HomeTemplateDAO;
import com.cool.store.dto.HomeTemplateDTO;
import com.cool.store.entity.HomeTemplateDO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.response.HomeTemplateResponse;
import com.cool.store.service.HomeTemplateService;
import com.cool.store.utils.HomeTemplateTypeEnum;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Objects;
/**
* @Author: WangShuo
* @Date: 2025/04/08/09:41
* @Version 1.0
* @注释:
*/
@Service
@Slf4j
public class HomeTemplateServiceImpl implements HomeTemplateService {
@Resource
private HomeTemplateDAO homeTemplateDAO;
@Override
public HomeTemplateResponse getHomeTemplateById(Long id) {
HomeTemplateDO homeTemplateById = homeTemplateDAO.getHomeTemplateById(id);
if (homeTemplateById != null){
ObjectMapper objectMapper = new ObjectMapper();
// 将 JSON 字符串解析为 HomeTemplateResponse 对象
try {
HomeTemplateResponse componentsJson = new HomeTemplateResponse();
HomeTemplateDTO miniOpenComponentsJson = objectMapper.readValue(homeTemplateById.getMiniOpenComponentsJson(), HomeTemplateDTO.class);
componentsJson.setMiniOpenSourceHomeTemplate(miniOpenComponentsJson);
return componentsJson;
} catch (JsonProcessingException e) {
log.info("JSON解析失败:{}", JSONObject.toJSONString(e.getMessage()));
throw new ServiceException(ErrorCodeEnum.GET_HOME_TEMPLATE_ERROR);
}
}
return null;
}
}

View File

@@ -0,0 +1,102 @@
package com.cool.store.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dao.HomeTemplateDAO;
import com.cool.store.dao.HomeTemplateUserMappingDAO;
import com.cool.store.entity.HomeTemplateDO;
import com.cool.store.entity.HomeTemplateUserMappingDO;
import com.cool.store.response.HomeTemplateResponse;
import com.cool.store.service.HomeTemplateService;
import com.cool.store.service.HomeTemplateUserMappingService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
/**
* @Author: WangShuo
* @Date: 2025/04/08/10:44
* @Version 1.0
* @注释:
*/
@Service
public class HomeTemplateUserMappingServiceImpl implements HomeTemplateUserMappingService {
@Resource
private HomeTemplateUserMappingDAO homeTemplateUserMappingDAO;
@Resource
private HomeTemplateService homeTemplateService;
@Resource
private HomeTemplateDAO homeTemplateDAO;
@Override
public HomeTemplateResponse getHomeTemplateByUserId(String userId) {
HomeTemplateUserMappingDO homeTemplateRoleMappingById = homeTemplateUserMappingDAO.getHomeTemplateRoleMappingByUserId(userId);
if (homeTemplateRoleMappingById == null){
//使用默认模板 id =1
return homeTemplateService.getHomeTemplateById(1L);
}else{
return homeTemplateService.getHomeTemplateById(homeTemplateRoleMappingById.getTemplateId());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public Integer insertOrUpdateHomeTemplateUserMapping(HomeTemplateResponse homeTemplateResponse, String userId) {
HomeTemplateUserMappingDO homeTemplateRoleMappingByUserId = homeTemplateUserMappingDAO.getHomeTemplateRoleMappingByUserId(userId);
if (homeTemplateRoleMappingByUserId == null){
//获取默认模板 id =1
HomeTemplateDO homeTemplate = homeTemplateDAO.getHomeTemplateById(1L);
HomeTemplateDO homeTemplateDO = new HomeTemplateDO();
homeTemplateDO.setTemplateName(homeTemplate.getTemplateName());
homeTemplateDO.setTemplateDescription(homeTemplate.getTemplateDescription());
String jsonString = JSONObject.toJSONString(homeTemplateResponse.getMiniOpenSourceHomeTemplate());
homeTemplateDO.setMiniOpenComponentsJson(jsonString);
homeTemplateDO.setIsDefault(false);
homeTemplateDO.setDeleted(0);
homeTemplateDO.setCreateId(userId);
homeTemplateDO.setCreateTime(new Date());
Long tempId = homeTemplateDAO.insertSelective(homeTemplateDO);
homeTemplateRoleMappingByUserId = new HomeTemplateUserMappingDO();
homeTemplateRoleMappingByUserId.setTemplateId(tempId);
homeTemplateRoleMappingByUserId.setUserId(userId);
homeTemplateRoleMappingByUserId.setCreateId(userId);
homeTemplateRoleMappingByUserId.setCreateTime(new Date());
return homeTemplateUserMappingDAO.insertSelective(homeTemplateRoleMappingByUserId);
}else{
HomeTemplateDO homeTemplateById = homeTemplateDAO.getHomeTemplateById(homeTemplateRoleMappingByUserId.getTemplateId());
if (homeTemplateById == null){
//如果模板不存在,则新建
HomeTemplateDO homeTemplate = homeTemplateDAO.getHomeTemplateById(1L);
HomeTemplateDO homeTemplateDO = new HomeTemplateDO();
homeTemplateDO.setTemplateName(homeTemplate.getTemplateName());
homeTemplateDO.setTemplateDescription(homeTemplate.getTemplateDescription());
String jsonString = JSONObject.toJSONString(homeTemplateResponse.getMiniOpenSourceHomeTemplate());
homeTemplateDO.setMiniOpenComponentsJson(jsonString);
homeTemplateDO.setIsDefault(false);
homeTemplateDO.setDeleted(0);
homeTemplateDO.setCreateId(userId);
homeTemplateDO.setCreateTime(new Date());
Long tempId = homeTemplateDAO.insertSelective(homeTemplateDO);
homeTemplateRoleMappingByUserId.setTemplateId(tempId);
homeTemplateRoleMappingByUserId.setUpdateId(userId);
homeTemplateRoleMappingByUserId.setUpdateTime(new Date());
}else{
homeTemplateById.setMiniOpenComponentsJson(JSONObject.toJSONString(homeTemplateResponse.getMiniOpenSourceHomeTemplate()));
homeTemplateById.setUpdateId(userId);
homeTemplateById.setUpdateTime(new Date());
homeTemplateDAO.updateByPrimaryKeySelective(homeTemplateById);
}
return homeTemplateUserMappingDAO.updateByPrimaryKeySelective(homeTemplateRoleMappingByUserId);
}
}
}

View File

@@ -52,7 +52,7 @@ public class OrderSysInfoServiceImpl implements OrderSysInfoService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Integer updateByShopId(OrderSysInfoRequest request, String userId) { public Integer updateByShopId(OrderSysInfoRequest request, String userId) {
shopInfoDAO.updateShopCode(request.getShopCode(),request.getShopId());
OrderSysInfoDO orderSysInfoDO = orderSysInfoDAO.selectByShopId(request.getShopId()); OrderSysInfoDO orderSysInfoDO = orderSysInfoDAO.selectByShopId(request.getShopId());
if (request.getType().equals(OrderSysTypeEnum.ORDER_SYS_TYPE_1.getType())) { if (request.getType().equals(OrderSysTypeEnum.ORDER_SYS_TYPE_1.getType())) {
orderSysInfoDO.setXgjVicePresident(request.getXgjVicePresident()); orderSysInfoDO.setXgjVicePresident(request.getXgjVicePresident());
@@ -90,6 +90,7 @@ public class OrderSysInfoServiceImpl implements OrderSysInfoService {
} }
} }
if (request.getType().equals(OrderSysTypeEnum.ORDER_SYS_TYPE_2.getType())) { if (request.getType().equals(OrderSysTypeEnum.ORDER_SYS_TYPE_2.getType())) {
shopInfoDAO.updateShopCode(request.getShopCode(),request.getShopId());
orderSysInfoDO.setReceivingFirmName(request.getReceivingFirmName()); orderSysInfoDO.setReceivingFirmName(request.getReceivingFirmName());
orderSysInfoDO.setReceivingMsBankAccount(request.getReceivingMsBankAccount()); orderSysInfoDO.setReceivingMsBankAccount(request.getReceivingMsBankAccount());
orderSysInfoDO.setReceivingMsBankBranch(request.getReceivingMsBankBranch()); orderSysInfoDO.setReceivingMsBankBranch(request.getReceivingMsBankBranch());

View File

@@ -0,0 +1,39 @@
package com.cool.store.controller.webc;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.response.HomeTemplateResponse;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.HomeTemplateUserMappingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @Author: WangShuo
* @Date: 2025/04/08/13:47
* @Version 1.0
* @注释:
*/
@RestController
@RequestMapping("/mini/homeTemp")
@Api(value = "小程序首页模板", description = "小程序首页模板")
public class HomeTemplateController {
@Resource
private HomeTemplateUserMappingService homeTemplateUserMappingService;
@ApiOperation("获取用户小程序首页配置")
@GetMapping("/getUserMiniHomeTemp")
public ResponseResult<HomeTemplateResponse> getUserMiniHomeTemp() {
String partnerId = PartnerUserHolder.getUser().getPartnerId();
return ResponseResult.success(homeTemplateUserMappingService.getHomeTemplateByUserId(partnerId));
}
@ApiOperation("保存用户小程序首页配置")
@PostMapping("/saveUserMiniHomeTemp")
public ResponseResult<Integer> saveUserMiniHomeTemp(@RequestBody HomeTemplateResponse response){
return ResponseResult.success(homeTemplateUserMappingService.insertOrUpdateHomeTemplateUserMapping(response,PartnerUserHolder.getUser().getPartnerId()));
}
}