提交 57a9c31f authored 作者: douxy's avatar douxy

CP稽核信息保存接口改造

上级 efb77995
...@@ -275,6 +275,10 @@ ...@@ -275,6 +275,10 @@
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<version>2.11.4</version> <!-- 与SpringBoot版本兼容的版本 --> <version>2.11.4</version> <!-- 与SpringBoot版本兼容的版本 -->
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.wangxiaolu.promotion.controller.activity.examine; package com.wangxiaolu.promotion.controller.activity.examine;
import com.wangxiaolu.promotion.pojo.activity.examine.dto.ActivityExamineDto; import com.wangxiaolu.promotion.pojo.activity.examine.dto.ActivityExamineDto;
import com.wangxiaolu.promotion.pojo.activity.examine.vo.ExaPlanVo;
import com.wangxiaolu.promotion.pojo.activity.inspectionInfo.dto.InspectionInfoDto;
import com.wangxiaolu.promotion.pojo.activity.inspectionInfo.vo.InspectionInfoVO;
import com.wangxiaolu.promotion.result.basedata.R; import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.examine.ExaPlanCoreService; import com.wangxiaolu.promotion.service.activity.examine.ExaPlanCoreService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -25,19 +28,33 @@ public class ExaPlanCoreController { ...@@ -25,19 +28,33 @@ public class ExaPlanCoreController {
@Autowired @Autowired
private ExaPlanCoreService exaPlanCoreService; private ExaPlanCoreService exaPlanCoreService;
// @PostMapping("/save")
// public R saveOne(@RequestBody ExaPlanVo exaPlanVo) {
// ActivityExamineDto examineDto = new ActivityExamineDto();
// BeanUtils.copyProperties(exaPlanVo, examineDto);
// ActivityExamineDto examineN = null;
// if (Objects.isNull(exaPlanVo.getId())) {
// examineDto.setCreateBy(exaPlanVo.getEmployeeName());
// examineN = saveOne(examineDto);
// } else {
// examineDto.setModifyBy(exaPlanVo.getEmployeeName());
// examineN = updateById(examineDto);
// }
// return R.success(examineN);
// }
@PostMapping("/save") @PostMapping("/save")
public R saveOne(@RequestBody ExaPlanVo exaPlanVo) { public R saveOne(@RequestBody InspectionInfoVO inspectionInfoVO) {
ActivityExamineDto examineDto = new ActivityExamineDto(); InspectionInfoDto inspectionInfoDto = new InspectionInfoDto();
BeanUtils.copyProperties(exaPlanVo, examineDto); BeanUtils.copyProperties(inspectionInfoVO, inspectionInfoDto);
ActivityExamineDto examineN = null; InspectionInfoDto inspection = null;
if (Objects.isNull(exaPlanVo.getId())) { if (Objects.isNull(inspectionInfoVO.getId())) {
examineDto.setCreateBy(exaPlanVo.getEmployeeName()); inspection = exaPlanCoreService.saveV2(inspectionInfoDto);
examineN = saveOne(examineDto);
} else { } else {
examineDto.setModifyBy(exaPlanVo.getEmployeeName()); inspection = exaPlanCoreService.updateByIdV2(inspectionInfoDto);
examineN = updateById(examineDto);
} }
return R.success(examineN); return R.success(inspection);
} }
private ActivityExamineDto saveOne(ActivityExamineDto examineDto) { private ActivityExamineDto saveOne(ActivityExamineDto examineDto) {
......
...@@ -3,7 +3,7 @@ package com.wangxiaolu.promotion.domain.examine.mapper; ...@@ -3,7 +3,7 @@ package com.wangxiaolu.promotion.domain.examine.mapper;
import com.wangxiaolu.promotion.domain.examine.mapper.entity.ActivityExamineDO; import com.wangxiaolu.promotion.domain.examine.mapper.entity.ActivityExamineDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/** /**
* @author a02200059 * @author a02200059
......
package com.wangxiaolu.promotion.domain.inspection.dao;
import com.wangxiaolu.promotion.domain.inspection.wrapper.InspectionInfoWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.inspectionInfo.dto.InspectionInfoDto;
/**
* @author DouXinYu
* @description 针对表【inspection_info(稽查信息表)】的数据库操作Service
* @createDate 2026-01-08 17:03:39
*/
public interface InspectionInfoDao {
InspectionInfoDto selectById(Long id);
InspectionInfoDto selectByPlanId(Long planId);
InspectionInfoDto save(InspectionInfoDto inspectionInfoDto);
InspectionInfoDto updateById(InspectionInfoDto inspectionInfoDto);
void page(PageInfo pageInfo, InspectionInfoWrapper wrapper);
}
\ No newline at end of file
package com.wangxiaolu.promotion.domain.inspection.dao.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wangxiaolu.promotion.common.util.BeanUtils;
import com.wangxiaolu.promotion.domain.inspection.dao.InspectionInfoDao;
import com.wangxiaolu.promotion.domain.inspection.mapper.InspectionInfoMapper;
import com.wangxiaolu.promotion.domain.inspection.mapper.entity.InspectionInfoDO;
import com.wangxiaolu.promotion.domain.inspection.wrapper.InspectionInfoWrapper;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.inspectionInfo.dto.InspectionInfoDto;
import com.wangxiaolu.promotion.result.basedata.RCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.Objects;
/**
* @author DouXinYu
* @description 针对表【inspection_info(稽查信息表)】的数据库操作Service实现
* @createDate 2026-01-08 17:03:39
*/
@Service
public class InspectionInfoDaoImpl implements InspectionInfoDao {
@Autowired
private InspectionInfoMapper inspectionInfoMapper;
/**
* 根据ID查询稽查信息
* @param id 稽核ID
* @return 稽查信息DTO
*/
@Override
public InspectionInfoDto selectById(Long id) {
InspectionInfoDO inspectionInfoDO = inspectionInfoMapper.selectById(id);
return convertDoToDto(inspectionInfoDO);
}
/**
* 根据计划ID查询稽查信息
* @param planId 门店对应的计划ID
* @return 稽查信息DTO
*/
@Override
public InspectionInfoDto selectByPlanId(Long planId) {
InspectionInfoDO inspectionInfoDO = inspectionInfoMapper.selectByPlanId(planId);
return convertDoToDto(inspectionInfoDO);
}
/**
* 保存稽查信息
* @param inspectionDto 稽查信息DTO
* @return 保存后的稽查信息DTO
*/
@Override
public InspectionInfoDto save(InspectionInfoDto inspectionDto) {
try {
InspectionInfoDO inspectionDO = new InspectionInfoDO();
// 拷贝基础属性
BeanUtils.copyProperties(inspectionDto, inspectionDO);
// 处理JSON数组类型字段(照片链接)
convertArrayToString(inspectionDO, inspectionDto);
// 插入数据库
inspectionInfoMapper.insert(inspectionDO);
// 查询插入后的完整数据并返回
InspectionInfoDO savedDO = inspectionInfoMapper.selectById(inspectionDO.getId());
return convertDoToDto(savedDO);
} catch (Exception e) {
String eMsg = e.getCause() != null ? e.getCause().getMessage() : "";
// 处理plan_id唯一键冲突(对应数据库plan_id_unique索引)
if (eMsg.contains("for key 'plan_id_unique'")) {
throw new ParamException(RCode.DATA_HAVE_ERROR);
}
return null;
}
}
/**
* 根据ID更新稽查信息
* @param inspectionDto 稽查信息DTO
* @return 更新后的稽查信息DTO
*/
@Override
public InspectionInfoDto updateById(InspectionInfoDto inspectionDto) {
InspectionInfoDO inspectionDO = new InspectionInfoDO();
// 拷贝基础属性
BeanUtils.copyProperties(inspectionDto, inspectionDO);
// 处理JSON数组类型字段(照片链接)
convertArrayToString(inspectionDO, inspectionDto);
// 更新数据库
inspectionInfoMapper.updateById(inspectionDO);
// 查询更新后的完整数据并返回
InspectionInfoDO updatedDO = inspectionInfoMapper.selectById(inspectionDO.getId());
return convertDoToDto(updatedDO);
}
/**
* 分页查询稽查信息
* @param pageInfo 分页参数
* @param wrapper 查询条件封装
*/
@Override
public void page(PageInfo pageInfo, InspectionInfoWrapper wrapper) {
LambdaQueryWrapper<InspectionInfoDO> queryWrapper = buildQueryWrapper(wrapper);
// 构建MyBatis-Plus分页对象
Page<InspectionInfoDO> page = new Page<>(pageInfo.getPageNum(), pageInfo.getPageSize());
// 执行分页查询
Page<InspectionInfoDO> doPage = inspectionInfoMapper.selectPage(page, queryWrapper);
// 转换分页结果
pageInfo.pageCovert(doPage);
pageInfo.setRecords(doPage.getRecords());
}
/**
* 构建查询条件
* @param wrapper 查询条件封装类
* @return LambdaQueryWrapper
*/
private LambdaQueryWrapper<InspectionInfoDO> buildQueryWrapper(InspectionInfoWrapper wrapper) {
LambdaQueryWrapper<InspectionInfoDO> queryWrapper = new LambdaQueryWrapper<>();
// 根据经销商ID查询
if (Objects.nonNull(wrapper.getDealerId())) {
queryWrapper.eq(InspectionInfoDO::getDealerId, wrapper.getDealerId());
}
// 根据门店编码查询
if (Objects.nonNull(wrapper.getStoreCode())) {
queryWrapper.eq(InspectionInfoDO::getStoreCode, wrapper.getStoreCode());
}
// 根据计划ID查询
if (Objects.nonNull(wrapper.getPlanId())) {
queryWrapper.eq(InspectionInfoDO::getPlanId, wrapper.getPlanId());
}
// 根据ID查询
if (Objects.nonNull(wrapper.getId())){
queryWrapper.eq(InspectionInfoDO::getId, wrapper.getId());
}
// 根据门店名称模糊查询
if (!StringUtils.isEmpty(wrapper.getStoreName())){
queryWrapper.like(InspectionInfoDO::getStoreName,wrapper.getStoreName());
}
return queryWrapper;
}
/**
* 将DO转换为DTO(处理JSON字段)
* @param inspectionInfoDO 数据库实体
* @return 前端展示DTO
*/
private InspectionInfoDto convertDoToDto(InspectionInfoDO inspectionInfoDO) {
if (Objects.isNull(inspectionInfoDO)) {
return null;
}
// 基础属性转换
InspectionInfoDto dto = BeanUtils.transitionDto(inspectionInfoDO, InspectionInfoDto.class);
// 处理JSON数组类型的照片字段(促销员在岗/离岗佐证照)
dto.setTemWorkPhotos(Objects.isNull(inspectionInfoDO.getTemWorkPhotos())
? null : JSONArray.parseArray(inspectionInfoDO.getTemWorkPhotos()));
return dto;
}
/**
* 将DTO中的JSON数组转换为字符串(存入数据库)
* @param inspectionDO 数据库实体
* @param inspectionDto 前端传输DTO
*/
private void convertArrayToString(InspectionInfoDO inspectionDO, InspectionInfoDto inspectionDto) {
// 处理促销员在岗/离岗佐证照(JSONArray -> String)
inspectionDO.setTemWorkPhotos(Objects.isNull(inspectionDto.getTemWorkPhotos())
? null : JSONObject.toJSONString(inspectionDto.getTemWorkPhotos()));
}
}
package com.wangxiaolu.promotion.domain.inspection.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wangxiaolu.promotion.domain.inspection.mapper.entity.InspectionInfoDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
/**
* @author DouXinYu
* @description 针对表【inspection_info(稽查信息表)】的数据库操作Mapper
* @createDate 2026-01-08 17:03:39
*/
@Mapper
public interface InspectionInfoMapper extends BaseMapper<InspectionInfoDO> {
@Select("select * from inspection_info where plan_id = #{planId}")
InspectionInfoDO selectByPlanId(Long planId);
}
package com.wangxiaolu.promotion.domain.inspection.mapper.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 稽查信息表
* @TableName inspection_info
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("inspection_info")
public class InspectionInfoDO implements Serializable {
/**
* 当前稽核ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 当前门店对应的计划
*/
private Long planId;
/**
* 所属战区名称
*/
private String depQcOrgName;
/**
* 经销商代码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 门店编码
*/
private String storeCode;
/**
* 门店名称
*/
private String storeName;
/**
* 门店地址
*/
private String addr;
/**
* 当前稽查的活动形式
*/
private String pattern;
/**
* 稽查店铺的日期
*/
private Date inspectionDate;
/**
* 开始稽查的具体时间
*/
private String inspectionTime;
/**
* 结束稽查离开店铺的时间
*/
private String leaveStoreTime;
/**
* 促销员是否在岗的状态(是/否)
*/
private String onDutyStatus;
/**
* 促销员的在岗率(百分比)
*/
private BigDecimal onDutyRate;
/**
* 实际在岗的促销人员数量
*/
private Integer onDutyCount;
/**
* 促销员当前是否在岗(是/否)
*/
private String isOnDuty;
/**
* 促销员未在岗时电话拨出的时间
*/
private String offDutyCallTime;
/**
* 电话是否接通(是/否)
*/
private String isCallConnected;
/**
* 5分钟后再次拨打电话是否接通(是/否)
*/
private String isReconnectedAfter5min;
/**
* 10分钟内是否返回岗位(是/否)
*/
private String isBackToWorkWithin10min;
/**
* 本次稽查的总得分
*/
private Integer totalScore;
/**
* 销售相关考核得分(满分50分)
*/
private Integer salesAssessmentScore;
/**
* 促销相关考核得分(满分50分)
*/
private Integer promotionAssessmentScore;
/**
* 是否有档期或特价活动得分(满分20分)
*/
private Integer hasSchedulePromotionScore;
/**
* 地堆上是否陈列主推产品得分(满分8分)
*/
private Integer groundStackHasMainProductScore;
/**
* 地堆上是否只陈列王小卤产品得分(满分8分)
*/
private Integer groundStackOnlyWangxiaoluScore;
/**
* 地堆铺货是否饱满得分(满分4分)
*/
private Integer groundStackStockFullScore;
/**
* 是否配备各类宣传物料得分(满分10分)
*/
private Integer hasPromotionMaterialsScore;
/**
* 是否穿着王小卤品牌围裙得分(满分3分)
*/
private Integer wearsWangxiaoluApronScore;
/**
* 是否准备试吃品得分(满分5分)
*/
private Integer hasTastingProductScore;
/**
* 是否设置试吃台得分(满分3分)
*/
private Integer hasTastingTableScore;
/**
* 是否准备试吃盘得分(满分3分)
*/
private Integer hasTastingPlateScore;
/**
* 是否准备试吃杯得分(满分3分)
*/
private Integer hasTastingCupScore;
/**
* 是否佩戴口罩和手套得分(满分3分)
*/
private Integer wearsMaskGlovesScore;
/**
* 是否提供牙签加分(满分2分)
*/
private Integer hasToothpickBonusScore;
/**
* 是否配备垃圾桶加分(满分2分)
*/
private Integer hasGarbageCanBonusScore;
/**
* 是否知晓远距离招揽话术得分(满分5分)
*/
private Integer knowsDistanceSolicitSkillScore;
/**
* 是否知晓黑鸭或卤香产品卖点得分(满分5分)
*/
private Integer knowsProductSellingPointsScore;
/**
* 人流经过时是否主动迎接得分(满分5分)
*/
private Integer greetsCustomersActivelyScore;
/**
* 是否讲解产品卖点推荐产品得分(满分3分)
*/
private Integer introducesProductScoresScore;
/**
* 是否有促进销售的动作得分(满分2分)
*/
private Integer promotesSalesActivelyScore;
/**
* 是否配置活动赠品得分(满分5分)
*/
private Integer hasPromotionGiftsScore;
/**
* 是否主动销售非王小卤产品得分(满分5分)
*/
private Integer sellsNonWangxiaoluProductsScore;
/**
* 促销活动的具体内容描述
*/
private String promotionActivityContent;
/**
* 是否设置了地堆陈列(是/否)
*/
private String hasGroundStack;
/**
* 是否有黑鸭产品陈列(是/否)
*/
private String hasBlackDuckDisplay;
/**
* 是否有黑鸭产品试吃品(是/否)
*/
private String hasBlackDuckTasting;
/**
* 其他品牌是否设置了试吃台(是/否)
*/
private String otherBrandHasTastingTable;
/**
* 10分钟内经过促销人员的人流数量
*/
private BigDecimal pedestrianCountWithin10min;
/**
* 试吃品的总数量
*/
private BigDecimal totalTastingProductCount;
/**
* 按口味统计的试吃品数量
*/
private String tastingProductCountByFlavor;
/**
* 其他品牌试吃台的佐证照片链接
*/
private String otherBrandTastingTableProofUrl;
/**
* 销售非王小卤产品的佐证照片链接
*/
private String nonWangxiaoluSalesProofUrl;
/**
* 门头照
*/
private String storePicture;
/**
* 促销员在岗/离岗佐证照
*/
private String temWorkPhotos;
/**
* 特殊陈列照片
*/
private String storeTcPhoto;
/**
* 主货架照片
*/
private String storeZhiPhoto;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
InspectionInfoDO other = (InspectionInfoDO) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getPlanId() == null ? other.getPlanId() == null : this.getPlanId().equals(other.getPlanId()))
&& (this.getDepQcOrgName() == null ? other.getDepQcOrgName() == null : this.getDepQcOrgName().equals(other.getDepQcOrgName()))
&& (this.getDealerId() == null ? other.getDealerId() == null : this.getDealerId().equals(other.getDealerId()))
&& (this.getDealerName() == null ? other.getDealerName() == null : this.getDealerName().equals(other.getDealerName()))
&& (this.getStoreCode() == null ? other.getStoreCode() == null : this.getStoreCode().equals(other.getStoreCode()))
&& (this.getStoreName() == null ? other.getStoreName() == null : this.getStoreName().equals(other.getStoreName()))
&& (this.getAddr() == null ? other.getAddr() == null : this.getAddr().equals(other.getAddr()))
&& (this.getPattern() == null ? other.getPattern() == null : this.getPattern().equals(other.getPattern()))
&& (this.getInspectionDate() == null ? other.getInspectionDate() == null : this.getInspectionDate().equals(other.getInspectionDate()))
&& (this.getInspectionTime() == null ? other.getInspectionTime() == null : this.getInspectionTime().equals(other.getInspectionTime()))
&& (this.getLeaveStoreTime() == null ? other.getLeaveStoreTime() == null : this.getLeaveStoreTime().equals(other.getLeaveStoreTime()))
&& (this.getOnDutyStatus() == null ? other.getOnDutyStatus() == null : this.getOnDutyStatus().equals(other.getOnDutyStatus()))
&& (this.getOnDutyRate() == null ? other.getOnDutyRate() == null : this.getOnDutyRate().equals(other.getOnDutyRate()))
&& (this.getOnDutyCount() == null ? other.getOnDutyCount() == null : this.getOnDutyCount().equals(other.getOnDutyCount()))
&& (this.getIsOnDuty() == null ? other.getIsOnDuty() == null : this.getIsOnDuty().equals(other.getIsOnDuty()))
&& (this.getOffDutyCallTime() == null ? other.getOffDutyCallTime() == null : this.getOffDutyCallTime().equals(other.getOffDutyCallTime()))
&& (this.getIsCallConnected() == null ? other.getIsCallConnected() == null : this.getIsCallConnected().equals(other.getIsCallConnected()))
&& (this.getIsReconnectedAfter5min() == null ? other.getIsReconnectedAfter5min() == null : this.getIsReconnectedAfter5min().equals(other.getIsReconnectedAfter5min()))
&& (this.getIsBackToWorkWithin10min() == null ? other.getIsBackToWorkWithin10min() == null : this.getIsBackToWorkWithin10min().equals(other.getIsBackToWorkWithin10min()))
&& (this.getTotalScore() == null ? other.getTotalScore() == null : this.getTotalScore().equals(other.getTotalScore()))
&& (this.getSalesAssessmentScore() == null ? other.getSalesAssessmentScore() == null : this.getSalesAssessmentScore().equals(other.getSalesAssessmentScore()))
&& (this.getPromotionAssessmentScore() == null ? other.getPromotionAssessmentScore() == null : this.getPromotionAssessmentScore().equals(other.getPromotionAssessmentScore()))
&& (this.getHasSchedulePromotionScore() == null ? other.getHasSchedulePromotionScore() == null : this.getHasSchedulePromotionScore().equals(other.getHasSchedulePromotionScore()))
&& (this.getGroundStackHasMainProductScore() == null ? other.getGroundStackHasMainProductScore() == null : this.getGroundStackHasMainProductScore().equals(other.getGroundStackHasMainProductScore()))
&& (this.getGroundStackOnlyWangxiaoluScore() == null ? other.getGroundStackOnlyWangxiaoluScore() == null : this.getGroundStackOnlyWangxiaoluScore().equals(other.getGroundStackOnlyWangxiaoluScore()))
&& (this.getGroundStackStockFullScore() == null ? other.getGroundStackStockFullScore() == null : this.getGroundStackStockFullScore().equals(other.getGroundStackStockFullScore()))
&& (this.getHasPromotionMaterialsScore() == null ? other.getHasPromotionMaterialsScore() == null : this.getHasPromotionMaterialsScore().equals(other.getHasPromotionMaterialsScore()))
&& (this.getWearsWangxiaoluApronScore() == null ? other.getWearsWangxiaoluApronScore() == null : this.getWearsWangxiaoluApronScore().equals(other.getWearsWangxiaoluApronScore()))
&& (this.getHasTastingProductScore() == null ? other.getHasTastingProductScore() == null : this.getHasTastingProductScore().equals(other.getHasTastingProductScore()))
&& (this.getHasTastingTableScore() == null ? other.getHasTastingTableScore() == null : this.getHasTastingTableScore().equals(other.getHasTastingTableScore()))
&& (this.getHasTastingPlateScore() == null ? other.getHasTastingPlateScore() == null : this.getHasTastingPlateScore().equals(other.getHasTastingPlateScore()))
&& (this.getHasTastingCupScore() == null ? other.getHasTastingCupScore() == null : this.getHasTastingCupScore().equals(other.getHasTastingCupScore()))
&& (this.getWearsMaskGlovesScore() == null ? other.getWearsMaskGlovesScore() == null : this.getWearsMaskGlovesScore().equals(other.getWearsMaskGlovesScore()))
&& (this.getHasToothpickBonusScore() == null ? other.getHasToothpickBonusScore() == null : this.getHasToothpickBonusScore().equals(other.getHasToothpickBonusScore()))
&& (this.getHasGarbageCanBonusScore() == null ? other.getHasGarbageCanBonusScore() == null : this.getHasGarbageCanBonusScore().equals(other.getHasGarbageCanBonusScore()))
&& (this.getKnowsDistanceSolicitSkillScore() == null ? other.getKnowsDistanceSolicitSkillScore() == null : this.getKnowsDistanceSolicitSkillScore().equals(other.getKnowsDistanceSolicitSkillScore()))
&& (this.getKnowsProductSellingPointsScore() == null ? other.getKnowsProductSellingPointsScore() == null : this.getKnowsProductSellingPointsScore().equals(other.getKnowsProductSellingPointsScore()))
&& (this.getGreetsCustomersActivelyScore() == null ? other.getGreetsCustomersActivelyScore() == null : this.getGreetsCustomersActivelyScore().equals(other.getGreetsCustomersActivelyScore()))
&& (this.getIntroducesProductScoresScore() == null ? other.getIntroducesProductScoresScore() == null : this.getIntroducesProductScoresScore().equals(other.getIntroducesProductScoresScore()))
&& (this.getPromotesSalesActivelyScore() == null ? other.getPromotesSalesActivelyScore() == null : this.getPromotesSalesActivelyScore().equals(other.getPromotesSalesActivelyScore()))
&& (this.getHasPromotionGiftsScore() == null ? other.getHasPromotionGiftsScore() == null : this.getHasPromotionGiftsScore().equals(other.getHasPromotionGiftsScore()))
&& (this.getSellsNonWangxiaoluProductsScore() == null ? other.getSellsNonWangxiaoluProductsScore() == null : this.getSellsNonWangxiaoluProductsScore().equals(other.getSellsNonWangxiaoluProductsScore()))
&& (this.getPromotionActivityContent() == null ? other.getPromotionActivityContent() == null : this.getPromotionActivityContent().equals(other.getPromotionActivityContent()))
&& (this.getHasGroundStack() == null ? other.getHasGroundStack() == null : this.getHasGroundStack().equals(other.getHasGroundStack()))
&& (this.getHasBlackDuckDisplay() == null ? other.getHasBlackDuckDisplay() == null : this.getHasBlackDuckDisplay().equals(other.getHasBlackDuckDisplay()))
&& (this.getHasBlackDuckTasting() == null ? other.getHasBlackDuckTasting() == null : this.getHasBlackDuckTasting().equals(other.getHasBlackDuckTasting()))
&& (this.getOtherBrandHasTastingTable() == null ? other.getOtherBrandHasTastingTable() == null : this.getOtherBrandHasTastingTable().equals(other.getOtherBrandHasTastingTable()))
&& (this.getPedestrianCountWithin10min() == null ? other.getPedestrianCountWithin10min() == null : this.getPedestrianCountWithin10min().equals(other.getPedestrianCountWithin10min()))
&& (this.getTotalTastingProductCount() == null ? other.getTotalTastingProductCount() == null : this.getTotalTastingProductCount().equals(other.getTotalTastingProductCount()))
&& (this.getTastingProductCountByFlavor() == null ? other.getTastingProductCountByFlavor() == null : this.getTastingProductCountByFlavor().equals(other.getTastingProductCountByFlavor()))
&& (this.getOtherBrandTastingTableProofUrl() == null ? other.getOtherBrandTastingTableProofUrl() == null : this.getOtherBrandTastingTableProofUrl().equals(other.getOtherBrandTastingTableProofUrl()))
&& (this.getNonWangxiaoluSalesProofUrl() == null ? other.getNonWangxiaoluSalesProofUrl() == null : this.getNonWangxiaoluSalesProofUrl().equals(other.getNonWangxiaoluSalesProofUrl()))
&& (this.getStorePicture() == null ? other.getStorePicture() == null : this.getStorePicture().equals(other.getStorePicture()))
&& (this.getTemWorkPhotos() == null ? other.getTemWorkPhotos() == null : this.getTemWorkPhotos().equals(other.getTemWorkPhotos()))
&& (this.getStoreTcPhoto() == null ? other.getStoreTcPhoto() == null : this.getStoreTcPhoto().equals(other.getStoreTcPhoto()))
&& (this.getStoreZhiPhoto() == null ? other.getStoreZhiPhoto() == null : this.getStoreZhiPhoto().equals(other.getStoreZhiPhoto()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getPlanId() == null) ? 0 : getPlanId().hashCode());
result = prime * result + ((getDepQcOrgName() == null) ? 0 : getDepQcOrgName().hashCode());
result = prime * result + ((getDealerId() == null) ? 0 : getDealerId().hashCode());
result = prime * result + ((getDealerName() == null) ? 0 : getDealerName().hashCode());
result = prime * result + ((getStoreCode() == null) ? 0 : getStoreCode().hashCode());
result = prime * result + ((getStoreName() == null) ? 0 : getStoreName().hashCode());
result = prime * result + ((getAddr() == null) ? 0 : getAddr().hashCode());
result = prime * result + ((getPattern() == null) ? 0 : getPattern().hashCode());
result = prime * result + ((getInspectionDate() == null) ? 0 : getInspectionDate().hashCode());
result = prime * result + ((getInspectionTime() == null) ? 0 : getInspectionTime().hashCode());
result = prime * result + ((getLeaveStoreTime() == null) ? 0 : getLeaveStoreTime().hashCode());
result = prime * result + ((getOnDutyStatus() == null) ? 0 : getOnDutyStatus().hashCode());
result = prime * result + ((getOnDutyRate() == null) ? 0 : getOnDutyRate().hashCode());
result = prime * result + ((getOnDutyCount() == null) ? 0 : getOnDutyCount().hashCode());
result = prime * result + ((getIsOnDuty() == null) ? 0 : getIsOnDuty().hashCode());
result = prime * result + ((getOffDutyCallTime() == null) ? 0 : getOffDutyCallTime().hashCode());
result = prime * result + ((getIsCallConnected() == null) ? 0 : getIsCallConnected().hashCode());
result = prime * result + ((getIsReconnectedAfter5min() == null) ? 0 : getIsReconnectedAfter5min().hashCode());
result = prime * result + ((getIsBackToWorkWithin10min() == null) ? 0 : getIsBackToWorkWithin10min().hashCode());
result = prime * result + ((getTotalScore() == null) ? 0 : getTotalScore().hashCode());
result = prime * result + ((getSalesAssessmentScore() == null) ? 0 : getSalesAssessmentScore().hashCode());
result = prime * result + ((getPromotionAssessmentScore() == null) ? 0 : getPromotionAssessmentScore().hashCode());
result = prime * result + ((getHasSchedulePromotionScore() == null) ? 0 : getHasSchedulePromotionScore().hashCode());
result = prime * result + ((getGroundStackHasMainProductScore() == null) ? 0 : getGroundStackHasMainProductScore().hashCode());
result = prime * result + ((getGroundStackOnlyWangxiaoluScore() == null) ? 0 : getGroundStackOnlyWangxiaoluScore().hashCode());
result = prime * result + ((getGroundStackStockFullScore() == null) ? 0 : getGroundStackStockFullScore().hashCode());
result = prime * result + ((getHasPromotionMaterialsScore() == null) ? 0 : getHasPromotionMaterialsScore().hashCode());
result = prime * result + ((getWearsWangxiaoluApronScore() == null) ? 0 : getWearsWangxiaoluApronScore().hashCode());
result = prime * result + ((getHasTastingProductScore() == null) ? 0 : getHasTastingProductScore().hashCode());
result = prime * result + ((getHasTastingTableScore() == null) ? 0 : getHasTastingTableScore().hashCode());
result = prime * result + ((getHasTastingPlateScore() == null) ? 0 : getHasTastingPlateScore().hashCode());
result = prime * result + ((getHasTastingCupScore() == null) ? 0 : getHasTastingCupScore().hashCode());
result = prime * result + ((getWearsMaskGlovesScore() == null) ? 0 : getWearsMaskGlovesScore().hashCode());
result = prime * result + ((getHasToothpickBonusScore() == null) ? 0 : getHasToothpickBonusScore().hashCode());
result = prime * result + ((getHasGarbageCanBonusScore() == null) ? 0 : getHasGarbageCanBonusScore().hashCode());
result = prime * result + ((getKnowsDistanceSolicitSkillScore() == null) ? 0 : getKnowsDistanceSolicitSkillScore().hashCode());
result = prime * result + ((getKnowsProductSellingPointsScore() == null) ? 0 : getKnowsProductSellingPointsScore().hashCode());
result = prime * result + ((getGreetsCustomersActivelyScore() == null) ? 0 : getGreetsCustomersActivelyScore().hashCode());
result = prime * result + ((getIntroducesProductScoresScore() == null) ? 0 : getIntroducesProductScoresScore().hashCode());
result = prime * result + ((getPromotesSalesActivelyScore() == null) ? 0 : getPromotesSalesActivelyScore().hashCode());
result = prime * result + ((getHasPromotionGiftsScore() == null) ? 0 : getHasPromotionGiftsScore().hashCode());
result = prime * result + ((getSellsNonWangxiaoluProductsScore() == null) ? 0 : getSellsNonWangxiaoluProductsScore().hashCode());
result = prime * result + ((getPromotionActivityContent() == null) ? 0 : getPromotionActivityContent().hashCode());
result = prime * result + ((getHasGroundStack() == null) ? 0 : getHasGroundStack().hashCode());
result = prime * result + ((getHasBlackDuckDisplay() == null) ? 0 : getHasBlackDuckDisplay().hashCode());
result = prime * result + ((getHasBlackDuckTasting() == null) ? 0 : getHasBlackDuckTasting().hashCode());
result = prime * result + ((getOtherBrandHasTastingTable() == null) ? 0 : getOtherBrandHasTastingTable().hashCode());
result = prime * result + ((getPedestrianCountWithin10min() == null) ? 0 : getPedestrianCountWithin10min().hashCode());
result = prime * result + ((getTotalTastingProductCount() == null) ? 0 : getTotalTastingProductCount().hashCode());
result = prime * result + ((getTastingProductCountByFlavor() == null) ? 0 : getTastingProductCountByFlavor().hashCode());
result = prime * result + ((getOtherBrandTastingTableProofUrl() == null) ? 0 : getOtherBrandTastingTableProofUrl().hashCode());
result = prime * result + ((getNonWangxiaoluSalesProofUrl() == null) ? 0 : getNonWangxiaoluSalesProofUrl().hashCode());
result = prime * result + ((getStorePicture() == null) ? 0 : getStorePicture().hashCode());
result = prime * result + ((getTemWorkPhotos() == null) ? 0 : getTemWorkPhotos().hashCode());
result = prime * result + ((getStoreTcPhoto() == null) ? 0 : getStoreTcPhoto().hashCode());
result = prime * result + ((getStoreZhiPhoto() == null) ? 0 : getStoreZhiPhoto().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", planId=").append(planId);
sb.append(", depQcOrgName=").append(depQcOrgName);
sb.append(", dealerId=").append(dealerId);
sb.append(", dealerName=").append(dealerName);
sb.append(", storeCode=").append(storeCode);
sb.append(", storeName=").append(storeName);
sb.append(", addr=").append(addr);
sb.append(", pattern=").append(pattern);
sb.append(", inspectionDate=").append(inspectionDate);
sb.append(", inspectionTime=").append(inspectionTime);
sb.append(", leaveStoreTime=").append(leaveStoreTime);
sb.append(", onDutyStatus=").append(onDutyStatus);
sb.append(", onDutyRate=").append(onDutyRate);
sb.append(", onDutyCount=").append(onDutyCount);
sb.append(", isOnDuty=").append(isOnDuty);
sb.append(", offDutyCallTime=").append(offDutyCallTime);
sb.append(", isCallConnected=").append(isCallConnected);
sb.append(", isReconnectedAfter5min=").append(isReconnectedAfter5min);
sb.append(", isBackToWorkWithin10min=").append(isBackToWorkWithin10min);
sb.append(", totalScore=").append(totalScore);
sb.append(", salesAssessmentScore=").append(salesAssessmentScore);
sb.append(", promotionAssessmentScore=").append(promotionAssessmentScore);
sb.append(", hasSchedulePromotionScore=").append(hasSchedulePromotionScore);
sb.append(", groundStackHasMainProductScore=").append(groundStackHasMainProductScore);
sb.append(", groundStackOnlyWangxiaoluScore=").append(groundStackOnlyWangxiaoluScore);
sb.append(", groundStackStockFullScore=").append(groundStackStockFullScore);
sb.append(", hasPromotionMaterialsScore=").append(hasPromotionMaterialsScore);
sb.append(", wearsWangxiaoluApronScore=").append(wearsWangxiaoluApronScore);
sb.append(", hasTastingProductScore=").append(hasTastingProductScore);
sb.append(", hasTastingTableScore=").append(hasTastingTableScore);
sb.append(", hasTastingPlateScore=").append(hasTastingPlateScore);
sb.append(", hasTastingCupScore=").append(hasTastingCupScore);
sb.append(", wearsMaskGlovesScore=").append(wearsMaskGlovesScore);
sb.append(", hasToothpickBonusScore=").append(hasToothpickBonusScore);
sb.append(", hasGarbageCanBonusScore=").append(hasGarbageCanBonusScore);
sb.append(", knowsDistanceSolicitSkillScore=").append(knowsDistanceSolicitSkillScore);
sb.append(", knowsProductSellingPointsScore=").append(knowsProductSellingPointsScore);
sb.append(", greetsCustomersActivelyScore=").append(greetsCustomersActivelyScore);
sb.append(", introducesProductScoresScore=").append(introducesProductScoresScore);
sb.append(", promotesSalesActivelyScore=").append(promotesSalesActivelyScore);
sb.append(", hasPromotionGiftsScore=").append(hasPromotionGiftsScore);
sb.append(", sellsNonWangxiaoluProductsScore=").append(sellsNonWangxiaoluProductsScore);
sb.append(", promotionActivityContent=").append(promotionActivityContent);
sb.append(", hasGroundStack=").append(hasGroundStack);
sb.append(", hasBlackDuckDisplay=").append(hasBlackDuckDisplay);
sb.append(", hasBlackDuckTasting=").append(hasBlackDuckTasting);
sb.append(", otherBrandHasTastingTable=").append(otherBrandHasTastingTable);
sb.append(", pedestrianCountWithin10Min=").append(pedestrianCountWithin10min);
sb.append(", totalTastingProductCount=").append(totalTastingProductCount);
sb.append(", tastingProductCountByFlavor=").append(tastingProductCountByFlavor);
sb.append(", otherBrandTastingTableProofUrl=").append(otherBrandTastingTableProofUrl);
sb.append(", nonWangxiaoluSalesProofUrl=").append(nonWangxiaoluSalesProofUrl);
sb.append(", storePicture=").append(storePicture);
sb.append(", temWorkPhotos=").append(temWorkPhotos);
sb.append(", storeTcPhoto=").append(storeTcPhoto);
sb.append(", storeZhiPhoto=").append(storeZhiPhoto);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}
\ No newline at end of file
package com.wangxiaolu.promotion.domain.inspection.wrapper;
import lombok.Data;
/**
* @Author: DouXinYu
* @Date: 2026-01-08 17:17
* @Description:
*/
@Data
public class InspectionInfoWrapper {
/**
* 当前稽核ID
*/
Long id;
/**
* 当前门店对应的计划
*/
Long planId;
/**
* 经销商代码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 门店编码
*/
private String storeCode;
/**
* 门店名称
*/
private String storeName;
}
package com.wangxiaolu.promotion.pojo.activity.inspectionInfo.dto;
import com.alibaba.fastjson2.JSONArray;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Author: DouXinYu
* @Date: 2026-01-08 17:12
* @Description: 稽核信息表V2.0 数据模型
*/
@Data
public class InspectionInfoDto {
/**
* 当前稽核ID
*/
private Long id;
/**
* 当前门店对应的计划
*/
private Long planId;
/**
* 所属战区名称
*/
private String depQcOrgName;
/**
* 经销商代码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 门店编码
*/
private String storeCode;
/**
* 门店名称
*/
private String storeName;
/**
* 门店地址
*/
private String addr;
/**
* 当前稽查的活动形式
*/
private String pattern;
/**
* 稽查店铺的日期
*/
private Date inspectionDate;
/**
* 开始稽查的具体时间
*/
private String inspectionTime;
/**
* 结束稽查离开店铺的时间
*/
private String leaveStoreTime;
/**
* 促销员是否在岗的状态(是/否)
*/
private String onDutyStatus;
/**
* 促销员的在岗率(百分比)
*/
private BigDecimal onDutyRate;
/**
* 实际在岗的促销人员数量
*/
private Integer onDutyCount;
/**
* 促销员当前是否在岗(是/否)
*/
private String isOnDuty;
/**
* 促销员未在岗时电话拨出的时间
*/
private String offDutyCallTime;
/**
* 电话是否接通(是/否)
*/
private String isCallConnected;
/**
* 5分钟后再次拨打电话是否接通(是/否)
*/
private String isReconnectedAfter5min;
/**
* 10分钟内是否返回岗位(是/否)
*/
private String isBackToWorkWithin10min;
/**
* 本次稽查的总得分
*/
private Integer totalScore;
/**
* 销售相关考核得分(满分50分)
*/
private Integer salesAssessmentScore;
/**
* 促销相关考核得分(满分50分)
*/
private Integer promotionAssessmentScore;
/**
* 是否有档期或特价活动得分(满分20分)
*/
private Integer hasSchedulePromotionScore;
/**
* 地堆上是否陈列主推产品得分(满分8分)
*/
private Integer groundStackHasMainProductScore;
/**
* 地堆上是否只陈列王小卤产品得分(满分8分)
*/
private Integer groundStackOnlyWangxiaoluScore;
/**
* 地堆铺货是否饱满得分(满分4分)
*/
private Integer groundStackStockFullScore;
/**
* 是否配备各类宣传物料得分(满分10分)
*/
private Integer hasPromotionMaterialsScore;
/**
* 是否穿着王小卤品牌围裙得分(满分3分)
*/
private Integer wearsWangxiaoluApronScore;
/**
* 是否准备试吃品得分(满分5分)
*/
private Integer hasTastingProductScore;
/**
* 是否设置试吃台得分(满分3分)
*/
private Integer hasTastingTableScore;
/**
* 是否准备试吃盘得分(满分3分)
*/
private Integer hasTastingPlateScore;
/**
* 是否准备试吃杯得分(满分3分)
*/
private Integer hasTastingCupScore;
/**
* 是否佩戴口罩和手套得分(满分3分)
*/
private Integer wearsMaskGlovesScore;
/**
* 是否提供牙签加分(满分2分)
*/
private Integer hasToothpickBonusScore;
/**
* 是否配备垃圾桶加分(满分2分)
*/
private Integer hasGarbageCanBonusScore;
/**
* 是否知晓远距离招揽话术得分(满分5分)
*/
private Integer knowsDistanceSolicitSkillScore;
/**
* 是否知晓黑鸭或卤香产品卖点得分(满分5分)
*/
private Integer knowsProductSellingPointsScore;
/**
* 人流经过时是否主动迎接得分(满分5分)
*/
private Integer greetsCustomersActivelyScore;
/**
* 是否讲解产品卖点推荐产品得分(满分3分)
*/
private Integer introducesProductScoresScore;
/**
* 是否有促进销售的动作得分(满分2分)
*/
private Integer promotesSalesActivelyScore;
/**
* 是否配置活动赠品得分(满分5分)
*/
private Integer hasPromotionGiftsScore;
/**
* 是否主动销售非王小卤产品得分(满分5分)
*/
private Integer sellsNonWangxiaoluProductsScore;
/**
* 促销活动的具体内容描述
*/
private String promotionActivityContent;
/**
* 是否设置了地堆陈列(是/否)
*/
private String hasGroundStack;
/**
* 是否有黑鸭产品陈列(是/否)
*/
private String hasBlackDuckDisplay;
/**
* 是否有黑鸭产品试吃品(是/否)
*/
private String hasBlackDuckTasting;
/**
* 其他品牌是否设置了试吃台(是/否)
*/
private String otherBrandHasTastingTable;
/**
* 10分钟内经过促销人员的人流数量
*/
private BigDecimal pedestrianCountWithin10min;
/**
* 试吃品的总数量
*/
private BigDecimal totalTastingProductCount;
/**
* 按口味统计的试吃品数量
*/
private String tastingProductCountByFlavor;
/**
* 其他品牌试吃台的佐证照片链接
*/
private String otherBrandTastingTableProofUrl;
/**
* 销售非王小卤产品的佐证照片链接
*/
private String nonWangxiaoluSalesProofUrl;
/**
* 门头照
*/
private String storePicture;
/**
* 促销员在岗/离岗佐证照
*/
private JSONArray temWorkPhotos;
/**
* 特殊陈列照片
*/
private String storeTcPhoto;
/**
* 主货架照片
*/
private String storeZhiPhoto;
}
package com.wangxiaolu.promotion.pojo.activity.inspectionInfo.vo;
import com.alibaba.fastjson2.JSONArray;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Author: DouXinYu
* @Date: 2026-01-08 17:14
* @Description: 稽核信息 V2.0 临时接收信息表
*/
@Data
public class InspectionInfoVO {
/**
* 当前稽核ID
*/
private Long id;
/**
* 当前门店对应的计划
*/
private Long planId;
/**
* 稽查店铺的日期
*/
private Date inspectionDate;
/**
* 开始稽查的具体时间
*/
private String inspectionTime;
/**
* 结束稽查离开店铺的时间
*/
private String leaveStoreTime;
/**
* 促销员是否在岗的状态(是/否)
*/
private String onDutyStatus;
/**
* 促销员的在岗率(百分比)
*/
private BigDecimal onDutyRate;
/**
* 实际在岗的促销人员数量
*/
private Integer onDutyCount;
/**
* 促销员当前是否在岗(是/否)
*/
private String isOnDuty;
/**
* 促销员未在岗时电话拨出的时间
*/
private String offDutyCallTime;
/**
* 电话是否接通(是/否)
*/
private String isCallConnected;
/**
* 5分钟后再次拨打电话是否接通(是/否)
*/
private String isReconnectedAfter5min;
/**
* 10分钟内是否返回岗位(是/否)
*/
private String isBackToWorkWithin10min;
/**
* 本次稽查的总得分
*/
private Integer totalScore;
/**
* 销售相关考核得分(满分50分)
*/
private Integer salesAssessmentScore;
/**
* 促销相关考核得分(满分50分)
*/
private Integer promotionAssessmentScore;
/**
* 是否有档期或特价活动得分(满分20分)
*/
private Integer hasSchedulePromotionScore;
/**
* 地堆上是否陈列主推产品得分(满分8分)
*/
private Integer groundStackHasMainProductScore;
/**
* 地堆上是否只陈列王小卤产品得分(满分8分)
*/
private Integer groundStackOnlyWangxiaoluScore;
/**
* 地堆铺货是否饱满得分(满分4分)
*/
private Integer groundStackStockFullScore;
/**
* 是否配备各类宣传物料得分(满分10分)
*/
private Integer hasPromotionMaterialsScore;
/**
* 是否穿着王小卤品牌围裙得分(满分3分)
*/
private Integer wearsWangxiaoluApronScore;
/**
* 是否准备试吃品得分(满分5分)
*/
private Integer hasTastingProductScore;
/**
* 是否设置试吃台得分(满分3分)
*/
private Integer hasTastingTableScore;
/**
* 是否准备试吃盘得分(满分3分)
*/
private Integer hasTastingPlateScore;
/**
* 是否准备试吃杯得分(满分3分)
*/
private Integer hasTastingCupScore;
/**
* 是否佩戴口罩和手套得分(满分3分)
*/
private Integer wearsMaskGlovesScore;
/**
* 是否提供牙签加分(满分2分)
*/
private Integer hasToothpickBonusScore;
/**
* 是否配备垃圾桶加分(满分2分)
*/
private Integer hasGarbageCanBonusScore;
/**
* 是否知晓远距离招揽话术得分(满分5分)
*/
private Integer knowsDistanceSolicitSkillScore;
/**
* 是否知晓黑鸭或卤香产品卖点得分(满分5分)
*/
private Integer knowsProductSellingPointsScore;
/**
* 人流经过时是否主动迎接得分(满分5分)
*/
private Integer greetsCustomersActivelyScore;
/**
* 是否讲解产品卖点推荐产品得分(满分3分)
*/
private Integer introducesProductScoresScore;
/**
* 是否有促进销售的动作得分(满分2分)
*/
private Integer promotesSalesActivelyScore;
/**
* 是否配置活动赠品得分(满分5分)
*/
private Integer hasPromotionGiftsScore;
/**
* 是否主动销售非王小卤产品得分(满分5分)
*/
private Integer sellsNonWangxiaoluProductsScore;
/**
* 促销活动的具体内容描述
*/
private String promotionActivityContent;
/**
* 是否设置了地堆陈列(是/否)
*/
private String hasGroundStack;
/**
* 是否有黑鸭产品陈列(是/否)
*/
private String hasBlackDuckDisplay;
/**
* 是否有黑鸭产品试吃品(是/否)
*/
private String hasBlackDuckTasting;
/**
* 其他品牌是否设置了试吃台(是/否)
*/
private String otherBrandHasTastingTable;
/**
* 10分钟内经过促销人员的人流数量
*/
private BigDecimal pedestrianCountWithin10min;
/**
* 试吃品的总数量
*/
private BigDecimal totalTastingProductCount;
/**
* 按口味统计的试吃品数量
*/
private String tastingProductCountByFlavor;
/**
* 其他品牌试吃台的佐证照片链接
*/
private String otherBrandTastingTableProofUrl;
/**
* 销售非王小卤产品的佐证照片链接
*/
private String nonWangxiaoluSalesProofUrl;
/**
* 门头照
*/
private String storePicture;
/**
* 促销员在岗/离岗佐证照
*/
private JSONArray temWorkPhotos;
/**
* 特殊陈列照片
*/
private String storeTcPhoto;
/**
* 主货架照片
*/
private String storeZhiPhoto;
}
package com.wangxiaolu.promotion.service.activity.examine; package com.wangxiaolu.promotion.service.activity.examine;
import com.wangxiaolu.promotion.pojo.activity.examine.dto.ActivityExamineDto; import com.wangxiaolu.promotion.pojo.activity.examine.dto.ActivityExamineDto;
import com.wangxiaolu.promotion.pojo.activity.inspectionInfo.dto.InspectionInfoDto;
/** /**
* @author : liqiulin * @author : liqiulin
...@@ -11,4 +12,8 @@ public interface ExaPlanCoreService { ...@@ -11,4 +12,8 @@ public interface ExaPlanCoreService {
ActivityExamineDto save(ActivityExamineDto examineDto); ActivityExamineDto save(ActivityExamineDto examineDto);
ActivityExamineDto updateById(ActivityExamineDto examineDto); ActivityExamineDto updateById(ActivityExamineDto examineDto);
InspectionInfoDto saveV2(InspectionInfoDto inspectionInfoDto);
InspectionInfoDto updateByIdV2(InspectionInfoDto inspectionInfoDto);
} }
...@@ -2,8 +2,10 @@ package com.wangxiaolu.promotion.service.activity.examine.impl; ...@@ -2,8 +2,10 @@ package com.wangxiaolu.promotion.service.activity.examine.impl;
import com.wangxiaolu.promotion.domain.activityplanv2.dao.ActivityPlanInfoDao; import com.wangxiaolu.promotion.domain.activityplanv2.dao.ActivityPlanInfoDao;
import com.wangxiaolu.promotion.domain.examine.dao.ActivityExamineDao; import com.wangxiaolu.promotion.domain.examine.dao.ActivityExamineDao;
import com.wangxiaolu.promotion.domain.inspection.dao.InspectionInfoDao;
import com.wangxiaolu.promotion.exception.ParamException; import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.activity.examine.dto.ActivityExamineDto; import com.wangxiaolu.promotion.pojo.activity.examine.dto.ActivityExamineDto;
import com.wangxiaolu.promotion.pojo.activity.inspectionInfo.dto.InspectionInfoDto;
import com.wangxiaolu.promotion.pojo.activity.planv2.dto.ActivityPlanInfoDto; import com.wangxiaolu.promotion.pojo.activity.planv2.dto.ActivityPlanInfoDto;
import com.wangxiaolu.promotion.result.basedata.RCode; import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.activity.examine.ExaPlanCoreService; import com.wangxiaolu.promotion.service.activity.examine.ExaPlanCoreService;
...@@ -26,6 +28,9 @@ public class ExaPlanCoreServiceImpl implements ExaPlanCoreService { ...@@ -26,6 +28,9 @@ public class ExaPlanCoreServiceImpl implements ExaPlanCoreService {
@Autowired @Autowired
private ActivityPlanInfoDao activityPlanInfoDao; private ActivityPlanInfoDao activityPlanInfoDao;
@Autowired
private InspectionInfoDao inspectionInfoDao;
@Override @Override
public ActivityExamineDto save(ActivityExamineDto examineDto) { public ActivityExamineDto save(ActivityExamineDto examineDto) {
// 根据促销计划id得到详情并补充 // 根据促销计划id得到详情并补充
...@@ -50,8 +55,31 @@ public class ExaPlanCoreServiceImpl implements ExaPlanCoreService { ...@@ -50,8 +55,31 @@ public class ExaPlanCoreServiceImpl implements ExaPlanCoreService {
return activityExamineDao.save(examineDto); return activityExamineDao.save(examineDto);
} }
@Override
public InspectionInfoDto saveV2(InspectionInfoDto inspectionInfoDto) {
ActivityPlanInfoDto activityPlanInfoDto = activityPlanInfoDao.selectById(inspectionInfoDto.getPlanId());
if (Objects.isNull(activityPlanInfoDto)) {
throw new ParamException(RCode.ACTIVITY_PLAN_IS_NULL);
}
inspectionInfoDto.setDepQcOrgName(activityPlanInfoDto.getOrgName());
inspectionInfoDto.setDealerId(activityPlanInfoDto.getDealerId());
inspectionInfoDto.setDealerName(activityPlanInfoDto.getDealerName());
inspectionInfoDto.setStoreCode(activityPlanInfoDto.getStoreCode());
inspectionInfoDto.setStoreName(activityPlanInfoDto.getStoreName());
inspectionInfoDto.setPattern(activityPlanInfoDto.getPattern());
return inspectionInfoDao.save(inspectionInfoDto);
}
@Override
public InspectionInfoDto updateByIdV2(InspectionInfoDto inspectionInfoDto) {
return inspectionInfoDao.updateById(inspectionInfoDto);
}
@Override @Override
public ActivityExamineDto updateById(ActivityExamineDto examineDto) { public ActivityExamineDto updateById(ActivityExamineDto examineDto) {
return activityExamineDao.updateById(examineDto); return activityExamineDao.updateById(examineDto);
} }
} }
<?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.wangxiaolu.promotion.domain.inspection.mapper.InspectionInfoMapper">
<resultMap id="BaseResultMap" type="com.wangxiaolu.promotion.domain.inspection.mapper.entity.InspectionInfoDO">
<!-- 1. 主键 & 大整数类型(bigint(20)) -->
<id property="id" column="id" jdbcType="BIGINT" />
<result property="planId" column="plan_id" jdbcType="BIGINT" />
<!-- 2. 字符串类型(varchar,不同长度统一映射为VARCHAR) -->
<result property="depQcOrgName" column="dep_qc_org_name" jdbcType="VARCHAR" />
<result property="dealerId" column="dealer_id" jdbcType="VARCHAR" />
<result property="dealerName" column="dealer_name" jdbcType="VARCHAR" />
<result property="storeCode" column="store_code" jdbcType="VARCHAR" />
<result property="storeName" column="store_name" jdbcType="VARCHAR" />
<result property="addr" column="addr" jdbcType="VARCHAR" />
<result property="pattern" column="pattern" jdbcType="VARCHAR" />
<result property="inspectionTime" column="inspection_time" jdbcType="VARCHAR" />
<result property="leaveStoreTime" column="leave_store_time" jdbcType="VARCHAR" />
<result property="onDutyStatus" column="on_duty_status" jdbcType="VARCHAR" />
<result property="isOnDuty" column="is_on_duty" jdbcType="VARCHAR" />
<result property="offDutyCallTime" column="off_duty_call_time" jdbcType="VARCHAR" />
<result property="isCallConnected" column="is_call_connected" jdbcType="VARCHAR" />
<result property="isReconnectedAfter5min" column="is_reconnected_after_5min" jdbcType="VARCHAR" />
<result property="isBackToWorkWithin10min" column="is_back_to_work_within_10min" jdbcType="VARCHAR" />
<result property="promotionActivityContent" column="promotion_activity_content" jdbcType="VARCHAR" />
<result property="hasGroundStack" column="has_ground_stack" jdbcType="VARCHAR" />
<result property="hasBlackDuckDisplay" column="has_black_duck_display" jdbcType="VARCHAR" />
<result property="hasBlackDuckTasting" column="has_black_duck_tasting" jdbcType="VARCHAR" />
<result property="otherBrandHasTastingTable" column="other_brand_has_tasting_table" jdbcType="VARCHAR" />
<result property="tastingProductCountByFlavor" column="tasting_product_count_by_flavor" jdbcType="VARCHAR" />
<result property="otherBrandTastingTableProofUrl" column="other_brand_tasting_table_proof_url" jdbcType="VARCHAR" />
<result property="nonWangxiaoluSalesProofUrl" column="non_wangxiaolu_sales_proof_url" jdbcType="VARCHAR" />
<result property="storePicture" column="store_picture" jdbcType="VARCHAR" />
<result property="storeTcPhoto" column="store_tc_photo" jdbcType="VARCHAR" />
<result property="storeZhiPhoto" column="store_zhi_photo" jdbcType="VARCHAR" />
<!-- 3. 整数类型(int(11)) -->
<result property="onDutyCount" column="on_duty_count" jdbcType="INTEGER" />
<result property="totalScore" column="total_score" jdbcType="INTEGER" />
<result property="salesAssessmentScore" column="sales_assessment_score" jdbcType="INTEGER" />
<result property="promotionAssessmentScore" column="promotion_assessment_score" jdbcType="INTEGER" />
<result property="hasSchedulePromotionScore" column="has_schedule_promotion_score" jdbcType="INTEGER" />
<result property="groundStackHasMainProductScore" column="ground_stack_has_main_product_score" jdbcType="INTEGER" />
<result property="groundStackOnlyWangxiaoluScore" column="ground_stack_only_wangxiaolu_score" jdbcType="INTEGER" />
<result property="groundStackStockFullScore" column="ground_stack_stock_full_score" jdbcType="INTEGER" />
<result property="hasPromotionMaterialsScore" column="has_promotion_materials_score" jdbcType="INTEGER" />
<result property="wearsWangxiaoluApronScore" column="wears_wangxiaolu_apron_score" jdbcType="INTEGER" />
<result property="hasTastingProductScore" column="has_tasting_product_score" jdbcType="INTEGER" />
<result property="hasTastingTableScore" column="has_tasting_table_score" jdbcType="INTEGER" />
<result property="hasTastingPlateScore" column="has_tasting_plate_score" jdbcType="INTEGER" />
<result property="hasTastingCupScore" column="has_tasting_cup_score" jdbcType="INTEGER" />
<result property="wearsMaskGlovesScore" column="wears_mask_gloves_score" jdbcType="INTEGER" />
<result property="hasToothpickBonusScore" column="has_toothpick_bonus_score" jdbcType="INTEGER" />
<result property="hasGarbageCanBonusScore" column="has_garbage_can_bonus_score" jdbcType="INTEGER" />
<result property="knowsDistanceSolicitSkillScore" column="knows_distance_solicit_skill_score" jdbcType="INTEGER" />
<result property="knowsProductSellingPointsScore" column="knows_product_selling_points_score" jdbcType="INTEGER" />
<result property="greetsCustomersActivelyScore" column="greets_customers_actively_score" jdbcType="INTEGER" />
<result property="introducesProductScoresScore" column="introduces_product_scores_score" jdbcType="INTEGER" />
<result property="promotesSalesActivelyScore" column="promotes_sales_actively_score" jdbcType="INTEGER" />
<result property="hasPromotionGiftsScore" column="has_promotion_gifts_score" jdbcType="INTEGER" />
<result property="sellsNonWangxiaoluProductsScore" column="sells_non_wangxiaolu_products_score" jdbcType="INTEGER" />
<!-- 4. 小数类型(decimal,不同精度统一映射为DECIMAL) -->
<result property="onDutyRate" column="on_duty_rate" jdbcType="DECIMAL" />
<result property="pedestrianCountWithin10min" column="pedestrian_count_within_10_min" jdbcType="DECIMAL" />
<result property="totalTastingProductCount" column="total_tasting_product_count" jdbcType="DECIMAL" />
<!-- 5. 日期类型(date) -->
<result property="inspectionDate" column="inspection_date" jdbcType="DATE" />
<!-- 6. JSON类型 -->
<result property="temWorkPhotos" column="tem_work_photos" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List">
id,plan_id,dep_qc_org_name,dealer_id,dealer_name,store_code,
store_name,addr,pattern,inspection_date,inspection_time,
leave_store_time,on_duty_status,on_duty_rate,on_duty_count,is_on_duty,
off_duty_call_time,is_call_connected,is_reconnected_after_5min,is_back_to_work_within_10min,total_score,
sales_assessment_score,promotion_assessment_score,has_schedule_promotion_score,ground_stack_has_main_product_score,ground_stack_only_wangxiaolu_score,
ground_stack_stock_full_score,has_promotion_materials_score,wears_wangxiaolu_apron_score,has_tasting_product_score,has_tasting_table_score,
has_tasting_plate_score,has_tasting_cup_score,wears_mask_gloves_score,has_toothpick_bonus_score,has_garbage_can_bonus_score,
knows_distance_solicit_skill_score,knows_product_selling_points_score,greets_customers_actively_score,introduces_product_scores_score,promotes_sales_actively_score,
has_promotion_gifts_score,sells_non_wangxiaolu_products_score,promotion_activity_content,has_ground_stack,has_black_duck_display,
has_black_duck_tasting,other_brand_has_tasting_table,pedestrian_count_within_10_min,total_tasting_product_count,tasting_product_count_by_flavor,
other_brand_tasting_table_proof_url,non_wangxiaolu_sales_proof_url,store_picture,tem_work_photos,store_tc_photo,
store_zhi_photo
</sql>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论