市场模块:事务管理模块

数据模块:1.续费模块;2.放心学模块
This commit is contained in:
DB 2023-12-15 09:16:56 +08:00
parent ea4513f266
commit b3e956b96c
47 changed files with 1848 additions and 41 deletions

View File

@ -0,0 +1,106 @@
package com.cpop.jambox.business.controller;
import com.mybatisflex.core.paginate.Page;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import com.cpop.jambox.business.entity.EasyLearnOrderDetail;
import com.cpop.jambox.business.service.EasyLearnOrderDetailService;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.Serializable;
import java.util.List;
/**
* 果酱-放心学订单详情表 控制层
*
* @author DB
* @since 2023-12-14
*/
@RestController
@Api(tags = "果酱-放心学订单详情表接口")
@RequestMapping("/easyLearnOrderDetail")
public class EasyLearnOrderDetailController {
@Autowired
private EasyLearnOrderDetailService easyLearnOrderDetailService;
/**
* 添加果酱-放心学订单详情表
*
* @param easyLearnOrderDetail 果酱-放心学订单详情表
* @return {@code true} 添加成功{@code false} 添加失败
*/
@PostMapping("/save")
@ApiOperation("保存果酱-放心学订单详情表")
public boolean save(@RequestBody @ApiParam("果酱-放心学订单详情表") EasyLearnOrderDetail easyLearnOrderDetail) {
return easyLearnOrderDetailService.save(easyLearnOrderDetail);
}
/**
* 根据主键删除果酱-放心学订单详情表
*
* @param id 主键
* @return {@code true} 删除成功{@code false} 删除失败
*/
@DeleteMapping("/remove/{id}")
@ApiOperation("根据主键果酱-放心学订单详情表")
public boolean remove(@PathVariable @ApiParam("果酱-放心学订单详情表主键") Serializable id) {
return easyLearnOrderDetailService.removeById(id);
}
/**
* 根据主键更新果酱-放心学订单详情表
*
* @param easyLearnOrderDetail 果酱-放心学订单详情表
* @return {@code true} 更新成功{@code false} 更新失败
*/
@PutMapping("/update")
@ApiOperation("根据主键更新果酱-放心学订单详情表")
public boolean update(@RequestBody @ApiParam("果酱-放心学订单详情表主键") EasyLearnOrderDetail easyLearnOrderDetail) {
return easyLearnOrderDetailService.updateById(easyLearnOrderDetail);
}
/**
* 查询所有果酱-放心学订单详情表
*
* @return 所有数据
*/
@GetMapping("/list")
@ApiOperation("查询所有果酱-放心学订单详情表")
public List<EasyLearnOrderDetail> list() {
return easyLearnOrderDetailService.list();
}
/**
* 根据果酱-放心学订单详情表主键获取详细信息
*
* @param id 果酱-放心学订单详情表主键
* @return 果酱-放心学订单详情表详情
*/
@GetMapping("/getInfo/{id}")
@ApiOperation("根据主键获取果酱-放心学订单详情表")
public EasyLearnOrderDetail getInfo(@PathVariable @ApiParam("果酱-放心学订单详情表主键") Serializable id) {
return easyLearnOrderDetailService.getById(id);
}
/**
* 分页查询果酱-放心学订单详情表
*
* @param page 分页对象
* @return 分页对象
*/
@GetMapping("/page")
@ApiOperation("分页查询果酱-放心学订单详情表")
public Page<EasyLearnOrderDetail> page(@ApiParam("分页信息") Page<EasyLearnOrderDetail> page) {
return easyLearnOrderDetailService.page(page);
}
}

View File

@ -0,0 +1,106 @@
package com.cpop.jambox.business.controller;
import com.mybatisflex.core.paginate.Page;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import com.cpop.jambox.business.entity.EasyLearnOrderExtend;
import com.cpop.jambox.business.service.EasyLearnOrderExtendService;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.Serializable;
import java.util.List;
/**
* 果酱-放心学-订单拓展 控制层
*
* @author DB
* @since 2023-12-14
*/
@RestController
@Api(tags = "果酱-放心学-订单拓展接口")
@RequestMapping("/easyLearnOrderExtend")
public class EasyLearnOrderExtendController {
@Autowired
private EasyLearnOrderExtendService easyLearnOrderExtendService;
/**
* 添加果酱-放心学-订单拓展
*
* @param easyLearnOrderExtend 果酱-放心学-订单拓展
* @return {@code true} 添加成功{@code false} 添加失败
*/
@PostMapping("/save")
@ApiOperation("保存果酱-放心学-订单拓展")
public boolean save(@RequestBody @ApiParam("果酱-放心学-订单拓展") EasyLearnOrderExtend easyLearnOrderExtend) {
return easyLearnOrderExtendService.save(easyLearnOrderExtend);
}
/**
* 根据主键删除果酱-放心学-订单拓展
*
* @param id 主键
* @return {@code true} 删除成功{@code false} 删除失败
*/
@DeleteMapping("/remove/{id}")
@ApiOperation("根据主键果酱-放心学-订单拓展")
public boolean remove(@PathVariable @ApiParam("果酱-放心学-订单拓展主键") Serializable id) {
return easyLearnOrderExtendService.removeById(id);
}
/**
* 根据主键更新果酱-放心学-订单拓展
*
* @param easyLearnOrderExtend 果酱-放心学-订单拓展
* @return {@code true} 更新成功{@code false} 更新失败
*/
@PutMapping("/update")
@ApiOperation("根据主键更新果酱-放心学-订单拓展")
public boolean update(@RequestBody @ApiParam("果酱-放心学-订单拓展主键") EasyLearnOrderExtend easyLearnOrderExtend) {
return easyLearnOrderExtendService.updateById(easyLearnOrderExtend);
}
/**
* 查询所有果酱-放心学-订单拓展
*
* @return 所有数据
*/
@GetMapping("/list")
@ApiOperation("查询所有果酱-放心学-订单拓展")
public List<EasyLearnOrderExtend> list() {
return easyLearnOrderExtendService.list();
}
/**
* 根据果酱-放心学-订单拓展主键获取详细信息
*
* @param id 果酱-放心学-订单拓展主键
* @return 果酱-放心学-订单拓展详情
*/
@GetMapping("/getInfo/{id}")
@ApiOperation("根据主键获取果酱-放心学-订单拓展")
public EasyLearnOrderExtend getInfo(@PathVariable @ApiParam("果酱-放心学-订单拓展主键") Serializable id) {
return easyLearnOrderExtendService.getById(id);
}
/**
* 分页查询果酱-放心学-订单拓展
*
* @param page 分页对象
* @return 分页对象
*/
@GetMapping("/page")
@ApiOperation("分页查询果酱-放心学-订单拓展")
public Page<EasyLearnOrderExtend> page(@ApiParam("分页信息") Page<EasyLearnOrderExtend> page) {
return easyLearnOrderExtendService.page(page);
}
}

View File

