pull/1/head
fanlian 1 month ago
parent 9d1b6f924c
commit 3986b8c447

@ -30,21 +30,31 @@ import com.xmomen.module.plan.service.TablePlanSercvice;
import com.xmomen.module.user.entity.SysUsers;
/**
* HTTP
*
* Created by ted on 16/3/28.
*/
@RestController
public class TablePlanController {
// 注入餐桌计划服务类,用于处理餐桌计划的业务逻辑
@Autowired
TablePlanSercvice tablePlanService;
// 注入餐桌计划映射器,用于与数据库进行交互
@Autowired
TablePlanMapper tablePlanMapper;
// 注入MyBatis数据访问对象用于执行数据库操作
@Autowired
MybatisDao mybatisDao;
/**
*
* @param id
* @return
* @param limit
* @param offset
* @param id ID
* @param keyword
* @param phoneNumber
* @return
*/
@RequestMapping(value = "/tablePlan", method = RequestMethod.GET)
@Log(actionName = "查询餐桌信息")
@ -53,87 +63,118 @@ public class TablePlanController {
@RequestParam(value = "id", required = false) Integer id,
@RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(value = "phoneNumber", required = false) String phoneNumber) {
// 创建一个Map用于存储查询参数
Map map = new HashMap<String, Object>();
// 将餐桌计划ID放入Map中
map.put("id", id);
// 将搜索关键词放入Map中
map.put("keyword", keyword);
// 如果电话号码不为空则将其放入Map中
if (StringUtils.trimToNull(phoneNumber) != null) {
map.put("phoneNumber", phoneNumber);
}
//客服经理过滤 如果有客服组权限则不过滤
// 客服经理过滤如果当前用户有客服经理角色且没有客服角色则添加用户ID到查询条件中
if (SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE)) {
// 从会话中获取当前用户的ID
Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY);
// 将用户ID放入Map中
map.put("userId", userId);
}
// 调用MyBatis的分页查询方法根据查询参数获取餐桌计划列表
return (Page<TablePlanModel>) mybatisDao.selectPage(TablePlanMapper.TablePlanMapperNameSpace + "getTablePlanList", map, limit, offset);
}
/**
*
* @param createTablePlan
* @param bindingResult
* @throws ArgumentValidException
*/
@RequestMapping(value = "/tablePlan", method = RequestMethod.POST)
@Log(actionName = "新增餐桌")
public void createTablePlan(@RequestBody @Valid CreateTablePlan createTablePlan, BindingResult bindingResult) throws ArgumentValidException {
// 如果数据绑定结果存在错误
if (bindingResult != null && bindingResult.hasErrors()) {
// 抛出参数验证异常
throw new ArgumentValidException(bindingResult);
}
// 调用服务层的方法创建餐桌计划
tablePlanService.createTablePlan(createTablePlan);
}
/**
* ID
* @param id
* @param id ID
* @return
*/
@RequestMapping(value = "/tablePlan/{id}", method = RequestMethod.GET)
@Log(actionName = "根据ID查询餐桌信息")
public TablePlanModel getTablePlan(@PathVariable(value = "id") Integer id) {
// 创建一个Map用于存储查询参数
Map map = new HashMap<String, Object>();
// 将餐桌计划ID放入Map中
map.put("id", id);
// 调用MyBatis的查询方法根据ID获取餐桌计划信息
return mybatisDao.getSqlSessionTemplate().selectOne(TablePlanMapper.TablePlanMapperNameSpace + "getTablePlanList", map);
}
/**
*
* @param id
*
* @param id ID
* @param updateTablePlan
* @param bindingResult
* @throws ArgumentValidException
*/
@RequestMapping(value = "/tablePlan/{id}", method = RequestMethod.PUT)
@Log(actionName = "修改餐桌信息")
public void updateTablePlan(@PathVariable(value = "id") Integer id,
@RequestBody @Valid UpdateTablePlan updateTablePlan, BindingResult bindingResult) throws ArgumentValidException {
// 如果数据绑定结果存在错误
if (bindingResult != null && bindingResult.hasErrors()) {
// 抛出参数验证异常
throw new ArgumentValidException(bindingResult);
}
// 调用服务层的方法更新餐桌计划信息
tablePlanService.updateTablePlan(id, updateTablePlan);
}
/**
*
* @param id
*
* @param id ID
*/
@RequestMapping(value = "/tablePlan/{id}", method = RequestMethod.DELETE)
@Log(actionName = "删除餐桌信息")
public void deleteTablePlan(@PathVariable(value = "id") Integer id) {
// 调用服务层的方法删除餐桌计划
tablePlanService.delete(id);
}
/**
*
* @param id
* @param id ID
* @param locked truefalse
*/
@RequestMapping(value = "/tablePlan/{id}/stop", method = RequestMethod.PUT)
@Log(actionName = "暂停配送")
public void stop(@PathVariable(value = "id") Integer id,
@RequestParam(value = "locked") Boolean locked) {
// 创建一个餐桌计划实体对象
TbTablePlan tablePlan = new TbTablePlan();
// 根据locked的值设置是否暂停配送的标志1表示暂停0表示正常
tablePlan.setIsStop(locked ? 1 : 0);
// 设置餐桌计划的ID
tablePlan.setId(id);
// 调用MyBatis的更新方法更新餐桌计划信息
mybatisDao.update(tablePlan);
}
/**
*
* @param id
*
*/
@RequestMapping(value = "/tablePlan/createPlanOrder", method = RequestMethod.PUT)
@Log(actionName = "手工调用")
public void createPlanOrder() {
// 调用服务层的方法创建餐桌计划订单
tablePlanService.createTablePlanOrder();
}
}