@ -0,0 +1,106 @@
package com.cpop.jambox.business.controller;
import com.mybatisflex.core.paginate.Page;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import com.cpop.jambox.business.entity.EasyLearnOrdre;
import com.cpop.jambox.business.service.EasyLearnOrdreService;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.Serializable;
import java.util.List;
/**
* 果酱-放心学订单表 控制层
*
* @author DB
* @since 2023-12-14
*/
@RestController
@Api(tags = "果酱-放心学订单表接口")
@RequestMapping("/easyLearnOrdre")
public class EasyLearnOrdreController {
@Autowired
private EasyLearnOrdreService easyLearnOrdreService;
/**
* 添加果酱-放心学订单表
*
* @param easyLearnOrdre 果酱-放心学订单表
* @return {@code true} 添加成功{@code false} 添加失败
*/
@PostMapping("/save")
@ApiOperation("保存果酱-放心学订单表")
public boolean save(@RequestBody @ApiParam("果酱-放心学订单表") EasyLearnOrdre easyLearnOrdre) {
return easyLearnOrdreService.save(easyLearnOrdre);
}
/**
* 根据主键删除果酱-放心学订单表
*
* @param id 主键
* @return {@code true} 删除成功{@code false} 删除失败
*/
@DeleteMapping("/remove/{id}")
@ApiOperation("根据主键果酱-放心学订单表")
public boolean remove(@PathVariable @ApiParam("果酱-放心学订单表主键") Serializable id) {
return easyLearnOrdreService.removeById(id);
}
/**
* 根据主键更新果酱-放心学订单表
*
* @param easyLearnOrdre 果酱-放心学订单表
* @return {@code true} 更新成功{@code false} 更新失败
*/
@PutMapping("/update")
@ApiOperation("根据主键更新果酱-放心学订单表")
public boolean update(@RequestBody @ApiParam("果酱-放心学订单表主键") EasyLearnOrdre easyLearnOrdre) {
return easyLearnOrdreService.updateById(easyLearnOrdre);
}
/**
* 查询所有果酱-放心学订单表
*
* @return 所有数据
*/
@GetMapping("/list")
@ApiOperation("查询所有果酱-放心学订单表")
public List<EasyLearnOrdre> list() {
return easyLearnOrdreService.list();
}
/**
* 根据果酱-放心学订单表主键获取详细信息
*
* @param id 果酱-放心学订单表主键
* @return 果酱-放心学订单表详情
*/
@GetMapping("/getInfo/{id}")
@ApiOperation("根据主键获取果酱-放心学订单表")
public EasyLearnOrdre getInfo(@PathVariable @ApiParam("果酱-放心学订单表主键") Serializable id) {
return easyLearnOrdreService.getById(id);
}
/**
* 分页查询果酱-放心学订单表
*
* @param page 分页对象
* @return 分页对象
*/
@GetMapping("/page")
@ApiOperation("分页查询果酱-放心学订单表")
public Page<EasyLearnOrdre> page(@ApiParam("分页信息") Page<EasyLearnOrdre> page) {
return easyLearnOrdreService.page(page);
}
}

View File

@ -0,0 +1,74 @@
package com.cpop.jambox.business.entity;
import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* 果酱-放心学订单详情表 实体类
*
* @author DB
* @since 2023-12-14
*/
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_j_easy_learn_order_detail", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class EasyLearnOrderDetail extends BaseEntity implements Serializable {
/**
* 主键
*/
@Id
private String id;
/**
* 放心学订单id
*/
@Id
private String orderId;
/**
* 外部订单号
*/
private String outOrderNo;
/**
* 期号
*/
private Integer periodNo;
/**
* 金额
*/
private BigDecimal amount;
/**
* 详情描述
*/
private String detailDesc;
/**
* 逻辑删除0否1是
*/
@Column(isLogicDelete = true)
private Boolean isDelete;
}

View File

@ -0,0 +1,65 @@
package com.cpop.jambox.business.entity;
import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Date;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* 果酱-放心学-订单拓展 实体类
*
* @author DB
* @since 2023-12-14
*/
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_j_easy_learn_order_extend", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class EasyLearnOrderExtend extends BaseEntity implements Serializable {
/**
* 放心学订单id
*/
@Id
private String orderId;
/**
* 期数
*/
private Integer periodNumber;
/**
* 下期还款日
*/
private Date nextRepaymentDate;
/**
* 下期还款金额
*/
private BigDecimal nextRepaymentAmount;
/**
* 子商户id
*/
private String subMchId;
/**
* 逻辑删除0否1是
*/
@Column(isLogicDelete = true)
private Boolean isDelete;
}

View File

@ -0,0 +1,98 @@
package com.cpop.jambox.business.entity;
import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* 果酱-放心学订单表 实体类
*
* @author DB
* @since 2023-12-14
*/
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_j_easy_learn_ordre", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class EasyLearnOrdre extends BaseEntity implements Serializable {
/**
* 主键
*/
@Id
private String id;
/**
* 外部订单号
*/
private String outOrderNo;
/**
* 品牌id
*/
private String brandId;
/**
* 校区id
*/
private String storeId;
/**
* 客户名
*/
private String customerName;
/**
* 客户电话
*/
private String customerPhone;
/**
* 产品/课卡id
*/
private String productId;
/**
* 总金额
*/
private BigDecimal totalAmount;
/**
* 总支付金额
*/
private BigDecimal totalPayAmount;
/**
* 员工id
*/
private String staffId;
/**
* 订单类型(0先学后付;1月付;2微信支付;3数币支付;4机构会员)
*/
private Integer orderType;
/**
* 逻辑删除0否1是
*/
@Column(isLogicDelete = true)
private Boolean isDelete;
}

View File

@ -0,0 +1,14 @@
package com.cpop.jambox.business.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cpop.jambox.business.entity.EasyLearnOrderDetail;
/**
* 果酱-放心学订单详情表 映射层
*
* @author DB
* @since 2023-12-14
*/
public interface EasyLearnOrderDetailMapper extends BaseMapper<EasyLearnOrderDetail> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.jambox.business.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cpop.jambox.business.entity.EasyLearnOrderExtend;
/**
* 果酱-放心学-订单拓展 映射层
*
* @author DB
* @since 2023-12-14
*/
public interface EasyLearnOrderExtendMapper extends BaseMapper<EasyLearnOrderExtend> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.jambox.business.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cpop.jambox.business.entity.EasyLearnOrdre;
/**
* 果酱-放心学订单表 映射层
*
* @author DB
* @since 2023-12-14
*/
public interface EasyLearnOrdreMapper extends BaseMapper<EasyLearnOrdre> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.jambox.business.service;
import com.mybatisflex.core.service.IService;
import com.cpop.jambox.business.entity.EasyLearnOrderDetail;
/**
* 果酱-放心学订单详情表 服务层
*
* @author DB
* @since 2023-12-14
*/
public interface EasyLearnOrderDetailService extends IService<EasyLearnOrderDetail> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.jambox.business.service;
import com.mybatisflex.core.service.IService;
import com.cpop.jambox.business.entity.EasyLearnOrderExtend;
/**
* 果酱-放心学-订单拓展 服务层
*
* @author DB
* @since 2023-12-14
*/
public interface EasyLearnOrderExtendService extends IService<EasyLearnOrderExtend> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.jambox.business.service;
import com.mybatisflex.core.service.IService;
import com.cpop.jambox.business.entity.EasyLearnOrdre;
/**
* 果酱-放心学订单表 服务层
*
* @author DB
* @since 2023-12-14
*/
public interface EasyLearnOrdreService extends IService<EasyLearnOrdre> {
}

View File

@ -0,0 +1,18 @@
package com.cpop.jambox.business.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cpop.jambox.business.entity.EasyLearnOrderDetail;
import com.cpop.jambox.business.mapper.EasyLearnOrderDetailMapper;
import com.cpop.jambox.business.service.EasyLearnOrderDetailService;
import org.springframework.stereotype.Service;
/**
* 果酱-放心学订单详情表 服务层实现
*
* @author DB
* @since 2023-12-14
*/
@Service("easyLearnOrderDetailService")
public class EasyLearnOrderDetailServiceImpl extends ServiceImpl<EasyLearnOrderDetailMapper, EasyLearnOrderDetail> implements EasyLearnOrderDetailService {
}

View File

@ -0,0 +1,18 @@
package com.cpop.jambox.business.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cpop.jambox.business.entity.EasyLearnOrderExtend;
import com.cpop.jambox.business.mapper.EasyLearnOrderExtendMapper;
import com.cpop.jambox.business.service.EasyLearnOrderExtendService;
import org.springframework.stereotype.Service;
/**
* 果酱-放心学-订单拓展 服务层实现
*
* @author DB
* @since 2023-12-14
*/
@Service("easyLearnOrderExtendService")
public class EasyLearnOrderExtendServiceImpl extends ServiceImpl<EasyLearnOrderExtendMapper, EasyLearnOrderExtend> implements EasyLearnOrderExtendService {
}

View File

@ -0,0 +1,18 @@
package com.cpop.jambox.business.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cpop.jambox.business.entity.EasyLearnOrdre;
import com.cpop.jambox.business.mapper.EasyLearnOrdreMapper;
import com.cpop.jambox.business.service.EasyLearnOrdreService;
import org.springframework.stereotype.Service;
/**
* 果酱-放心学订单表 服务层实现
*
* @author DB
* @since 2023-12-14
*/
@Service("easyLearnOrdreService")
public class EasyLearnOrdreServiceImpl extends ServiceImpl<EasyLearnOrdreMapper, EasyLearnOrdre> implements EasyLearnOrdreService {
}

View File

@ -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.cpop.jambox.business.mapper.EasyLearnOrderDetailMapper">
</mapper>

View File

@ -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.cpop.jambox.business.mapper.EasyLearnOrderExtendMapper">
</mapper>

View File

@ -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.cpop.jambox.business.mapper.EasyLearnOrdreMapper">
</mapper>

View File