@ -9,94 +9,67 @@ import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
/**
* TbTablePlan"tb_table_plan"
* Java
* BaseMybatisModel
*/
@Entity
@Table(name = "tb_table_plan")
public class TbTablePlan extends BaseMybatisModel {
/**
*
*/
// 主键ID唯一标识一条餐桌计划记录
private Integer id;
/**
*
*/
// 餐桌计划ID关联到具体的计划
private Integer cdPlanId;
/**
* 0-1-
*/
// 审核状态0表示未审核1表示审核通过
private Integer auditStatus;
/**
* 0-1-
*/
// 是否暂停配送0表示不暂停1表示暂停
private Integer isStop;
/**
*
*/
// 会员ID关联到下单的会员
private Integer cdMemberId;
/**
*
*/
// 卡号,可能用于标识会员卡等信息
private String couponNumber;
/**
*
*/
// 客户编号,用于标识客户
private String memberCode;
/**
*
*/
// 手机号,收货人的联系电话
private String consigneePhone;
/**
*
*/
// 收货人姓名
private String consigneeName;
/**
*
*/
// 收货人地址
private String consigneeAddress;
/**
*
*/
// 邮政编码
private String postcode;
/**
*
*/
// 星期几配送,指定配送的时间周期
private String sendWeekDay;
/**
*
*/
// 总配送次数,该餐桌计划的总配送次数
private Integer totalSendValue;
/**
*
*/
// 已配送次数,已经完成的配送次数
private Integer sendValue;
/**
*
*/
// 上次配送时间
private Date lastSendDate;
/**
*
*/
// 下次配送时间
private Date nextSendDate;
/**
*
*/
// 生效时间,该餐桌计划开始生效的时间
private Date beginTime;
// 映射到数据库表中的"ID"列设置为主键并使用UUIDGenerator生成唯一ID
@Column(name = "ID")
@Id
@GeneratedValue(generator = "UUIDGenerator")
@ -104,6 +77,7 @@ public class TbTablePlan extends BaseMybatisModel {
return id;
}
// 设置ID值并根据ID是否为空来处理有效字段可能与数据验证或持久化相关
public void setId(Integer id) {
this.id = id;
if (id == null) {
@ -113,11 +87,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("id");
}
// 获取餐桌计划ID
@Column(name = "CD_PLAN_ID")
public Integer getCdPlanId() {
return cdPlanId;
}
// 设置餐桌计划ID并根据其是否为空来处理有效字段
public void setCdPlanId(Integer cdPlanId) {
this.cdPlanId = cdPlanId;
if (cdPlanId == null) {
@ -127,11 +103,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("cdPlanId");
}
// 获取审核状态
@Column(name = "AUDIT_STATUS")
public Integer getAuditStatus() {
return auditStatus;
}
// 设置审核状态,并根据其是否为空来处理有效字段
public void setAuditStatus(Integer auditStatus) {
this.auditStatus = auditStatus;
if (auditStatus == null) {
@ -141,11 +119,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("auditStatus");
}
// 获取是否暂停配送状态
@Column(name = "IS_STOP")
public Integer getIsStop() {
return isStop;
}
// 设置是否暂停配送状态,并根据其是否为空来处理有效字段
public void setIsStop(Integer isStop) {
this.isStop = isStop;
if (isStop == null) {
@ -155,11 +135,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("isStop");
}
// 获取会员ID
@Column(name = "CD_MEMBER_ID")
public Integer getCdMemberId() {
return cdMemberId;
}
// 设置会员ID并根据其是否为空来处理有效字段
public void setCdMemberId(Integer cdMemberId) {
this.cdMemberId = cdMemberId;
if (cdMemberId == null) {
@ -169,11 +151,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("cdMemberId");
}
// 获取卡号
@Column(name = "COUPON_NUMBER")
public String getCouponNumber() {
return couponNumber;
}
// 设置卡号,并根据其是否为空来处理有效字段
public void setCouponNumber(String couponNumber) {
this.couponNumber = couponNumber;
if (couponNumber == null) {
@ -183,11 +167,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("couponNumber");
}
// 获取客户编号
@Column(name = "MEMBER_CODE")
public String getMemberCode() {
return memberCode;
}
// 设置客户编号,并根据其是否为空来处理有效字段
public void setMemberCode(String memberCode) {
this.memberCode = memberCode;
if (memberCode == null) {
@ -197,11 +183,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("memberCode");
}
// 获取手机号
@Column(name = "CONSIGNEE_PHONE")
public String getConsigneePhone() {
return consigneePhone;
}
// 设置手机号,并根据其是否为空来处理有效字段
public void setConsigneePhone(String consigneePhone) {
this.consigneePhone = consigneePhone;
if (consigneePhone == null) {
@ -211,11 +199,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("consigneePhone");
}
// 获取收货人姓名
@Column(name = "CONSIGNEE_NAME")
public String getConsigneeName() {
return consigneeName;
}
// 设置收货人姓名,并根据其是否为空来处理有效字段
public void setConsigneeName(String consigneeName) {
this.consigneeName = consigneeName;
if (consigneeName == null) {
@ -225,11 +215,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("consigneeName");
}
// 获取收货人地址
@Column(name = "CONSIGNEE_ADDRESS")
public String getConsigneeAddress() {
return consigneeAddress;
}
// 设置收货人地址,并根据其是否为空来处理有效字段
public void setConsigneeAddress(String consigneeAddress) {
this.consigneeAddress = consigneeAddress;
if (consigneeAddress == null) {
@ -239,11 +231,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("consigneeAddress");
}
// 获取邮政编码
@Column(name = "POSTCODE")
public String getPostcode() {
return postcode;
}
// 设置邮政编码,并根据其是否为空来处理有效字段
public void setPostcode(String postcode) {
this.postcode = postcode;
if (postcode == null) {
@ -253,11 +247,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("postcode");
}
// 获取星期几配送
@Column(name = "SEND_WEEK_DAY")
public String getSendWeekDay() {
return sendWeekDay;
}
// 设置星期几配送,并根据其是否为空来处理有效字段
public void setSendWeekDay(String sendWeekDay) {
this.sendWeekDay = sendWeekDay;
if (sendWeekDay == null) {
@ -267,11 +263,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("sendWeekDay");
}
// 获取总配送次数
@Column(name = "TOTAL_SEND_VALUE")
public Integer getTotalSendValue() {
return totalSendValue;
}
// 设置总配送次数,并根据其是否为空来处理有效字段
public void setTotalSendValue(Integer totalSendValue) {
this.totalSendValue = totalSendValue;
if (totalSendValue == null) {
@ -281,11 +279,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("totalSendValue");
}
// 获取已配送次数
@Column(name = "SEND_VALUE")
public Integer getSendValue() {
return sendValue;
}
// 设置已配送次数,并根据其是否为空来处理有效字段
public void setSendValue(Integer sendValue) {
this.sendValue = sendValue;
if (sendValue == null) {
@ -295,11 +295,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("sendValue");
}
// 获取上次配送时间
@Column(name = "LAST_SEND_DATE")
public Date getLastSendDate() {
return lastSendDate;
}
// 设置上次配送时间,并根据其是否为空来处理有效字段
public void setLastSendDate(Date lastSendDate) {
this.lastSendDate = lastSendDate;
if (lastSendDate == null) {
@ -309,11 +311,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("lastSendDate");
}
// 获取下次配送时间
@Column(name = "NEXT_SEND_DATE")
public Date getNextSendDate() {
return nextSendDate;
}
// 设置下次配送时间,并根据其是否为空来处理有效字段
public void setNextSendDate(Date nextSendDate) {
this.nextSendDate = nextSendDate;
if (nextSendDate == null) {
@ -323,11 +327,13 @@ public class TbTablePlan extends BaseMybatisModel {
addValidField("nextSendDate");
}
// 获取生效时间
@Column(name = "BEGIN_TIME")
public Date getBeginTime() {
return beginTime;
}
// 设置生效时间,并根据其是否为空来处理有效字段
public void setBeginTime(Date beginTime) {
this.beginTime = beginTime;
if (beginTime == null) {

@ -8,48 +8,80 @@ import com.xmomen.module.plan.entity.TbTablePlan;
import lombok.Data;
public @Data class CreateTablePlan implements Serializable{
/**
*
* CreateTablePlan Serializable
* 使使
* 使 Lombok @Data gettersettertoStringequals hashCode
*
*/
@Data
public class CreateTablePlan implements Serializable {
/**
*
* ID
*
*/
private Integer cdPlanId;
/**
* 0-1-
* 0 1
*
*
*/
private Integer auditStatus;
/**
* 0-1-
* 0 1
*
*
*/
private Integer isStop;
/**
*
*
* ID
* 便
*/
private Integer cdMemberId;
/**
*
*
*
*
*/
private String couponNumber;
/**
*
*
*
*
*/
private String consigneePhone;
/**
*
*
*
*/
private String consigneeName;
/**
*
*
*
*/
private String consigneeAddress;
/**
*
*
* 使 ID
*/
private List<Integer> cdPlanIds;
/**
* TbTablePlan
*
*
*/
private List<TbTablePlan> tablePlans;
}

@ -6,115 +6,82 @@ import java.util.Date;
import lombok.Data;
public @Data class TablePlanModel implements Serializable{
/**
*
* TablePlanModelSerializable
* 便使
* 使Lombok@DatagettersettertoStringequalshashCode
*/
@Data
public class TablePlanModel implements Serializable {
// 餐桌计划的唯一标识,用于在数据库中唯一确定一条餐桌计划记录
private Integer id;
/**
*
*/
// 餐桌计划的标识,可用于关联其他相关的计划信息
private Integer cdPlanId;
// 餐桌计划的名称,用于直观地描述该计划
private String planName;
/**
* 0-1-
*/
// 审核状态0表示未审核1表示审核通过
private Integer auditStatus;
// 是否暂停0表示不暂停1表示暂停
private Integer isStop;
/**
*
*/
// 卡号,可能与会员卡或其他卡类相关联
private String couponNumber;
/**
*
*/
// 收货人的手机号码,用于联系收货人
private String consigneePhone;
/**
*
*/
// 收货人的姓名
private String consigneeName;
/**
*
*/
// 收货人的地址
private String consigneeAddress;
/**
*
*/
// 收货地址对应的邮政编码
private String postcode;
/**
*
*/
// 单位名称,表明该餐桌计划所属的单位
private String companyName;
// 单位的唯一标识
private int companyId;
/**
*
*/
// 所属客服经理的姓名
private String managerName;
// 所属客服经理的唯一标识
private int managerId;
/**
*
*/
// 总配送次数,即该餐桌计划总共需要配送的次数
private Integer totalSendValue;
/**
*
*/
// 已配送次数,记录已经完成的配送次数
private Integer sendValue;
/**
*
*/
// 生效时间,该餐桌计划开始生效的日期
private Date beginTime;
/**
* 123
*/
// 配送频率例如1周、2周、3周等以整数表示
private Integer deliveryType;
/**
* (
*/
// 配送时间,指定一周中的星期几进行配送
private String sendWeekDay;
/**
*
*/
// 上次配送的日期
private Date lastSendDate;
/**
*
*/
// 下次配送的日期
private Date nextSendDate;
/**
*
*/
// 是否随机0表示不随机1表示随机
private Integer isRandom;
/**
*
*/
// 产品归属的类别标识,用于对产品进行分类
private Integer cdCategoryId;
/**
*
*/
// 随机数,可能用于一些随机分配或计算的场景
private Integer randomNum;
/**
*
*/
// 计划的金额,该餐桌计划涉及的费用金额
private BigDecimal price;
}

@ -11,50 +11,62 @@ import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
public @Data class UpdateTablePlan implements Serializable{
/**
*
* UpdateTablePlanSerializable
* 使使Lombok@Data
* gettersettertoStringequalshashCode
*/
@Data
public class UpdateTablePlan implements Serializable {
/**
*
*/
private Integer cdPlanId;
/**
* 0-1-
* 01
*
*/
private Integer auditStatus;
/**
* 0-1-
* 01
*
*/
private Integer isStop;
/**
*
*
*/
private Integer cdMemberId;
/**
*
*
*/
private String couponNumber;
/**
*
*
*/
private String consigneePhone;
/**
*
*
*/
private String consigneeName;
/**
*
*
*/
private String consigneeAddress;
/**
*
*
*/
private Date beginTime;
/**
*
*/
private String sendWeekDay;
}

@ -40,38 +40,62 @@ public class TablePlanSercviceImpl implements TablePlanSercvice {
@Override
@Transactional
public void createTablePlan(CreateTablePlan createTablePlan) {
//遍历createTablePlan中的tablePlans
for(TbTablePlan tablePlan :createTablePlan.getTablePlans()){
//设置tablePlan的审核状态为1
tablePlan.setAuditStatus(1);
//设置tablePlan的会员ID
tablePlan.setCdMemberId(createTablePlan.getCdMemberId());
//设置tablePlan的收货地址
tablePlan.setConsigneeAddress(createTablePlan.getConsigneeAddress());
//设置tablePlan的收货人姓名
tablePlan.setConsigneeName(createTablePlan.getConsigneeName());
//设置tablePlan的收货人电话
tablePlan.setConsigneePhone(createTablePlan.getConsigneePhone());
//设置tablePlan的优惠券号码
tablePlan.setCouponNumber(createTablePlan.getCouponNumber());
//设置tablePlan的发送值为0
tablePlan.setSendValue(0);
//根据tablePlan的cdPlanId查询CdPlan
CdPlan plan = mybatisDao.selectByPrimaryKey(CdPlan.class,tablePlan.getCdPlanId());
//设置tablePlan的总发送值为CdPlan的deliverCount
tablePlan.setTotalSendValue(plan.getDeliverCount());
//保存tablePlan
mybatisDao.saveByModel(tablePlan);
}
}
@Transactional
public void updateTablePlan(Integer id,UpdateTablePlan updateTablePlan) {
//创建TbTablePlan对象
TbTablePlan tablePlan = new TbTablePlan();
//设置tablePlan的id
tablePlan.setId(id);
//设置tablePlan的cdPlanId
tablePlan.setCdPlanId(updateTablePlan.getCdPlanId());
//设置tablePlan的会员ID
tablePlan.setCdMemberId(updateTablePlan.getCdMemberId());
//设置tablePlan的收货地址
tablePlan.setConsigneeAddress(updateTablePlan.getConsigneeAddress());
//设置tablePlan的收货人姓名
tablePlan.setConsigneeName(updateTablePlan.getConsigneeName());
//设置tablePlan的收货人电话
tablePlan.setConsigneePhone(updateTablePlan.getConsigneePhone());
//设置tablePlan的优惠券号码
tablePlan.setCouponNumber(updateTablePlan.getCouponNumber());
//设置tablePlan的发送周
tablePlan.setSendWeekDay(updateTablePlan.getSendWeekDay());
//根据updateTablePlan的cdPlanId查询CdPlan
CdPlan plan = mybatisDao.selectByPrimaryKey(CdPlan.class,updateTablePlan.getCdPlanId());
//设置tablePlan的总发送值为CdPlan的deliverCount
tablePlan.setTotalSendValue(plan.getDeliverCount());
//保存tablePlan
mybatisDao.saveByModel(tablePlan);
}
@Transactional
public void delete(Integer id){
//根据id删除TbTablePlan
mybatisDao.deleteByPrimaryKey(TbTablePlan.class, id);
}

@ -11,16 +11,26 @@ import org.springframework.web.bind.annotation.ResponseBody;
import com.xmomen.module.product.model.CategoryModel;
import com.xmomen.module.product.service.CategoryService;
// 标记该类为Spring MVC的控制器用于处理HTTP请求
@Controller
// 该控制器下的所有请求映射路径都以"/wx"开头
@RequestMapping(value = "/wx")
public class CategoryController {
// 使用Spring的依赖注入功能将CategoryService的实例自动注入到该类中
@Autowired
private CategoryService categoryService;
/**
* GET"/wx/category"
*
* @return CategoryModel
*/
@RequestMapping(value = "/category", method = RequestMethod.GET)
// 将返回的对象直接转换为JSON格式的数据返回给客户端
@ResponseBody
public List<CategoryModel> getAllProductCategories() {
// 调用CategoryService的getAllProductCategory方法获取所有产品类别信息
return categoryService.getAllProductCategory();
}
}

@ -21,14 +21,31 @@ import com.xmomen.module.product.model.ProductQuery;
import com.xmomen.module.product.model.ProductQueryFilter;
import com.xmomen.module.product.service.ProductService;
// 声明这是一个Spring MVC的控制器类用于处理HTTP请求
@Controller
// 该控制器下所有请求映射的基础路径为"/wx"
@RequestMapping(value = "/wx")
public class ProductController {
// 使用Spring的依赖注入功能将ProductService的实例自动注入到当前类中
@Autowired
ProductService productService;
/**
* GET"/wx/product"
*
* @param limit
* @param offset
* @param categoryId ID
* @param productIds ID
* @param keyword
* @param orderField
* @param isAsc true
* @param labels
* @return
*/
@RequestMapping(value = "/product", method = RequestMethod.GET)
// 将返回的对象转换为JSON格式响应给客户端
@ResponseBody
public Page<ProductModel> getProducts(@RequestParam(value = "limit") Integer limit,
@RequestParam(value = "offset") Integer offset,
@ -38,39 +55,65 @@ public class ProductController {
@RequestParam(value = "orderField", required = false) String orderField,
@RequestParam(value = "isAsc", required = false, defaultValue = "true") Boolean isAsc,
@RequestParam(value = "labels", required = false) List<String> labels) {
// 创建一个ProductQuery对象用于封装查询条件
ProductQuery productQuery = new ProductQuery();
// 设置搜索关键词到查询对象中
productQuery.setKeyword(keyword);
// 如果产品ID数组不为空则将其转换为List并设置到查询对象中
if (productIds != null && productIds.length > 0) {
productQuery.setProductIds(Arrays.asList(productIds));
}
// 如果类别ID有效则将其设置到查询对象中
if (categoryId != null && categoryId > 0) {
productQuery.setCategoryId(categoryId);
}
// 用于存储转换后的标签实体字段
List<String> labelEntityFields = new ArrayList<String>();
// 如果标签列表不为空
if (!CollectionUtils.isEmpty(labels)) {
// 遍历标签列表
for (String labelStr : labels) {
// 根据标签字符串获取对应的ProductLabel枚举实例
ProductLabel label = ProductLabel.enumOf(labelStr);
// 如果枚举实例存在则将其对应的实体字段添加到labelEntityFields列表中
if (label != null) {
labelEntityFields.add(label.getEntityField());
}
}
}
// 如果labelEntityFields列表不为空则将其设置到查询对象中否则设置为null
if (!labelEntityFields.isEmpty()) {
productQuery.setFilterLabels(labelEntityFields);
} else {
productQuery.setFilterLabels(null);
}
// 根据排序字段字符串获取对应的ProductQueryFilter枚举实例
ProductQueryFilter orderFieldType = ProductQueryFilter.enumOf(orderField);
// 如果枚举实例存在,则设置排序字段和排序方式到查询对象中
if (orderFieldType != null) {
productQuery.setOrderField(orderFieldType.getFieldName());
productQuery.setIsAsc(isAsc);
}
// 调用ProductService的方法根据查询条件、每页记录数和偏移量获取产品列表
return productService.getProductList(productQuery, limit, offset);
}
/**
* GET"/wx/product/{id}"
*
* @param productId ID
* @return ProductModel
*/
@ResponseBody
@RequestMapping(value = "/product/{id}", method = RequestMethod.GET)
public ProductModel detail(@PathVariable(value = "id") Integer productId) {
// 调用ProductService的方法根据产品ID获取产品的详细信息
return productService.getDetailById(productId);
}
}

@ -5,44 +5,79 @@ import javax.persistence.Table;
import com.xmomen.framework.mybatis.model.BaseMybatisModel;
// 使用JPA的@Entity注解表明这是一个实体类会被JPA映射到数据库表
@Entity
// 使用@Table注解指定该实体类映射到数据库中的表名为"cd_category"
@Table(name="cd_category")
public class Category extends BaseMybatisModel {
// 序列化版本号,用于在序列化和反序列化时确保版本的兼容性
private static final long serialVersionUID = 1L;
// 类别ID对应数据库表中的主键字段
private Integer id;
// 类别名称
private String name;
// 父类别ID用于表示类别之间的层级关系
private Integer parentId;
/**
* ID
* @return ID
*/
public Integer getId() {
return id;
}
/**
* ID
* @param id ID
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
* @return
*/
public String getName() {
return name;
}
/**
*
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* ID
* @return ID
*/
public Integer getParentId() {
return parentId;
}
/**
* ID
* @param parentId ID
*/
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
/**
* toString便
* @return IDID
*/
@Override
public String toString() {
// 使用StringBuilder来构建字符串提高性能
StringBuilder builder = new StringBuilder();
builder.append("Category [id=");
builder.append(id);

@ -1,6 +1,17 @@
package com.xmomen.module.product.mapper;
/**
* ProductCategoryMapper
* MyBatisXMLJavaSQL
* SQL
*/
public interface ProductCategoryMapper {
/**
* ProductCategoryMapper
* MyBatisSQLID
* XML SQL
* SQL ID
*/
public static final String ProductCategoryMapperNameSpace = "com.xmomen.module.product.mapper.ProductCategoryMapper.";
}

@ -5,14 +5,32 @@ import java.util.List;
import lombok.Data;
public @Data
class CategoryModel implements Serializable {
/**
* CategoryModel
* Serializable便
* 使Lombok@DatagettersettertoStringequalshashCode
*/
@Data
public class CategoryModel implements Serializable {
// 序列化版本号,用于在序列化和反序列化过程中确保版本的兼容性。
private static final long serialVersionUID = 1L;
// 类别ID唯一标识一个类别。
private Integer id;
// 类别名称,描述该类别的具体名称。
private String name;
// 父类别ID用于表示该类别所属的父类别。如果为null则表示该类别为顶级类别。
private Integer parentId;
// 父类别名称,存储该类别父类别的名称。
private String parentName;
// 子类别列表,存储该类别下的所有子类别。
private List<CategoryModel> nodes;
// 标识该类别是否为叶子节点即是否没有子类别。默认为true表示是叶子节点。
private boolean leaf = true;
}

@ -1,30 +1,66 @@
package com.xmomen.module.product.model;
/**
* `ProductLabel`
*
*/
public enum ProductLabel {
// 限时抢购标签,描述为"xianShiQiangGou",对应的实体字段为"XIAN_SHI_QIANG_GOU"
XIAN_SHI_QIANG_GOU("xianShiQiangGou", "XIAN_SHI_QIANG_GOU"),
// 新品尝鲜标签,描述为"xinPinChangXian",对应的实体字段为"XIN_PIN_CHANG_XIAN"
XIN_PIN_CHANG_XIAN("xinPinChangXian", "XIN_PIN_CHANG_XIAN"),
// 热卖推荐标签,描述为"reMaiTuiJian",对应的实体字段为"RE_MAI_TUI_JIAN"
RE_MAI_TUI_JIAN("reMaiTuiJian", "RE_MAI_TUI_JIAN");
// 标签的描述信息,用于在业务逻辑中识别该标签
String desc;
// 标签对应的实体字段名,可能用于数据库查询或其他操作
String entityField;
/**
*
* @return
*/
public String getEntityField() {
return this.entityField;
}
/**
*
* @return
*/
public String getDesc() {
return this.desc;
}
/**
*
* @param desc
* @param entityField
*/
ProductLabel(String desc, String entityField) {
this.desc = desc;
this.entityField = entityField;
};
}
/**
* `ProductLabel`
* @param desc
* @return `ProductLabel``null`
*/
public static ProductLabel enumOf(String desc) {
// 获取所有的`ProductLabel`枚举实例
ProductLabel[] labels = ProductLabel.values();
// 获取枚举实例的数量
int length = labels.length;
// 遍历所有枚举实例
for (int i = 0; i < length; i++) {
ProductLabel label = labels[i];
// 忽略大小写比较描述信息,如果匹配则返回该枚举实例
if (label.desc.equalsIgnoreCase(desc)) return label;
}
// 未找到匹配的枚举实例,返回`null`
return null;
}
}

@ -6,35 +6,65 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
public @Data class ProductModel {
/**
* ProductModel
* Lombok@DatagettersettertoStringequalshashCode
*/
@Data
public class ProductModel {
// 产品的唯一标识ID
private Integer id;
// 产品的编码
private String itemCode;
// 产品的名称
private String itemName;
// 产品所属类别的ID
private Integer categoryId;
// 产品所属类别的名称
private String categoryName;
// 产品的描述信息
private String itemDescribe;
// 产品的类型
private Integer itemType;
// 产品的产地
private String yieldly;
// 产品的规格
private String spec;
// 产品的基础价格
private Double basePrice;
// 产品的会员价格
private Double memberPrice;
// 产品的定价方式
private String priceManner;
// 产品的销售状态true表示可销售false表示不可销售
private Boolean sellStatus;
// 产品的销售单位
private String sellUnit;
// 产品的销售价格
private Double sellPrice;
// 产品的销售数量
private Integer sellNum;
// 产品的库存数量
private Integer stockNum;
// 产品是否参与限时抢购活动true表示参与false表示不参与
private Boolean xianShiQiangGou;
// 产品是否为新品尝鲜true表示是false表示不是
private Boolean xinPinChangXian;
// 产品是否为热卖推荐true表示是false表示不是
private Boolean reMaiTuiJian;
// 产品的主图片URL
private String picUrl;
// 主图片URL是否为默认路径true表示是false表示不是
private Boolean isDefaultPath;
// 产品的多个图片URL列表
private List<String> picUrls;
// 产品的详细介绍内容
private String detailContent;
// 产品的数量
private Integer itemQty;
}

@ -4,15 +4,31 @@ import java.util.List;
import lombok.Data;
public @Data class ProductQuery {
/**
* ProductQuery便
* 使Lombok@DatagettersettertoStringequalshashCode
*/
@Data
public class ProductQuery {
// 产品所属类别的ID用于筛选特定类别的产品
private Integer categoryId;
// 查询关键词,可用于在产品名称、描述等字段中进行模糊搜索
private String keyword;
// 排序字段,指定按照哪个字段对查询结果进行排序
private String orderField;
// 是否升序排序默认为true表示升序设置为false则为降序
private Boolean isAsc = true;
// 过滤标签列表,用于筛选具有特定标签的产品
private List<String> filterLabels;
// 产品ID列表用于筛选指定ID的产品
private List<Integer> productIds;
private String memberCode;
// 会员代码,可能用于根据会员身份进行产品查询筛选
private String memberCode;
}

@ -1,44 +1,84 @@
package com.xmomen.module.product.model;
/**
* The enum is used for filter or order
*
* 使
* @author xiao
*
*/
public enum ProductQueryFilter {
// 按照价格进行过滤或排序,描述为 "price",对应的数据库字段为 "SELL_PRICE"
PRICE("price", "SELL_PRICE");
// 枚举值的描述,用于在业务逻辑中方便识别该枚举值
private String desc;
// 对应的数据库字段名,用于实际的 SQL 查询
private String fieldName;
// Query condition
// 查询条件,可能用于构建更复杂的 SQL 查询,初始值可为 null
private String condition;
/**
* null
* @param desc
* @param fieldName
*/
ProductQueryFilter(String desc, String fieldName) {
this(desc, fieldName, null);
}
/**
*
* @param desc
* @param fieldName
* @param condition
*/
ProductQueryFilter(String desc, String fieldName, String condition) {
this.desc = desc;
this.fieldName = fieldName;
this.condition = condition;
}
/**
*
* @return
*/
public String getDesc() {
return this.desc;
}
/**
*
* @return
*/
public String getFieldName() {
return this.fieldName;
}
/**
*
* @return
*/
public String getCondition() {
return this.condition;
}
/**
* ProductQueryFilter
* @param desc
* @return null
*/
public static ProductQueryFilter enumOf(String desc) {
// 获取所有的 ProductQueryFilter 枚举实例
ProductQueryFilter[] filters = ProductQueryFilter.values();
// 获取枚举实例的数量
int length = filters.length;
// 遍历所有枚举实例
for (int i = 0; i < length; i++) {
ProductQueryFilter filter = filters[i];
// 忽略大小写比较描述信息,如果匹配则返回该枚举实例
if (filter.desc.equalsIgnoreCase(desc)) return filter;
}
// 未找到匹配的枚举实例,返回 null
return null;
}
}

@ -15,44 +15,69 @@ import com.xmomen.module.product.model.CategoryModel;
import com.xmomen.module.product.service.CategoryService;
/**
*
* CategoryServiceImpl CategoryService
* 使 MyBatis Category CategoryModel
* @author xiao
*
*/
@Service
public class CategoryServiceImpl implements CategoryService {
// 注入 MyBatis 数据访问对象,用于执行数据库操作
@Autowired
MybatisDao mybatisDao;
/**
* CategoryModel
* @return CategoryModel
*/
public List<CategoryModel> getAllProductCategory() {
// 调用 MyBatis 的 SQLSessionTemplate 执行查询,获取所有产品类别的 Category 实体列表
List<Category> categoryList = mybatisDao.getSqlSessionTemplate().selectList(ProductCategoryMapper.ProductCategoryMapperNameSpace + "getProductCategoryList");
// 用于存储最终的 CategoryModel 列表
List<CategoryModel> categories = new ArrayList<CategoryModel>();
// 如果查询结果不为空
if(categoryList != null) {
// 使用 TreeMap 存储顶级类别TreeMap 会根据键的自然顺序排序
Map<String, CategoryModel> topCategories = new TreeMap<String, CategoryModel>();
// 遍历 Category 实体列表
for(Category category: categoryList) {
// 创建一个新的 CategoryModel 对象
CategoryModel model = new CategoryModel();
// 设置 CategoryModel 的 ID
model.setId(category.getId());
// 初始假设该类别为叶子节点(没有子节点)
model.setLeaf(true);
// 设置 CategoryModel 的名称
model.setName(category.getName());
// 如果该类别没有父类别(即顶级类别)
if(category.getParentId() == null) {
// 将该顶级类别添加到 topCategories 映射中
topCategories.put(String.valueOf(category.getId()), model);
} else {
// 根据父类别 ID 从 topCategories 映射中获取父类别
CategoryModel parentCategory = topCategories.get(String.valueOf(category.getParentId()));
// 如果找到了父类别
if(parentCategory != null) {
// 说明该父类别有子节点,不是叶子节点
parentCategory.setLeaf(false);
// 设置当前类别模型的父类别 ID
model.setParentId(parentCategory.getId());
// 设置当前类别模型的父类别名称
model.setParentName(parentCategory.getName());
// 如果父类别还没有子节点列表
if(parentCategory.getNodes() == null) {
// 为父类别创建一个新的子节点列表
parentCategory.setNodes(new ArrayList<CategoryModel>());
}
// 将当前类别模型添加到父类别的子节点列表中
parentCategory.getNodes().add(model);
}
}
}
// 将 topCategories 映射中的所有值(即顶级类别)添加到最终的 categories 列表中
categories.addAll(topCategories.values());
}
// 返回最终的 CategoryModel 列表
return categories;
}
}

@ -17,88 +17,146 @@ import com.xmomen.module.product.model.ProductQuery;
import com.xmomen.module.product.service.ProductService;
import com.xmomen.module.resource.service.ResourceService;
/**
* ProductServiceImpl ProductService
* 使 MyBatis URL
*/
@Service
public class ProductServiceImpl implements ProductService {
// 注入 MyBatis 数据访问对象,用于执行数据库操作
@Autowired
MybatisDao mybatisDao;
/**
*
* @param productQuery
* @param limit
* @param offset
* @return
*/
@SuppressWarnings("unchecked")
@Override
public Page<ProductModel> getProductList(ProductQuery productQuery, Integer limit, Integer offset) {
// 调用 MyBatis 的分页查询方法,获取产品列表的分页对象
Page<ProductModel> pageModel = (Page<ProductModel>) mybatisDao.selectPage(ProductMapper.ProductMapperNameSpace + "getProductList", productQuery, limit, offset);
// 获取分页对象中的产品列表
List<ProductModel> products = pageModel.getResult();
// 如果产品列表不为空
if (products != null) {
// 遍历产品列表
for (ProductModel product : products) {
product.setBasePrice(null);//隐藏商品原价
// 隐藏商品原价
product.setBasePrice(null);
// 如果产品的图片 URL 为空
if (StringUtils.isEmpty(product.getPicUrl())) {
// 设置为默认图片路径
product.setPicUrl(ResourceUtilsService.getDefaultPicPath());
}
else {
} else {
// 转换为完整的 HTTP 路径
product.setPicUrl(ResourceUtilsService.getWholeHttpPath(product.getPicUrl()));
}
}
}
// 返回处理后的分页对象
return pageModel;
}
/**
* ID
* @param id ID
* @return ProductModel null
*/
@Override
public ProductModel getDetailById(Integer id) {
// 调用 MyBatis 的查询方法,根据产品 ID 获取产品详细信息列表
List<ProductModel> products = mybatisDao.getSqlSessionTemplate().selectList(ProductMapper.ProductMapperNameSpace + "getProductDetail", id);
// 用于存储产品的图片 URL 列表
List<String> picUrls = new ArrayList<String>();
// 用于存储默认图片 URL
String defaultPicUrl = null;
// 如果产品详细信息列表不为空
if (products != null && !products.isEmpty()) {
// 遍历产品详细信息列表
for (ProductModel product : products) {
// 如果产品的图片 URL 不为空
if (!StringUtils.isEmpty(product.getPicUrl())) {
// 如果该图片是默认图片
if (product.getIsDefaultPath()) {
// 记录默认图片 URL
defaultPicUrl = product.getPicUrl();
}
//else {
// 将图片 URL 转换为完整的 HTTP 路径并添加到图片 URL 列表中
picUrls.add(ResourceUtilsService.getWholeHttpPath(product.getPicUrl()));
//}
}
}
// 获取第一个产品详细信息对象
ProductModel detail = products.get(0);
// 如果图片 URL 列表为空
if(picUrls.isEmpty()) {
// 添加默认图片路径
picUrls.add(ResourceUtilsService.getDefaultPicPath());
}
// 设置产品的图片 URL 列表
detail.setPicUrls(picUrls);
detail.setBasePrice(null);//隐藏商品原价
// 隐藏商品原价
detail.setBasePrice(null);
// 如果默认图片 URL 为空
if (defaultPicUrl == null) {
// 如果产品的图片 URL 为空
if (StringUtils.isEmpty(detail.getPicUrl())) {
// 设置为默认图片路径
detail.setPicUrl(ResourceUtilsService.getDefaultPicPath());
}
else {
} else {
// 转换为完整的 HTTP 路径
detail.setPicUrl(ResourceUtilsService.getWholeHttpPath(detail.getPicUrl()));
}
}
else {
} else {
// 将默认图片 URL 转换为完整的 HTTP 路径并设置给产品
detail.setPicUrl(ResourceUtilsService.getWholeHttpPath(defaultPicUrl));
}
// 返回处理后的产品详细信息对象
return detail;
}
// 未找到产品信息,返回 null
return null;
}
/**
* ID
* @param itemIds ID
* @return ID
*/
@Override
public List<ProductModel> getProducts(List<Integer> itemIds) {
// 如果产品 ID 列表为空
if (CollectionUtils.isEmpty(itemIds)) {
// 返回一个空的产品列表
return new ArrayList<ProductModel>();
}
// 创建产品查询条件对象
ProductQuery productQuery = new ProductQuery();
// 设置查询条件中的产品 ID 列表
productQuery.setProductIds(itemIds);
// 调用 MyBatis 的查询方法,根据产品 ID 列表获取产品列表
List<ProductModel> products = mybatisDao.getSqlSessionTemplate().selectList(ProductMapper.ProductMapperNameSpace + "getProductsByIds", productQuery);
// 如果产品列表不为空
if (products != null && !products.isEmpty()) {
// 遍历产品列表
for (ProductModel product : products) {
product.setBasePrice(null);//隐藏商品原价
// 隐藏商品原价
product.setBasePrice(null);
// 如果产品的图片 URL 为空
if (StringUtils.isEmpty(product.getPicUrl())) {
// 设置为默认图片路径
product.setPicUrl(ResourceUtilsService.getDefaultPicPath());
}
else {
} else {
// 转换为完整的 HTTP 路径
product.setPicUrl(ResourceUtilsService.getWholeHttpPath(product.getPicUrl()));
}
}
}
// 返回处理后的产品列表
return products;
}
}
Loading…
Cancel
Save