@ -2,35 +2,38 @@ package com.cpop.oam.web;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import com.cpop.common.utils.StringUtils;
import com.cpop.common.utils.bean.BeanUtils;
import com.cpop.core.base.enums.SourceType;
import com.cpop.core.utils.SpringUtils;
import com.cpop.jambox.business.entity.BrandExtend;
import com.cpop.jambox.business.entity.EasyLearnOrdre;
import com.cpop.jambox.business.entity.StoreExtend;
import com.cpop.jambox.business.service.BrandExtendService;
import com.cpop.jambox.business.service.EasyLearnOrdreService;
import com.cpop.jambox.business.service.StoreExtendService;
import com.cpop.oam.business.entity.BrandManager;
import com.cpop.oam.business.entity.BrandManagerStore;
import com.cpop.oam.business.service.BrandManagerService;
import com.cpop.oam.business.service.BrandManagerStoreService;
import com.cpop.system.business.entity.Brand;
import com.cpop.system.business.entity.Store;
import com.cpop.system.business.entity.StoreLicense;
import com.cpop.system.business.entity.*;
import com.cpop.system.business.mapper.StoreMapper;
import com.cpop.system.business.service.BrandService;
import com.cpop.system.business.service.StoreLicenseService;
import com.cpop.system.business.service.StoreService;
import com.cpop.system.business.service.*;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.core.FlexGlobalConfig;
import com.mybatisflex.core.datasource.DataSourceKey;
import com.mybatisflex.core.datasource.FlexDataSource;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.row.*;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Data;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
@ -52,6 +55,7 @@ import static com.cpop.system.business.entity.table.StoreTableDef.STORE;
*/
@Slf4j
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles(profiles = {"prod", "core"})
public class CpopImportTests {
/**
@ -151,6 +155,7 @@ public class CpopImportTests {
.select("tmi.charge_name as personCharge")
.select("tmi.charge_phone as phone")
.select("tmi.address as storeAddr")
.select("tmi.test as isTest")
.select("ifnull(date_format(tsm.end_time,'%Y-%m-%d'),null) as expireDate")
.select("if(tmi.clue_id is null,0,1) as haveCounselor")
.select("if(of.activation is null,0,of.activation) as haveActive")
@ -234,7 +239,7 @@ public class CpopImportTests {
List<String> storeCloudIds;
try {
DataSourceKey.use("jambox");
List<Row> rowList = DbChain.table("t_mechanism_info").select("store_id").where("test = 1").list();
List<Row> rowList = DbChain.table("t_mechanism_info").select("store_id").where("test = 0").and("deleted = 1").list();
storeCloudIds = RowUtil.toEntityList(rowList, String.class);
//批量修改
} finally {
@ -243,7 +248,7 @@ public class CpopImportTests {
if (storeCloudIds != null) {
Set<String> storeSet = SpringUtils.getBean(StoreExtendService.class).queryChain().where(STORE_EXTEND.STORE_CLOUD_ID.in(storeCloudIds)).list()
.stream().map(StoreExtend::getId).collect(Collectors.toSet());
SpringUtils.getBean(StoreService.class).updateChain().set(STORE.IS_TEST,true).where(STORE.ID.in(storeSet)).update();
SpringUtils.getBean(StoreService.class).updateChain().set(STORE.IS_TEST,false).where(STORE.ID.in(storeSet)).update();
}
}
@ -279,6 +284,205 @@ public class CpopImportTests {
SpringUtils.getBean(StoreLicenseService.class).saveBatch(licenseList);
}
/**
* 批量修改校区创建时间
* @author DB
* @since 2023/12/13
*/
@Test
public void batchUpdateStoreCreateTime() {
List<Row> rowList;
try {
DataSourceKey.use("jambox");
rowList = DbChain.table("t_mechanism_info").select("store_id as storeCloudId", "creation_time as createTime")
.and("deleted = 1")
.list();
} finally {
DataSourceKey.clear();
}
//获取所有校区数据
StoreExtendService storeExtendService = SpringUtils.getBean(StoreExtendService.class);
Map<String, String> storeExtendMap = storeExtendService.list().stream().collect(Collectors.toMap(StoreExtend::getStoreCloudId, StoreExtend::getStoreId));
rowList.forEach(item -> {
item.set("id", storeExtendMap.get(item.getString("storeCloudId")));
});
List<Store> storeList = RowUtil.toEntityList(rowList, Store.class).stream().filter(item -> item.getId() != null).collect(Collectors.toList());
SpringUtils.getBean(StoreService.class).updateBatch(storeList);
}
/**
* 导入校区签约数据
* @author DB
* @since 2023/12/13
*/
@Test
public void importStoreSignData() {
List<Row> rowList;
try {
DataSourceKey.use("jambox");
rowList = DbChain.table("t_mechanism_info")
.select("tmi.store_id as storeCloudId","tmi.clue_id")
.select("date_format(tsm.end_time,'%Y-%m-%d') as expireDate")
.from("t_mechanism_info").as("tmi")
.leftJoin("t_signContract_mechanism").as("tsm").on("tsm.store_id = tmi.store_id")
.and("tmi.deleted = 1")
.list();
} finally {
DataSourceKey.clear();
}
//获取校区
Map<String, String> storeMap = SpringUtils.getBean(StoreExtendService.class).list().stream().collect(Collectors.toMap(StoreExtend::getStoreCloudId, StoreExtend::getStoreId));
rowList.forEach(item->{
item.set("storeId",storeMap.get(item.getString("storeCloudId")));
});
List<StoreSign> entityList = RowUtil.toEntityList(rowList, StoreSign.class);
Set<StoreSign> filterStoreList = entityList.stream().filter(item -> item.getStoreId() != null && item.getExpireDate() != null).collect(Collectors.toSet());
SpringUtils.getBean(StoreSignService.class).saveBatch(filterStoreList);
}
/**
* 导入校区续费
* @author DB
* @since 2023/12/14
*/
@Test
public void importStoreRenew() {
List<Row> rowList;
try {
DataSourceKey.use("jambox");
rowList = DbChain.table("OAM_clue_renew")
.select("tmi.store_id as storeCloudId")
.select("ocr.remarks as renewDesc","ocr.price as renewAmount","date_format(ocr.creation_time,'%Y-%m-%d') as renewDate")
.from("OAM_clue_renew").as("ocr")
.leftJoin("t_mechanism_info").as("tmi").on("tmi.mechanism_id = ocr.mechanism_id")
.list();
} finally {
DataSourceKey.clear();
}
getTestDynamicDataSource();
try {
DataSourceKey.use("dev");
//获取校区
Map<String, String> storeMap = SpringUtils.getBean(StoreExtendService.class).list().stream().collect(Collectors.toMap(StoreExtend::getStoreCloudId, StoreExtend::getStoreId));
rowList.forEach(item->{
item.set("storeId",storeMap.get(item.getString("storeCloudId")));
});
List<StoreRenew> entityList = RowUtil.toEntityList(rowList, StoreRenew.class);
Set<StoreRenew> filterStoreList = entityList.stream().filter(item -> item.getStoreId() != null ).collect(Collectors.toSet());
SpringUtils.getBean(StoreRenewService.class).saveBatch(filterStoreList);
} finally {
DataSourceKey.clear();
}
}
/**
* 导入旧数币订单数据
* @author DB
* @since 2023/12/14
*/
@Test
public void importOldSudaOrderData() {
List<Row> rowList;
try {
//数币订单
DataSourceKey.use("jambox");
rowList = DbChain.table("j_commodity_ticket")
.select("tbi.brand_id as brandCloudId","jct.store_id as storeCloudId","jct.wx_order_id as outOrderNo")
.select("jct.name as customerName","jct.phone as customerPhone")
.select("jct.price as totalAmount","jct.price as totalPayAmount")
.from("j_commodity_ticket").as("jct")
.leftJoin("t_brand_info").as("tbi").on("tbi.id = jct.brand_id")
.where("jct.deleted = 1")
.and("jct.pay_status = 'PAY'")
.and("jct.is_suda = 1")
.list();
} finally {
DataSourceKey.clear();
}
getTestDynamicDataSource();
try {
//获取校区
Map<String, String> storeMap = SpringUtils.getBean(StoreExtendService.class).list().stream().collect(Collectors.toMap(StoreExtend::getStoreCloudId, StoreExtend::getStoreId));
Map<String, String> brandMap = SpringUtils.getBean(BrandExtendService.class).list().stream().collect(Collectors.toMap(BrandExtend::getBrandCloudId, BrandExtend::getBrandId));
rowList.forEach(item->{
item.set("orderType",3);
item.set("brandId",brandMap.get(item.getString("brandCloudId")));
item.set("storeId",storeMap.get(item.getString("storeCloudId")));
});
DataSourceKey.use("dev");
List<EasyLearnOrdre> entityList = RowUtil.toEntityList(rowList, EasyLearnOrdre.class);
SpringUtils.getBean(EasyLearnOrdreService.class).saveBatch(entityList);
}finally {
DataSourceKey.clear();
}
}
/**
* 导入旧微信支付数据
* @author DB
* @since 2023/12/14
*/
@Test
public void importOldWxPayOrderData() {
List<Row> rowList;
try {
//数币订单
DataSourceKey.use("jambox");
rowList = DbChain.table("j_commodity_ticket")
.select("tbi.brand_id as brandCloudId","jct.store_id as storeCloudId","jct.wx_order_id as outOrderNo")
.select("jct.name as customerName","jct.phone as customerPhone")
.select("jct.price as totalAmount","jct.price as totalPayAmount")
.select("jwpp.is_month as isMonth","jwpp.class_hour as periodNumber","jwpp.sub_merch_id as subMchId")
.from("j_commodity_ticket").as("jct")
.leftJoin("t_brand_info").as("tbi").on("tbi.id = jct.brand_id")
.leftJoin("j_wechat_pay_plan").as("jwpp").on("jwpp.template_id = jct.commodity_id")
.where("jct.deleted = 1")
.and("jct.pay_status = 'PAY'")
.and("jct.ticket_type = 1")
.list();
} finally {
DataSourceKey.clear();
}
System.out.println(JSON.toJSONString(rowList));
/*getTestDynamicDataSource();
try {
//获取校区
Map<String, String> storeMap = SpringUtils.getBean(StoreExtendService.class).list().stream().collect(Collectors.toMap(StoreExtend::getStoreCloudId, StoreExtend::getStoreId));
Map<String, String> brandMap = SpringUtils.getBean(BrandExtendService.class).list().stream().collect(Collectors.toMap(BrandExtend::getBrandCloudId, BrandExtend::getBrandId));
rowList.forEach(item->{
item.set("orderType",3);
item.set("brandId",brandMap.get(item.getString("brandCloudId")));
item.set("storeId",storeMap.get(item.getString("storeCloudId")));
});
DataSourceKey.use("dev");
List<EasyLearnOrdre> entityList = RowUtil.toEntityList(rowList, EasyLearnOrdre.class);
SpringUtils.getBean(EasyLearnOrdreService.class).saveBatch(entityList);
}finally {
DataSourceKey.clear();
}*/
}
private static final String URL = "jdbc:mysql://localhost:3306/cpop_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
/**
* 数据库用户名
*/
private static final String USERNAME = "root";
/**
* 数据库密码
*/
private static final String PASSWORD = "root";
private void getTestDynamicDataSource() {
FlexDataSource flexDataSource = FlexGlobalConfig.getDefaultConfig().getDataSource();
//新的数据源
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
flexDataSource.addDataSource("dev", dataSource);
}
@Data
private class JsonBrandManager implements Serializable {

View File

@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
/**
* @author DB
* @version 1.0.0
@ -39,6 +41,7 @@ public class BusinessDisposeBo {
/**
* 事务id
*/
@ApiModelProperty(value = "事务id")
@NotBlank(message = "不能为空")
@ApiModelProperty(value = "事务id", required = true)
private String businessId;
}

View File

@ -1,12 +1,15 @@
package com.cpop.oam.business.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.util.List;
@ -47,9 +50,9 @@ public class BusinessDistributeBo {
/**
* 到期时间
*/
@NotNull(message = "到期时间不能为空")
@ApiModelProperty(value = "到期时间")
private LocalDateTime endTime;
@NotEmpty(message = "开始结束时间不能为空")
@ApiModelProperty(value = "开始结束")
private List<LocalDate> startAndEnd;
/**
* 备注
*/
@ -60,15 +63,9 @@ public class BusinessDistributeBo {
*/
@ApiModelProperty(value = "签约列表")
private List<Sign> sign;
/**
* 开始时间
*/
@NotNull(message = "开始时间不能为空")
@ApiModelProperty(value = "开始时间")
private LocalDateTime startTime;
@Data
public class ButtJoint {
public static class ButtJoint {
/**
* 文档地址
*/
@ -82,7 +79,7 @@ public class BusinessDistributeBo {
}
@Data
public class Sign {
public static class Sign {
/**
* 接收员工id
*/

View File

@ -0,0 +1,39 @@
package com.cpop.oam.business.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
/**
* @author DB
* @version 1.0.0
* @since 2023-12-14 11:21
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "BusinessRemoveBo对象",description = "事务删除对象")
public class BusinessRemoveBo {
/**
* 事务详情id
*/
@ApiModelProperty(value = "事务详情id")
private String id;
/**
* 校区id
*/
@NotBlank(message = "校区id不能为空")
@ApiModelProperty(value = "校区id",required = true)
private String storeId;
/**
* 事务id
*/
@NotBlank(message = "事务id不能为空")
@ApiModelProperty(value = "事务id",required = true)
private String businessId;
}

View File

@ -6,6 +6,7 @@ import com.cpop.core.utils.SpringUtils;
import com.cpop.oam.business.bo.BusinessDisposeBo;
import com.cpop.oam.business.bo.BusinessDistributeBo;
import com.cpop.oam.business.bo.BusinessInfoPageBo;
import com.cpop.oam.business.bo.BusinessRemoveBo;
import com.cpop.oam.business.dto.BusinessDistributeDto;
import com.cpop.oam.business.dto.DataImportDto;
import com.cpop.oam.business.entity.Staff;
@ -147,4 +148,17 @@ public class BusinessController {
return R.ok();
}
/**
* 事务详情删除
* @author DB
* @since 2023/12/14
* @return R<Void>
*/
@DeleteMapping("/businessRemove")
@ApiOperation("事务详情删除")
public R<Void> businessRemove(@Validated @RequestBody BusinessRemoveBo bo) {
businessService.businessRemove(bo);
return R.ok();
}
}

View File

@ -7,6 +7,7 @@ import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -52,12 +53,12 @@ public class Business extends BaseEntity implements Serializable {
/**
* 开始时间
*/
private LocalDateTime startTime;
private LocalDate startDate;
/**
* 结束时间
*/
private LocalDateTime endTime;
private LocalDate endDate;
/**
* 分发人id

View File

@ -3,6 +3,7 @@ package com.cpop.oam.business.service;
import com.cpop.oam.business.bo.BusinessDisposeBo;
import com.cpop.oam.business.bo.BusinessDistributeBo;
import com.cpop.oam.business.bo.BusinessInfoPageBo;
import com.cpop.oam.business.bo.BusinessRemoveBo;
import com.cpop.oam.business.vo.BusinessInfoPageVo;
import com.cpop.oam.business.vo.BusinessPageVo;
import com.mybatisflex.core.paginate.Page;
@ -50,4 +51,12 @@ public interface BusinessService extends IService<Business> {
* @param bo 请求
*/
void businessDispose(BusinessDisposeBo bo);
/**
* 事务详情删除
* @author DB
* @since 2023/12/14
* @param bo 删除参数
*/
void businessRemove(BusinessRemoveBo bo);
}

View File

@ -16,6 +16,7 @@ import com.cpop.core.utils.sql.SqlUtils;
import com.cpop.oam.business.bo.BusinessDisposeBo;
import com.cpop.oam.business.bo.BusinessDistributeBo;
import com.cpop.oam.business.bo.BusinessInfoPageBo;
import com.cpop.oam.business.bo.BusinessRemoveBo;
import com.cpop.oam.business.dto.BusinessDistributeDto;
import com.cpop.oam.business.entity.BusinessDetail;
import com.cpop.oam.business.entity.BusinessStaff;
@ -73,7 +74,7 @@ public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business> i
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
return this.mapper.paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()),
QueryWrapper.create()
.select(BUSINESS.ID, BUSINESS.BUSINESS_LEVEL, BUSINESS.BUSINESS_TYPE, BUSINESS.DESC, BUSINESS.START_TIME, BUSINESS.END_TIME, BUSINESS.ALL_SURPLUS_QUANTITY, BUSINESS.REMARK, BUSINESS.STATUS)
.select(BUSINESS.ID, BUSINESS.BUSINESS_LEVEL, BUSINESS.BUSINESS_TYPE, BUSINESS.DESC, BUSINESS.START_DATE, BUSINESS.END_DATE, BUSINESS.ALL_SURPLUS_QUANTITY, BUSINESS.REMARK, BUSINESS.STATUS)
//员工表
.select(STAFF.NAME.as(BusinessPageVo::getInitiatorName))
.leftJoin(STAFF).on(STAFF.ID.eq(BUSINESS.INITIATOR_ID))
@ -92,7 +93,9 @@ public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business> i
public void businessDistribute(BusinessDistributeBo bo) {
Business business = BeanUtils.mapToClass(bo, Business.class);
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
business.setInitiatorId(loginUserInfo.getString("id"));
business.setInitiatorId(loginUserInfo.getString("id"))
.setStartDate(bo.getStartAndEnd().get(0))
.setEndDate(bo.getStartAndEnd().get(1));
this.save(business);
Integer allSurplusQuantity;
//机构对接
@ -236,16 +239,17 @@ public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business> i
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
return SpringUtils.getBean(StoreService.class).getMapper().paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()),
queryWrapper
.select(BUSINESS_DETAIL.ID, BUSINESS_DETAIL.DETAIL_STATUS, BUSINESS_DETAIL.DETAIL_DESC, BUSINESS_DETAIL.DETAIL_RECORD_TIME)
.select(BUSINESS_DETAIL.ID,BUSINESS_DETAIL.BUSINESS_ID, BUSINESS_DETAIL.DETAIL_STATUS, BUSINESS_DETAIL.DETAIL_DESC, BUSINESS_DETAIL.DETAIL_RECORD_TIME)
//品牌
.select(BRAND.BRAND_NAME)
//校区
.select(STORE.STORE_NAME, STORE.PERSON_CHARGE, STORE.PHONE)
.select(STORE.STORE_NAME, STORE.PERSON_CHARGE, STORE.PHONE, STORE.ID.as(BusinessInfoPageVo::getStoreId))
//营业执照
.select(STORE_LICENSE.LICENSE_NAME, STORE_LICENSE.LICENSE_USER_NAME, STORE_LICENSE.LICENSE_ADDR)
.leftJoin(BRAND).on(BRAND.ID.eq(STORE.BRAND_ID))
.leftJoin(STORE_LICENSE).on(STORE_LICENSE.STORE_ID.eq(STORE.ID))
.leftJoin(BUSINESS_DETAIL).on(BUSINESS_DETAIL.STORE_ID.eq(STORE.ID))
.leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.BUSINESS_ID.eq(BUSINESS_DETAIL.BUSINESS_ID))
.leftJoin(STAFF).on(STAFF.ID.eq(BUSINESS_STAFF.STAFF_ID))
//品牌或校区名模糊查询
.and(BRAND.BRAND_NAME.like(bo.getBrandOrStore()).or(STORE.STORE_NAME.like(bo.getBrandOrStore())))
@ -284,7 +288,7 @@ public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business> i
//品牌
.select(BRAND.BRAND_NAME)
//校区
.select(STORE.STORE_NAME, STORE.PERSON_CHARGE, STORE.PHONE)
.select(STORE.STORE_NAME, STORE.PERSON_CHARGE, STORE.PHONE, STORE.ID.as(BusinessInfoPageVo::getStoreId))
//营业执照
.select(STORE_LICENSE.LICENSE_NAME, STORE_LICENSE.LICENSE_USER_NAME, STORE_LICENSE.LICENSE_ADDR)
.leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.BUSINESS_ID.eq(BUSINESS_DETAIL.BUSINESS_ID))
@ -342,4 +346,41 @@ public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business> i
.update();
}
}
/**
* 事务详情删除
* @author DB
* @since 2023/12/14
* @param bo 删除参数
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void businessRemove(BusinessRemoveBo bo) {
Business business = this.getById(bo.getBusinessId());
if (bo.getId() == null) {
//将校区改为测试校区
SpringUtils.getBean(StoreService.class).updateChain()
.set(STORE.IS_TEST, true)
.where(STORE.ID.eq(bo.getStoreId()))
.update();
} else {
BusinessDetailService businessDetailService = SpringUtils.getBean(BusinessDetailService.class);
BusinessDetail businessDetail = businessDetailService.getById(bo.getId());
//机构签约
if (business.getBusinessType() == 1) {
//将校区改为测试校区
SpringUtils.getBean(StoreService.class).updateChain()
.set(STORE.IS_TEST, true)
.where(STORE.ID.eq(businessDetail.getStoreId()))
.update();
}
businessDetailService.removeById(bo.getId());
}
//所有任务都完成
if (business.getAllSurplusQuantity() - 1 == 0) {
business.setStatus(1);
}
business.setAllSurplusQuantity(business.getAllSurplusQuantity() - 1);
this.updateById(business);
}
}

View File

@ -74,6 +74,13 @@ public class BusinessInfoPageVo {
*/
@ApiModelProperty(value = "校区名")
private String storeName;
/**
* 校区Id
*/
@ApiModelProperty(value = "校区Id")
private String storeId;
/**
* 事务详情id
*/

View File

@ -1,10 +1,12 @@
package com.cpop.oam.business.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
@ -42,7 +44,8 @@ public class BusinessPageVo {
* 结束时间
*/
@ApiModelProperty(value = "结束时间")
private LocalDateTime endTime;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate endDate;
/**
* 事务id
*/
@ -61,8 +64,9 @@ public class BusinessPageVo {
/**
* 开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "开始时间")
private OffsetDateTime startTime;
private LocalDate startDate;
/**
* 状态状态0:进行中;1:已完成
*/

View File

@ -0,0 +1,45 @@
package com.cpop.system.business.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.util.List;
/**
* @author DB
* @version 1.0.0
* @since 2023-12-14 9:51
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "校区续费分页请求", description = "校区续费分页请求")
public class StoreRenewPageBo {
/**
* 校区地址或校区名模糊查询
*/
@ApiModelProperty(value = "校区地址或校区名模糊查询")
private String addrOrName;
/**
* 品牌或校区名模糊查询
*/
@ApiModelProperty(value = "品牌或校区名模糊查询")
private String brandOrStore;
/**
* 0待续费1已续费2已流失
*/
@NotNull(message = "续费状态不能为空")
@ApiModelProperty(value = "续费状态",required = true)
private Integer renewStatus;
/**
* 续费结束日期
*/
@ApiModelProperty(value = "续费结束日期")
private List<LocalDate> renewStartAndEnd;
}

View File

@ -0,0 +1,43 @@
package com.cpop.system.business.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
/**
* @author DB
* @version 1.0.0
* @since 2023-12-14 16:22
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "校区续费导出请求", description = "校区续费导出请求")
public class StoreRenewXmlBo {
/**
* 校区地址或校区名模糊查询
*/
@ApiModelProperty(value = "校区地址或校区名模糊查询")
private String addrOrName;
/**
* 品牌或校区名模糊查询
*/
@ApiModelProperty(value = "品牌或校区名模糊查询")
private String brandOrStore;
/**
* 续费结束日期
*/
@ApiModelProperty(value = "续费结束日期")
private LocalDate renewStartDate;
/**
* 续费开始日期
*/
@ApiModelProperty(value = "续费开始日期")
private LocalDate renewEndDate;
}

View File

@ -0,0 +1,33 @@
package com.cpop.system.business.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
/**
* @author DB
* @version 1.0.0
* @since 2023-12-14 10:58
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "校区/店铺流失请求", description = "校区/店铺请求")
public class StoreRunOffBo {
/**
* 主键
*/
@NotBlank(message = "主键不能为空")
@ApiModelProperty(value = "主键",required = true)
private String id;
/**
* 流失原因
*/
@NotBlank(message = "流失原因不能为空")
@ApiModelProperty(value = "流失原因",required = true)
private String runOffReason;
}

View File

@ -0,0 +1,85 @@
package com.cpop.system.business.controller;
import com.alibaba.excel.EasyExcel;
import com.cpop.core.base.R;
import com.cpop.system.business.bo.StoreRenewPageBo;
import com.cpop.system.business.bo.StoreRenewXmlBo;
import com.cpop.system.business.bo.StoreRunOffBo;
import com.cpop.system.business.dto.StoreRenewDto;
import com.cpop.system.business.vo.StoreRenewPageVo;
import com.mybatisflex.core.paginate.Page;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import com.cpop.system.business.service.StoreSignService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
/**
* 校区-签约表 控制层
*
* @author DB
* @since 2023-12-13
*/
@RestController
@Api(tags = "校区签约续费接口")
@RequestMapping("/storeSign")
public class StoreSignController {
@Autowired
private StoreSignService storeSignService;
/**
* 分页查询校区续费
* @author DB
* @since 2023/12/14
* @param bo 请求参数
* @return Page<StoreSign>
*/
@GetMapping("/getStoreRenewPage")
@ApiOperation("分页查询校区续费")
public R<Page<StoreRenewPageVo>> getStoreRenewPage(@ApiParam("分页信息") @Validated StoreRenewPageBo bo) {
Page<StoreRenewPageVo> page = storeSignService.getStoreRenewPage(bo);
return R.ok(page);
}
/**
* 机构/店铺流失
* @author DB
* @since 2023/12/14
* @param bo 请求参数
* @return R<Void>
*/
@PostMapping("/runOff")
@ApiOperation("机构流失")
public R<Void> runOff(@RequestBody @ApiParam("分页信息") @Validated StoreRunOffBo bo) {
storeSignService.runOff(bo);
return R.ok();
}
/**
* 获取已续费导出数据
* @author DB
* @since 2023/12/14
* @param response 响应
* @param bo 请求参数
*/
@GetMapping("/getRenewXml")
@ApiOperation("获取已续费导出数据")
public void getRenewXml(HttpServletResponse response, @ApiParam("分页信息") @Validated StoreRenewXmlBo bo) throws IOException {
// 这里注意 有同学反应使用swagger 会导致各种问题请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyExcel没有关系
String fileName = URLEncoder.encode("已续费数据", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), StoreRenewDto.class).sheet("记录").doWrite(storeSignService.getRenewXml(bo));
}
}

View File

@ -0,0 +1,76 @@
package com.cpop.system.business.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.security.core.parameters.P;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
/**
* @author DB
* @version 1.0.0
* @since 2023-12-14 16:12
*/
@Data
public class StoreRenewDto {
/**
* 品牌名
*/
@ExcelProperty(value = "品牌")
private String brandName;
/**
* 校区名
*/
@ExcelProperty(value = "校区")
private String storeName;
/**
* 营业执照公司
*/
@ExcelProperty(value = "营业执照公司")
private String licenseName;
/**
* 营业执照法人
*/
@ExcelProperty(value = "营业执照法人")
private String licenseUserName;
/**
* 营业执照地址
*/
@ExcelProperty(value = "营业执照地址")
private String licenseAddr;
/**
* 到期日期
*/
@ExcelProperty(value = "到期日期")
private LocalDate expireDate;
/**
* 注册时间
*/
@ExcelProperty(value = "注册时间")
private LocalDateTime createTime;
/**
* 续费时间
*/
@ExcelProperty(value = "续费时间")
private String renewDate;
/**
* 续费金额
*/
@ExcelProperty(value = "续费金额")
private BigDecimal renewAmount;
/**
* 续费人
*/
@ExcelProperty(value = "续费人")
private String renewStaffName;
}

View File

@ -55,11 +55,6 @@ public class Store extends BaseEntity implements Serializable {
*/
private String phone;
/**
* 到期日期
*/
private String expireDate;
/**
* 是否有顾问
*/

View File

@ -0,0 +1,72 @@
package com.cpop.system.business.entity;
import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* 校区续费表 实体类
*
* @author DB
* @since 2023-12-14
*/
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_sys_store_renew", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class StoreRenew extends BaseEntity implements Serializable {
/**
* 主键
*/
@Id
private String id;
/**
* 校区id
*/
@Id
private String storeId;
/**
* 续费金额
*/
private BigDecimal renewAmount;
/**
* 续费人
*/
private String renewStaffId;
/**
* 续费日期
*/
private LocalDate renewDate;
/**
* 续费描述
*/
private String renewDesc;
/**
* 逻辑删除0否1是
*/
@Column(isLogicDelete = true)
private Boolean isDelete;
}

View File

@ -0,0 +1,75 @@
package com.cpop.system.business.entity;
import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* 校区-签约表 实体类
*
* @author DB
* @since 2023-12-13
*/
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_sys_store_sign", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class StoreSign extends BaseEntity implements Serializable {
/**
* 主键
*/
@Id
private String id;
/**
* 校区/店铺id
*/
private String storeId;
/**
* 到期日期
*/
private LocalDate expireDate;
/**
* 签约员工id
*/
private String signStaffId;
/**
* 是否流失
*/
private Boolean isLoss;
/**
* 流失日期
*/
private LocalDate runOffDate;
/**
* 流失原因
*/
private String runOffReason;
/**
* 逻辑删除0否1是
*/
@Column(isLogicDelete = true)
private Boolean isDelete;
}

View File

@ -0,0 +1,14 @@
package com.cpop.system.business.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cpop.system.business.entity.StoreRenew;
/**
* 校区续费表 映射层
*
* @author DB
* @since 2023-12-14
*/
public interface StoreRenewMapper extends BaseMapper<StoreRenew> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.system.business.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cpop.system.business.entity.StoreSign;
/**
* 校区-签约表 映射层
*
* @author DB
* @since 2023-12-13
*/
public interface StoreSignMapper extends BaseMapper<StoreSign> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.system.business.service;
import com.mybatisflex.core.service.IService;
import com.cpop.system.business.entity.StoreRenew;
/**
* 校区续费表 服务层
*
* @author DB
* @since 2023-12-14
*/
public interface StoreRenewService extends IService<StoreRenew> {
}

View File

@ -0,0 +1,48 @@
package com.cpop.system.business.service;
import com.cpop.system.business.bo.StoreRenewPageBo;
import com.cpop.system.business.bo.StoreRenewXmlBo;
import com.cpop.system.business.bo.StoreRunOffBo;
import com.cpop.system.business.dto.StoreRenewDto;
import com.cpop.system.business.vo.StoreRenewPageVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.cpop.system.business.entity.StoreSign;
import java.util.Collection;
import java.util.List;
/**
* 校区-签约表 服务层
*
* @author DB
* @since 2023-12-13
*/
public interface StoreSignService extends IService<StoreSign> {
/**
* 分页查询校区续费
* @author DB
* @since 2023/12/14
* @param bo 请求参数
* @return Page<StoreSign>
*/
Page<StoreRenewPageVo> getStoreRenewPage(StoreRenewPageBo bo);
/**
* 机构/店铺流失
* @author DB
* @since 2023/12/14
* @param bo 请求参数
*/
void runOff(StoreRunOffBo bo);
/**
* 获取已续费导出数据
* @author DB
* @since 2023/12/14
* @param bo 请求
* @return List<StoreRenewDto>
*/
List<StoreRenewDto> getRenewXml(StoreRenewXmlBo bo);
}

View File

@ -0,0 +1,18 @@
package com.cpop.system.business.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cpop.system.business.entity.StoreRenew;
import com.cpop.system.business.mapper.StoreRenewMapper;
import com.cpop.system.business.service.StoreRenewService;
import org.springframework.stereotype.Service;
/**
* 校区续费表 服务层实现
*
* @author DB
* @since 2023-12-14
*/
@Service("storeRenewService")
public class StoreRenewServiceImpl extends ServiceImpl<StoreRenewMapper, StoreRenew> implements StoreRenewService {
}

View File

@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
import com.mybatisflex.core.query.QueryWrapper;
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
import static com.cpop.system.business.entity.table.StoreSignTableDef.STORE_SIGN;
import static com.cpop.system.business.entity.table.StoreTableDef.STORE;
/**
@ -41,9 +42,11 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
public Page<StorePageVo> getStorePage(StorePageBo bo) {
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
return this.getMapper().paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()),
QueryWrapper.create().select(STORE.ALL_COLUMNS)
QueryWrapper.create().select(STORE.ID, STORE.STORE_NAME, STORE.SOURCE_TYPE, STORE.CREATE_TIME, STORE.STORE_ADDR, STORE.PERSON_CHARGE, STORE.PHONE, STORE.HAVE_ACTIVE, STORE.HAVE_COUNSELOR)
.select(STORE_SIGN.EXPIRE_DATE)
.select(BRAND.BRAND_NAME).from(STORE)
.select("cp_j_store_extend.store_cloud_id as storeCloudId")
.leftJoin(STORE_SIGN).on(STORE_SIGN.STORE_ID.eq(STORE.ID))
.leftJoin(BRAND).on(BRAND.ID.eq(STORE.BRAND_ID))
.leftJoin("cp_j_store_extend").on("`cp_j_store_extend`.`store_id` = `cp_sys_store`.`id`"),
StorePageVo.class);

View File

@ -0,0 +1,138 @@
package com.cpop.system.business.service.impl;
import com.cpop.core.base.entity.PageDomain;
import com.cpop.core.utils.SpringUtils;
import com.cpop.core.utils.sql.SqlUtils;
import com.cpop.system.business.bo.StoreRenewPageBo;
import com.cpop.system.business.bo.StoreRenewXmlBo;
import com.cpop.system.business.bo.StoreRunOffBo;
import com.cpop.system.business.dto.StoreRenewDto;
import com.cpop.system.business.service.StoreRenewService;
import com.cpop.system.business.vo.StoreRenewPageVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cpop.system.business.entity.StoreSign;
import com.cpop.system.business.mapper.StoreSignMapper;
import com.cpop.system.business.service.StoreSignService;
import org.apache.poi.ss.formula.functions.T;
import org.joda.time.LocalDate;
import org.springframework.stereotype.Service;
import java.util.List;
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
import static com.cpop.system.business.entity.table.StoreLicenseTableDef.STORE_LICENSE;
import static com.cpop.system.business.entity.table.StoreRenewTableDef.STORE_RENEW;
import static com.cpop.system.business.entity.table.StoreSignTableDef.STORE_SIGN;
import static com.cpop.system.business.entity.table.StoreTableDef.STORE;
import static com.mybatisflex.core.query.QueryMethods.now;
import static com.mybatisflex.core.query.QueryMethods.subDate;
/**
* 校区-签约表 服务层实现
*
* @author DB
* @since 2023-12-13
*/
@Service("storeSignService")
public class StoreSignServiceImpl extends ServiceImpl<StoreSignMapper, StoreSign> implements StoreSignService {
/**
* 分页查询校区续费
* @author DB
* @since 2023/12/14
* @param bo 请求参数
* @return Page<StoreSign>
*/
@Override
public Page<StoreRenewPageVo> getStoreRenewPage(StoreRenewPageBo bo) {
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
QueryWrapper queryWrapper = QueryWrapper.create();
switch (bo.getRenewStatus()){
//待续费
case 0:
queryWrapper.and(subDate(STORE_SIGN.EXPIRE_DATE, now()).le(90)).and(STORE_SIGN.IS_LOSS.eq(false));
break;
//已续费
case 1:
return SpringUtils.getBean(StoreRenewService.class).getMapper().paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()),
QueryWrapper.create()
.select(BRAND.BRAND_NAME)
.select(STORE.CREATE_TIME, STORE.PERSON_CHARGE, STORE.PHONE, STORE.STORE_NAME)
.select(STORE_SIGN.EXPIRE_DATE, STORE_SIGN.ID)
.select(STORE_LICENSE.LICENSE_ADDR, STORE_LICENSE.LICENSE_NAME, STORE_LICENSE.LICENSE_USER_NAME)
.select(STORE_RENEW.RENEW_DATE, STORE_RENEW.RENEW_AMOUNT)
.select("cos.name as renewStaffName")
.leftJoin(STORE).on(STORE.ID.eq(STORE_RENEW.STORE_ID))
.leftJoin(BRAND).on(BRAND.ID.eq(STORE.BRAND_ID))
.leftJoin(STORE_LICENSE).on(STORE_LICENSE.STORE_ID.eq(STORE.ID))
.leftJoin(STORE_SIGN).on(STORE_SIGN.STORE_ID.eq(STORE.ID))
.leftJoin("cp_oam_staff").as("cos").on("cos.id = `cp_sys_store_renew`.`renew_staff_id`")
.and(STORE_RENEW.RENEW_DATE.between(bo.getRenewStartAndEnd().get(0), bo.getRenewStartAndEnd().get(1)))
.and(BRAND.BRAND_NAME.like(bo.getBrandOrStore()).or(STORE.STORE_NAME.like(bo.getBrandOrStore())))
.and(STORE_LICENSE.LICENSE_ADDR.like(bo.getAddrOrName()).or(STORE_LICENSE.LICENSE_NAME.like(bo.getAddrOrName()))),
StoreRenewPageVo.class);
//已流失
default:
queryWrapper.and(STORE_SIGN.IS_LOSS.eq(true));
}
return this.mapper.paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()),
queryWrapper
.select(BRAND.BRAND_NAME)
.select(STORE.CREATE_TIME, STORE.PERSON_CHARGE, STORE.PHONE, STORE.STORE_NAME)
.select(STORE_SIGN.EXPIRE_DATE, STORE_SIGN.ID)
.select(STORE_LICENSE.LICENSE_ADDR, STORE_LICENSE.LICENSE_NAME, STORE_LICENSE.LICENSE_USER_NAME)
.select(STORE_RENEW.RENEW_DATE,STORE_RENEW.RENEW_AMOUNT)
.select("cos.name as renewStaffName")
.leftJoin(STORE).on(STORE.ID.eq(STORE_SIGN.STORE_ID))
.leftJoin(BRAND).on(BRAND.ID.eq(STORE.BRAND_ID))
.leftJoin(STORE_LICENSE).on(STORE_LICENSE.STORE_ID.eq(STORE.ID))
.leftJoin(STORE_RENEW).on(STORE_RENEW.STORE_ID.eq(STORE.ID))
.leftJoin("cp_oam_staff").as("cos").on("cos.id = " + STORE_RENEW.RENEW_STAFF_ID)
.and(BRAND.BRAND_NAME.like(bo.getBrandOrStore()).or(STORE.STORE_NAME.like(bo.getBrandOrStore())))
.and(STORE_LICENSE.LICENSE_ADDR.like(bo.getAddrOrName()).or(STORE_LICENSE.LICENSE_NAME.like(bo.getAddrOrName()))),
StoreRenewPageVo.class);
}
/**
* 机构/店铺流失
* @author DB
* @since 2023/12/14
* @param bo 请求参数
*/
@Override
public void runOff(StoreRunOffBo bo) {
this.updateChain().set(STORE_SIGN.RUN_OFF_REASON, bo.getRunOffReason())
.set(STORE_SIGN.RUN_OFF_DATE, LocalDate.now())
.where(STORE_SIGN.ID.eq(bo.getId())).update();
}
/**
* 获取已续费导出数据
* @author DB
* @since 2023/12/14
* @param bo 请求
* @return List<StoreRenewDto>
*/
@Override
public List<StoreRenewDto> getRenewXml(StoreRenewXmlBo bo) {
List<StoreRenewDto> storeRenewDtos = SpringUtils.getBean(StoreRenewService.class).listAs(QueryWrapper.create()
.select(BRAND.BRAND_NAME)
.select(STORE.CREATE_TIME.as(StoreRenewDto::getCreateTime), STORE.PERSON_CHARGE, STORE.PHONE, STORE.STORE_NAME)
.select(STORE_SIGN.EXPIRE_DATE, STORE_SIGN.ID)
.select(STORE_LICENSE.LICENSE_ADDR, STORE_LICENSE.LICENSE_NAME, STORE_LICENSE.LICENSE_USER_NAME)
.select(STORE_RENEW.RENEW_DATE, STORE_RENEW.RENEW_AMOUNT)
.select("cos.name as renewStaffName")
.leftJoin(STORE).on(STORE.ID.eq(STORE_RENEW.STORE_ID))
.leftJoin(BRAND).on(BRAND.ID.eq(STORE.BRAND_ID))
.leftJoin(STORE_LICENSE).on(STORE_LICENSE.STORE_ID.eq(STORE.ID))
.leftJoin(STORE_SIGN).on(STORE_SIGN.STORE_ID.eq(STORE.ID))
.leftJoin("cp_oam_staff").as("cos").on("cos.id = `cp_sys_store_renew`.`renew_staff_id`")
.and(STORE_RENEW.RENEW_DATE.between(bo.getRenewStartDate(), bo.getRenewEndDate()))
.and(BRAND.BRAND_NAME.like(bo.getBrandOrStore()).or(STORE.STORE_NAME.like(bo.getBrandOrStore())))
.and(STORE_LICENSE.LICENSE_ADDR.like(bo.getAddrOrName()).or(STORE_LICENSE.LICENSE_NAME.like(bo.getAddrOrName()))),
StoreRenewDto.class);
return storeRenewDtos;
}
}

View File

@ -11,12 +11,10 @@ import java.time.LocalDateTime;
import com.cpop.core.base.enums.SourceType;
/*
* @Author: DB
*
* @Date: 2023-11-23 15:05:53
*
* @Description: 店铺分页返回对象
/**
* 校区/店铺分页返回对象
* @author DB
* @since 2023/12/14
*/
@Data
@Accessors(chain = true)

View File

@ -0,0 +1,89 @@
package com.cpop.system.business.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.OffsetDateTime;
/**
* @author DB
* @version 1.0.0
* @since 2023-12-14 9:54
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "校区/店铺对象", description = "校区/店铺对象")
public class StoreRenewPageVo {
/**
* 品牌名
*/
@ApiModelProperty(value = "品牌名")
private String brandName;
/**
* 注册时间
*/
@ApiModelProperty(value = "注册时间")
private OffsetDateTime createTime;
/**
* 到期日期
*/
@ApiModelProperty(value = "到期日期")
private LocalDate expireDate;
/**
* 主键主键
*/
@ApiModelProperty(value = "主键")
private String id;
/**
* 营业执照地址
*/
@ApiModelProperty(value = "营业执照地址")
private String licenseAddr;
/**
* 营业执照公司
*/
@ApiModelProperty(value = "营业执照公司")
private String licenseName;
/**
* 营业执照法人
*/
@ApiModelProperty(value = "营业执照法人")
private String licenseUserName;
/**
* 联系人
*/
@ApiModelProperty(value = "联系人")
private String personChange;
/**
* 联系电话
*/
@ApiModelProperty(value = "联系电话")
private String phone;
/**
* 校区名
*/
@ApiModelProperty(value = "校区名")
private String storeName;
/**
* 续费时间
*/
@ApiModelProperty(value = "续费时间")
private String renewDate;
/**
* 续费金额
*/
@ApiModelProperty(value = "续费金额")
private BigDecimal renewAmount;
/**
* 续费人
*/
@ApiModelProperty(value = "续费人")
private String renewStaffName;
}

View File

@ -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.cpop.system.business.mapper.StoreRenewMapper">
</mapper>

View File

@ -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.cpop.system.business.mapper.StoreSignMapper">
</mapper>