From f96ad6ec73b3da7df5c08471f0d567d46fc767e8 Mon Sep 17 00:00:00 2001
From: jyy <935090232@qq.com>
Date: Fri, 09 Apr 2021 14:34:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/score_shop' into score_shop

---
 zq-erp/src/main/java/com/matrix/system/activity/vo/SignWriteoffListVo.java                 |   77 ++
 zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignWriteoffService.java   |  125 ++++
 zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignWriteoffDao.java           |   26 +
 zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java   |    3 
 zq-erp/src/main/resources/config/db/increment/签到活动.sql                                     |   41 +
 zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-logistics-info.html |  291 +++++++++++
 zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignWriteoffAction.java     |   74 ++
 zq-erp/src/main/java/com/matrix/system/activity/entity/ActivitySignWriteoff.java           |  121 ++++
 zq-erp/src/main/java/com/matrix/system/activity/dto/SignWriteoffDto.java                   |   17 
 zq-erp/src/main/java/com/matrix/system/activity/dto/WriteoffCodeSubmitDto.java             |   20 
 zq-erp/src/main/java/com/matrix/system/activity/dto/SignWriteoffListDto.java               |   21 
 zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-receive.html        |   24 
 zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-writeoff-info.html  |  198 +++++++
 zq-erp/src/main/java/com/matrix/system/activity/vo/SignReceiveListVo.java                  |   11 
 zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignReceiveRecordDao.xml         |    6 
 zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-writeoff.html       |  293 +++++++++++
 zq-erp/src/main/java/com/matrix/system/activity/vo/ZjrVo.java                              |   19 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java  |   33 +
 zq-erp/src/main/java/com/matrix/system/activity/vo/SignWriteoffVo.java                     |   45 +
 zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignWriteoffDao.xml              |   93 +++
 20 files changed, 1,530 insertions(+), 8 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignWriteoffAction.java b/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignWriteoffAction.java
new file mode 100644
index 0000000..b125fe2
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignWriteoffAction.java
@@ -0,0 +1,74 @@
+package com.matrix.system.activity.action;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.system.activity.dto.SignWriteoffDto;
+import com.matrix.system.activity.dto.SignWriteoffListDto;
+import com.matrix.system.activity.dto.WriteoffCodeSubmitDto;
+import com.matrix.system.activity.service.ActivitySignWriteoffService;
+import com.matrix.system.activity.vo.SignWriteoffListVo;
+import com.matrix.system.hive.action.util.QueryUtil;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+/**
+ * @description 核销记录
+ * @author yourName
+ * @date 2021-04-08 14:25
+ */
+@RestController
+@RequestMapping(value = "admin/activitySignWriteoff")
+public class ActivitySignWriteoffAction {
+
+	@Autowired
+	private ActivitySignWriteoffService activitySignWriteoffService;
+	
+	/**
+	 * 核销记录
+	 */
+	@ApiOperation(value = "核销记录")
+	@ApiResponses({
+			@ApiResponse(code = 200, message = "OK",  response = SignWriteoffListVo.class)
+	})
+	@PostMapping(value = "/findSignWriteoffList")
+	public @ResponseBody
+	AjaxResult findSignWriteoffList(@RequestBody SignWriteoffListDto signWriteoffListDto) {
+		//设置用户公司ID
+		QueryUtil.setQueryLimitCom(signWriteoffListDto);
+		//排序
+		if(StringUtils.isBlank(signWriteoffListDto.getSort())){
+			signWriteoffListDto.setSort("create_time");
+			signWriteoffListDto.setOrder("desc");
+		}
+		Page<SignWriteoffListVo> page = new Page(signWriteoffListDto.getPageNum(), signWriteoffListDto.getPageSize());
+		IPage<SignWriteoffListVo> rows = activitySignWriteoffService.findSignWriteoffList(page,signWriteoffListDto);
+		AjaxResult result = AjaxResult.buildSuccessInstance(rows.getRecords(),rows.getTotal());
+		return result;
+	}
+	
+	/**
+     *进入核销
+     */
+    @ApiOperation(value = "进入核销")
+    @PostMapping(value = "/findSignWriteoff")
+    public @ResponseBody
+    AjaxResult findSignWriteoff(@RequestBody SignWriteoffDto signWriteoffDto) {
+    	return activitySignWriteoffService.findSignWriteoff(signWriteoffDto);
+    }
+    
+    /**
+     *核销验证
+     */
+    @ApiOperation(value = "核销验证")
+    @PostMapping(value = "/writeoffCodeSubmit")
+    public @ResponseBody
+    AjaxResult writeoffCodeSubmit(@RequestBody WriteoffCodeSubmitDto writeoffCodeSubmitDto) {
+    	return activitySignWriteoffService.writeoffCodeSubmit(writeoffCodeSubmitDto);
+    }
+
+  
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignWriteoffDao.java b/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignWriteoffDao.java
new file mode 100644
index 0000000..5613f42
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignWriteoffDao.java
@@ -0,0 +1,26 @@
+package com.matrix.system.activity.dao;
+
+
+import org.apache.ibatis.annotations.Param;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.matrix.system.activity.dto.SignWriteoffListDto;
+import com.matrix.system.activity.entity.ActivitySignWriteoff;
+import com.matrix.system.activity.vo.SignWriteoffListVo;
+import com.matrix.system.activity.vo.ZjrVo;
+
+/**
+ * @description 核销记录
+ * @author yourName
+ * @date 2021-04-08 14:25
+ */
+public interface ActivitySignWriteoffDao extends BaseMapper<ActivitySignWriteoff>{
+
+	IPage<SignWriteoffListVo> findSignWriteoffList(Page<SignWriteoffListVo> page,
+												   @Param("record")SignWriteoffListDto signWriteoffListDto);
+
+	ZjrVo selectUsernameByUserId(@Param("userId")Long userId, @Param("receiveId")Long receiveId);
+
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dto/SignWriteoffDto.java b/zq-erp/src/main/java/com/matrix/system/activity/dto/SignWriteoffDto.java
new file mode 100644
index 0000000..3c7552a
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/dto/SignWriteoffDto.java
@@ -0,0 +1,17 @@
+package com.matrix.system.activity.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "SignWriteoffDto", description = "查询参数")
+public class SignWriteoffDto {
+	
+	@ApiModelProperty(value ="核销ID")
+	private long writeoffId;
+	
+	@ApiModelProperty(hidden = true)
+	private Long companyId;
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dto/SignWriteoffListDto.java b/zq-erp/src/main/java/com/matrix/system/activity/dto/SignWriteoffListDto.java
new file mode 100644
index 0000000..5acbdc0
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/dto/SignWriteoffListDto.java
@@ -0,0 +1,21 @@
+package com.matrix.system.activity.dto;
+
+import java.util.Date;
+
+import com.matrix.core.pojo.BasePageQueryDto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "SignWriteoffListDto", description = "查询参数")
+public class SignWriteoffListDto extends BasePageQueryDto {
+	
+	@ApiModelProperty(value ="中奖者姓名")
+	private String zjzxm;
+	
+	@ApiModelProperty(hidden = true)
+	private Long companyId;
+	
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dto/WriteoffCodeSubmitDto.java b/zq-erp/src/main/java/com/matrix/system/activity/dto/WriteoffCodeSubmitDto.java
new file mode 100644
index 0000000..972be8a
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/dto/WriteoffCodeSubmitDto.java
@@ -0,0 +1,20 @@
+package com.matrix.system.activity.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "WriteoffCodeSubmitDto", description = "查询参数")
+public class WriteoffCodeSubmitDto {
+	
+	@ApiModelProperty(value ="核销ID")
+	private long writeoffId;
+	
+	@ApiModelProperty(value ="兑奖码")
+	private String writeOffCode;
+	
+	@ApiModelProperty(hidden = true)
+	private Long companyId;
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/entity/ActivitySignWriteoff.java b/zq-erp/src/main/java/com/matrix/system/activity/entity/ActivitySignWriteoff.java
new file mode 100644
index 0000000..7ab47e4
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/entity/ActivitySignWriteoff.java
@@ -0,0 +1,121 @@
+package com.matrix.system.activity.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.matrix.core.anotations.Extend;
+import com.matrix.system.score.entity.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+
+/**
+ * @description 核销记录
+ * @author yourName
+ * @date 2021-04-08 14:25
+ */
+@Data
+@TableName("activity_sign_writeoff")
+public class ActivitySignWriteoff  extends BaseEntity{
+	@Extend
+	private static final long serialVersionUID = 1L; 
+
+	
+
+
+	
+	/**
+	 * 核销时间
+	 */
+
+
+	private Date  writeoffTime;
+	
+	/**
+	 * 核销员
+	 */
+
+
+	private String  writeoffUser;
+	
+	/**
+	 * 兑奖码
+	 */
+
+
+	private String  writeoffCode;
+	
+	/**
+	 * 活动ID
+	 */
+
+
+	private Long  actId;
+	
+	/**
+	 * 奖品ID
+	 */
+
+
+	private Long  awardId;
+	
+	/**
+	 * 中奖时间
+	 */
+
+
+	private Date  winTime;
+	
+	/**
+	 * 状态(1:待兑换 2:待发货  3:已兑换  )
+	 */
+	private Integer  state;
+	public static final int STATE_ONE = 1;
+	public static final int STATE_TWO = 2;
+	public static final int STATE_THREE = 3;
+	
+	/**
+	 * 中奖者ID
+	 */
+
+
+	private Long  userId;
+	
+	/**
+	 * 物流ID
+	 */
+
+
+	private Long  logisticsId;
+	
+	/**
+	 * 中奖记录ID
+	 */
+
+
+	private Long  receiveId;
+	
+	/**
+	 * 公司ID
+	 */
+
+
+	private Long  companyId;
+	
+	/**
+	 * 店铺ID
+	 */
+
+
+	private Long  shopId;
+	
+	/**
+	 * 核销员ID
+	 */
+
+
+	private Long  writeoffUserid;
+
+
+
+  
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java b/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java
index 7d34fb6..aed8a95 100644
--- a/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java
+++ b/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java
@@ -53,6 +53,9 @@
 		//获取当前登录人员信息
         SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
         Long companyId = user.getCompanyId();
+        /**
+         * todo签到活动的唯一性
+         */
         
         //新增活动主表信息
         ShopActivities shopActivities = new ShopActivities();
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignWriteoffService.java b/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignWriteoffService.java
new file mode 100644
index 0000000..c8478a8
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignWriteoffService.java
@@ -0,0 +1,125 @@
+package com.matrix.system.activity.service;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.matrix.core.constance.MatrixConstance;
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.tools.WebUtil;
+import com.matrix.system.activity.dao.ActivitySignAwardSetDao;
+import com.matrix.system.activity.dao.ActivitySignReceiveRecordDao;
+import com.matrix.system.activity.dao.ActivitySignWriteoffDao;
+import com.matrix.system.activity.dto.SignWriteoffDto;
+import com.matrix.system.activity.dto.SignWriteoffListDto;
+import com.matrix.system.activity.dto.WriteoffCodeSubmitDto;
+import com.matrix.system.activity.entity.ActivitySignAwardSet;
+import com.matrix.system.activity.entity.ActivitySignReceiveRecord;
+import com.matrix.system.activity.entity.ActivitySignWriteoff;
+import com.matrix.system.activity.vo.SignWriteoffListVo;
+import com.matrix.system.activity.vo.SignWriteoffVo;
+import com.matrix.system.activity.vo.ZjrVo;
+import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.hive.action.util.QueryUtil;
+import com.matrix.system.hive.dao.SysVipInfoDao;
+import com.matrix.system.shopXcx.bean.ShopActivities;
+import com.matrix.system.shopXcx.dao.ShopActivitiesDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+/**
+ * @description 核销记录
+ * @author yourName
+ * @date 2021-04-08 14:25
+ */
+@Service
+public class ActivitySignWriteoffService  extends ServiceImpl<ActivitySignWriteoffDao, ActivitySignWriteoff>{
+	
+	@Autowired
+	ActivitySignWriteoffDao activitySignWriteoffDao;
+	@Autowired
+    ShopActivitiesDao shopActivitiesDao;
+	@Autowired
+	ActivitySignAwardSetDao activitySignAwardSetDao;
+	@Autowired
+	ActivitySignReceiveRecordDao activitySignReceiveRecordDao;
+	@Autowired
+	SysVipInfoDao sysVipInfoDao;
+
+	public IPage<SignWriteoffListVo> findSignWriteoffList(Page<SignWriteoffListVo> page,
+			SignWriteoffListDto signWriteoffListDto) {
+		return activitySignWriteoffDao.findSignWriteoffList(page,signWriteoffListDto);
+	}
+
+	public AjaxResult findSignWriteoff(SignWriteoffDto signWriteoffDto) {
+		//设置用户公司ID
+        QueryUtil.setQueryLimitCom(signWriteoffDto);
+        Long writeoffId = signWriteoffDto.getWriteoffId();
+        AjaxResult result= AjaxResult.buildSuccessInstance("成功");
+        //获取核销信息
+        SignWriteoffVo signWriteoffVo = new SignWriteoffVo();
+        ActivitySignWriteoff activitySignWriteoff = activitySignWriteoffDao.selectById(writeoffId);
+        if(ObjectUtil.isNotEmpty(activitySignWriteoff)) {
+        	//获取奖品信息
+        	ActivitySignAwardSet activitySignAwardSet = activitySignAwardSetDao.selectById(activitySignWriteoff.getAwardId());
+        	signWriteoffVo.setJpmc(activitySignAwardSet.getAwardName());
+        	signWriteoffVo.setJptp(activitySignAwardSet.getIntroduceImg());
+        	signWriteoffVo.setSl(1);
+        	signWriteoffVo.setDjfs(activitySignAwardSet.getAwardWay());
+        	//获取中奖人信息
+        	ZjrVo zjrVo = activitySignWriteoffDao.selectUsernameByUserId(activitySignWriteoff.getUserId(),activitySignAwardSet.getId());
+        	signWriteoffVo.setZjr(zjrVo.getZjr());
+        	signWriteoffVo.setZjsj(zjrVo.getZjsj());
+        	signWriteoffVo.setDjsj(activitySignWriteoff.getWriteoffTime());
+        	signWriteoffVo.setState(activitySignWriteoff.getState());
+        	//获取活动主表信息
+        	ShopActivities shopActivities = shopActivitiesDao.selectById(activitySignWriteoff.getActId());
+        	signWriteoffVo.setHdmc(shopActivities.getActName());
+        	signWriteoffVo.setHdbh(shopActivities.getActCode());
+        }
+        result.putInMap("signWriteoffVo", signWriteoffVo);
+        return result;
+	}
+
+	@Transactional
+	public AjaxResult writeoffCodeSubmit(WriteoffCodeSubmitDto writeoffCodeSubmitDto) {
+		//设置用户公司ID
+        QueryUtil.setQueryLimitCom(writeoffCodeSubmitDto);
+        SysUsers sysUsers = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
+        Long writeoffId = writeoffCodeSubmitDto.getWriteoffId();
+        String writeOffCode = writeoffCodeSubmitDto.getWriteOffCode();
+        /**
+         * 验证核销码是不是匹配
+         * 更新核销记录
+         * 更新领取记录
+         */
+        //验证核销码是不是匹配
+        ActivitySignWriteoff activitySignWriteoff = activitySignWriteoffDao.selectById(writeoffId);
+        if(ObjectUtil.isNotEmpty(activitySignWriteoff)) {
+        	String writeoffCodeReal = activitySignWriteoff.getWriteoffCode();
+        	if(!writeoffCodeReal.equals(writeOffCode)) {
+        		return new AjaxResult(AjaxResult.STATUS_FAIL, "兑奖码无效");
+        	}
+        }
+        //更新核销记录
+        activitySignWriteoff.setState(ActivitySignWriteoff.STATE_THREE);
+        activitySignWriteoff.setWriteoffTime(new Date());
+        activitySignWriteoff.setWriteoffUser(sysUsers.getSuName());
+        activitySignWriteoff.setWriteoffUserid(sysUsers.getSuId());
+        activitySignWriteoffDao.updateById(activitySignWriteoff);
+        //更新领取记录
+        ActivitySignReceiveRecord activitySignReceiveRecord = activitySignReceiveRecordDao.selectById(activitySignWriteoff.getReceiveId());
+        activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE);
+        activitySignReceiveRecordDao.updateById(activitySignReceiveRecord);
+        
+        return new AjaxResult(AjaxResult.STATUS_SUCCESS, "核销成功");
+	}
+
+
+
+
+  
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/vo/SignReceiveListVo.java b/zq-erp/src/main/java/com/matrix/system/activity/vo/SignReceiveListVo.java
index dfc5c00..d43dbf6 100644
--- a/zq-erp/src/main/java/com/matrix/system/activity/vo/SignReceiveListVo.java
+++ b/zq-erp/src/main/java/com/matrix/system/activity/vo/SignReceiveListVo.java
@@ -1,9 +1,10 @@
 package com.matrix.system.activity.vo;
 
-import java.util.Date;
-
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import java.util.Date;
 
 @Data
 public class SignReceiveListVo {
@@ -16,6 +17,7 @@
 	private String nickName;
 	
 	@ApiModelProperty(value = "签到时间")
+	@JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")
 	private Date reciveTime;
 	
 	@ApiModelProperty(value = "连续签到天数")
@@ -26,5 +28,10 @@
 	
 	@ApiModelProperty(value = "获得奖励")
 	private String awardName;
+	
+	@ApiModelProperty(value ="奖项规则(1:每日奖励(默认)2:累计签到天数)")
+	private int  awardRule;
+	@ApiModelProperty(value ="是否已领取(1:待领取2:已领取)")
+	private int  state;
 
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/vo/SignWriteoffListVo.java b/zq-erp/src/main/java/com/matrix/system/activity/vo/SignWriteoffListVo.java
new file mode 100644
index 0000000..1bf2d2f
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/vo/SignWriteoffListVo.java
@@ -0,0 +1,77 @@
+package com.matrix.system.activity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SignWriteoffListVo {
+	
+
+	private Long  id;
+	
+	/**
+	 * 核销时间
+	 */
+	@ApiModelProperty(value ="核销时间")
+	@JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")
+	private Date  writeoffTime;
+	
+	/**
+	 * 核销员
+	 */
+	@ApiModelProperty(value ="核销员")
+	private String  writeoffUser;
+	
+	/**
+	 * 兑奖码
+	 */
+	@ApiModelProperty(value ="兑奖码")
+	private String  writeoffCode;
+	
+	/**
+	 * 活动名称
+	 */
+	@ApiModelProperty(value ="活动名称")
+	private String  actName;
+	
+	/**
+	 * 奖品名称
+	 */
+	@ApiModelProperty(value ="奖品名称")
+	private String  awardName;
+	
+	/**
+	 * 中奖时间
+	 */
+	@ApiModelProperty(value ="中奖时间")
+	@JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")
+	private Date  winTime;
+	
+	/**
+	 * 状态
+	 */
+	@ApiModelProperty(value ="状态(1:待兑换 2:待发货 3:已兑换)")
+	private int  state;
+	
+	/**
+	 * 兑奖方式
+	 */
+	@ApiModelProperty(value ="兑奖方式(1:线下兑换2:物流配送3:客服兑换)")
+	private int  awardWay;
+	
+	/**
+	 * 中奖者
+	 */
+	@ApiModelProperty(value ="中奖者")
+	private String  receiveName;
+	
+	/**
+	 * 收货地址
+	 */
+	@ApiModelProperty(value ="收货地址")
+	private String  receiveAddress;
+	
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/vo/SignWriteoffVo.java b/zq-erp/src/main/java/com/matrix/system/activity/vo/SignWriteoffVo.java
new file mode 100644
index 0000000..e915998
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/vo/SignWriteoffVo.java
@@ -0,0 +1,45 @@
+package com.matrix.system.activity.vo;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class SignWriteoffVo {
+	
+	@ApiModelProperty(value ="奖品名称")
+	private String  jpmc;
+	
+	@ApiModelProperty(value ="奖品图片")
+	private String  jptp;
+	
+	@ApiModelProperty(value ="数量")
+	private int  sl;
+	
+	@ApiModelProperty(value ="中奖人")
+	private String  zjr;
+	
+	@ApiModelProperty(value ="中奖时间")
+	@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone="GMT+8")
+	private Date  zjsj;
+	
+	@ApiModelProperty(value ="活动名称")
+	private String  hdmc;
+	
+	@ApiModelProperty(value ="活动编号")
+	private String  hdbh;
+	
+	@ApiModelProperty(value ="兑奖方式")
+	private int  djfs;
+	
+	@ApiModelProperty(value ="兑奖状态")
+	private int  state;
+	
+	@ApiModelProperty(value ="兑奖时间")
+	@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone="GMT+8")
+	private Date  djsj;
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/vo/ZjrVo.java b/zq-erp/src/main/java/com/matrix/system/activity/vo/ZjrVo.java
new file mode 100644
index 0000000..bbef08c
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/activity/vo/ZjrVo.java
@@ -0,0 +1,19 @@
+package com.matrix.system.activity.vo;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+@Data
+public class ZjrVo {
+	
+	@ApiModelProperty(value ="中奖人")
+	private String  zjr;
+	
+	@ApiModelProperty(value ="中奖时间")
+	@JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")
+	private Date  zjsj;
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java
index 5149a5b..8b2e985 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesSignAction.java
@@ -11,9 +11,11 @@
 import com.matrix.system.activity.dao.ActivitySignAwardSetDao;
 import com.matrix.system.activity.dao.ActivitySignReceiveRecordDao;
 import com.matrix.system.activity.dao.ActivitySignRecordDao;
+import com.matrix.system.activity.dao.ActivitySignWriteoffDao;
 import com.matrix.system.activity.entity.ActivitySignAwardSet;
 import com.matrix.system.activity.entity.ActivitySignReceiveRecord;
 import com.matrix.system.activity.entity.ActivitySignRecord;
+import com.matrix.system.activity.entity.ActivitySignWriteoff;
 import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.shopXcx.api.dto.ClickSignDTO;
 import com.matrix.system.shopXcx.api.vo.ActivitySignAwardSetVo;
@@ -50,6 +52,9 @@
 	
 	@Autowired
 	private ActivitySignReceiveRecordDao activitySignReceiveRecordDao;
+	
+	@Autowired
+	private ActivitySignWriteoffDao activitySignWriteoffDao;
 	
 	@Autowired
 	private ActivitySignRecordDao activitySignRecordDao;
@@ -115,6 +120,7 @@
          * 是否已领取
          * 查询是否有签到奖品
          * 		日常奖励和自定义奖品
+         * 			生成核销记录
          */
         //活动是否存在
         ShopActivities shopActivities = shopActivitiesDao.selectById(actId);
@@ -182,7 +188,7 @@
         	signSuccessVo.setNormalAwardImg(activitySignAwardSetNormal.getIntroduceImg());
         }
         //获取当前累计天数
-        int cumulativeDay = getCumulativeDay(actId, userId, date, 1);
+        int cumulativeDay = getCumulativeDay(actId, userId, date, 0);
         //自定义奖励
         QueryWrapper<ActivitySignAwardSet> queryWrapperCumulativeDay = new QueryWrapper<>();
         queryWrapperCumulativeDay.eq("award_rule",ActivitySignAwardSet.AWARDRULE_CUMULATIVEDAY);
@@ -262,6 +268,31 @@
         		signSuccessVo.setCouponName(activitySignAwardSetCumulativeDay.getCouponName());
         	}
         	activitySignReceiveRecordDao.insert(activitySignReceiveRecord);
+        	//生成核销记录
+        	if(ActivitySignAwardSet.AWARDTYPE_CUSTOMIZE == activitySignAwardSetCumulativeDay.getAwardType()) {
+	        	ActivitySignWriteoff activitySignWriteoff = new ActivitySignWriteoff();
+	        	//线下兑换和客服兑换
+	        	if(ActivitySignAwardSet.AWARDWAY_ONE == activitySignAwardSetCumulativeDay.getAwardWay()
+	        			|| ActivitySignAwardSet.AWARDWAY_THREE == activitySignAwardSetCumulativeDay.getAwardWay()) {
+	        		activitySignWriteoff.setWriteoffCode(activitySignReceiveRecord.getWriteOffCode());
+	        	}
+	        	activitySignWriteoff.setActId(actId);
+	        	activitySignWriteoff.setAwardId(activitySignAwardSetCumulativeDay.getId());
+	        	activitySignWriteoff.setWinTime(date);
+	        	if(ActivitySignAwardSet.AWARDWAY_TWO == activitySignAwardSetCumulativeDay.getAwardWay()) {
+	        		activitySignWriteoff.setState(ActivitySignWriteoff.STATE_TWO);
+	        	}else {
+	        		activitySignWriteoff.setState(ActivitySignWriteoff.STATE_ONE);
+	        	}
+	        	activitySignWriteoff.setUserId(userId);
+	        	activitySignWriteoff.setCompanyId(companyId);
+	        	activitySignWriteoff.setReceiveId(activitySignReceiveRecord.getId());
+	        	activitySignWriteoff.setCreateBy(user.getName());
+	        	activitySignWriteoff.setCreateTime(new Date());
+	        	activitySignWriteoff.setUpdateBy(user.getName());
+	        	activitySignWriteoff.setUpdateTime(new Date());
+	        	activitySignWriteoffDao.insert(activitySignWriteoff);
+        	}
         }
         
         AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("签到成功");
diff --git "a/zq-erp/src/main/resources/config/db/increment/\347\255\276\345\210\260\346\264\273\345\212\250.sql" "b/zq-erp/src/main/resources/config/db/increment/\347\255\276\345\210\260\346\264\273\345\212\250.sql"
index 747c41f..6380d46 100644
--- "a/zq-erp/src/main/resources/config/db/increment/\347\255\276\345\210\260\346\264\273\345\212\250.sql"
+++ "b/zq-erp/src/main/resources/config/db/increment/\347\255\276\345\210\260\346\264\273\345\212\250.sql"
@@ -130,6 +130,47 @@
 
 ALTER TABLE `activity_sign_receive_record`
     CHANGE COLUMN `open_id` `user_id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'openID' AFTER `id`;
+	
+	/**
+ * 核销记录
+ * @author yourName
+ * @date 2021-04-08 14:25
+ */
+ CREATE TABLE activity_sign_writeoff(
+  create_by varchar(100) NOT NULL COMMENT '创建人',
+  create_time datetime NOT NULL COMMENT '创建时间',
+  update_by varchar(100) NOT NULL COMMENT '更新人',
+  update_time datetime NOT NULL COMMENT '更新时间',
+ id bigint(20)   NOT NULL  AUTO_INCREMENT  COMMENT '主键',
+ 
+ writeoff_time datetime    COMMENT '核销时间',
+ 
+ writeoff_user varchar(100)    COMMENT '核销员',
+ 
+ writeoff_code varchar(100)    COMMENT '兑奖码',
+ 
+ act_id bigint(20)    COMMENT '活动ID',
+ 
+ award_id bigint(20)    COMMENT '奖品ID',
+ 
+ win_time datetime    COMMENT '中奖时间',
+ 
+ state int(4)    COMMENT '状态',
+ 
+ user_id bigint(20)    COMMENT '中奖者ID',
+ 
+ logistics_id bigint(20)    COMMENT '物流ID',
+ 
+ receive_id bigint(20)    COMMENT '中奖记录ID',
+ 
+ company_id bigint(20)    COMMENT '公司ID',
+ 
+ shop_id bigint(20)    COMMENT '店铺ID',
+ 
+ writeoff_userid bigint(20)    COMMENT '核销员ID',
+ 
+PRIMARY KEY(id)
+)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='核销记录';
 
 
 
diff --git a/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignReceiveRecordDao.xml b/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignReceiveRecordDao.xml
index c983585..d64c91f 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignReceiveRecordDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignReceiveRecordDao.xml
@@ -10,12 +10,14 @@
 		a.id id,
 		b.nick_name nickName,
 		a.receive_time reciveTime,
+		a.state,
 		c.cumulative_day cumulativeDay,
 		c.award_type awardType,
-		c.award_name awardName
+		c.award_name awardName,
+		c.award_rule awardRule
 		FROM
 		activity_sign_receive_record a
-		LEFT JOIN biz_user b ON a.open_id = b.open_id
+		LEFT JOIN biz_user b ON a.user_id = b.user_id
 		LEFT JOIN activity_sign_award_set c ON a.award_id = c.id
 		<where>
 			a.company_id = #{record.companyId}
diff --git a/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignWriteoffDao.xml b/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignWriteoffDao.xml
new file mode 100644
index 0000000..30f587b
--- /dev/null
+++ b/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignWriteoffDao.xml
@@ -0,0 +1,93 @@
+<?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.matrix.system.activity.dao.ActivitySignWriteoffDao">
+	<!-- 定义ActivitySignWriteoff 的复杂关联map -->
+	<resultMap type="com.matrix.system.activity.entity.ActivitySignWriteoff" id="ActivitySignWriteoffMap">
+		<id property="id" column="id" />
+		<result property="createBy" column="create_by" />
+		<result property="createTime" column="create_time" />
+		<result property="updateBy" column="update_by" />
+		<result property="updateTime" column="update_time" />
+			<result property="writeoffTime" column="writeoff_time" />
+			<result property="writeoffUser" column="writeoff_user" />
+			<result property="writeoffCode" column="writeoff_code" />
+			<result property="actId" column="act_id" />
+			<result property="awardId" column="award_id" />
+			<result property="winTime" column="win_time" />
+			<result property="state" column="state" />
+			<result property="userId" column="user_id" />
+			<result property="logisticsId" column="logistics_id" />
+			<result property="receiveId" column="receive_id" />
+			<result property="companyId" column="company_id" />
+			<result property="shopId" column="shop_id" />
+			<result property="writeoffUserid" column="writeoff_userid" />
+	</resultMap>
+	
+	
+	<!-- 定义ActivitySignWriteoff 的简单map  ,本map不添加其他的关联属性 -->
+	<resultMap type="com.matrix.system.activity.entity.ActivitySignWriteoff" id="ActivitySignWriteoffSimpleMap">
+		<id property="id" column="id" />
+		<result property="createBy" column="create_by" />
+		<result property="createTime" column="create_time" />
+		<result property="updateBy" column="update_by" />
+		<result property="updateTime" column="update_time" />
+			<result property="writeoffTime" column="writeoff_time" />
+			<result property="writeoffUser" column="writeoff_user" />
+			<result property="writeoffCode" column="writeoff_code" />
+			<result property="actId" column="act_id" />
+			<result property="awardId" column="award_id" />
+			<result property="winTime" column="win_time" />
+			<result property="state" column="state" />
+			<result property="userId" column="user_id" />
+			<result property="logisticsId" column="logistics_id" />
+			<result property="receiveId" column="receive_id" />
+			<result property="companyId" column="company_id" />
+			<result property="shopId" column="shop_id" />
+			<result property="writeoffUserid" column="writeoff_userid" />
+	</resultMap>
+
+	<select id="findSignWriteoffList" resultType="com.matrix.system.activity.vo.SignWriteoffListVo">
+		SELECT
+		a.id id,
+		a.writeoff_time writeoffTime,
+		a.writeoff_user writeoffUser,
+		a.writeoff_code writeoffCode,
+		a.state state,
+		b.nick_name receiveName,
+		c.act_name actName,
+		d.award_way awardWay,
+		d.award_name awardName,
+		e.receive_time winTime,
+		f.receive_address receiveAddress
+		FROM
+		activity_sign_writeoff a
+		left join biz_user b on a.user_id= b.user_id
+		left join shop_activities c on a.act_id= c.id
+		left join activity_sign_award_set d on a.award_id= d.id
+		left join activity_sign_receive_record e on a.receive_id= e.id
+		left join shop_delivery_info f on a.logistics_id= f.id
+		<where>
+			a.company_id = #{record.companyId}
+			<if test="record.zjzxm != null and record.zjzxm != ''">
+				and b.nick_name like concat('%',#{record.zjzxm},'%')
+			</if>
+		</where>
+		<if test="record.sort !=null">
+			order by
+			a.${record.sort} ${record.order}
+		</if>
+	</select>
+
+	<select id="selectUsernameByUserId" resultType="com.matrix.system.activity.vo.ZjrVo">
+		SELECT
+			a.receive_time zjsj,
+		       b.nick_name zjr
+		FROM
+		activity_sign_receive_record a
+		left join biz_user b on a.user_id= b.user_id
+		where a.user_id = #{userId} and a.award_id = #{receiveId}
+	</select>
+
+</mapper>
\ No newline at end of file
diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-logistics-info.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-logistics-info.html
new file mode 100644
index 0000000..f8dd4d3
--- /dev/null
+++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-logistics-info.html
@@ -0,0 +1,291 @@
+<!DOCTYPE HTML>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="utf-8">
+    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
+    <meta http-equiv="Cache-Control" content="no-siteapp"/>
+    <!-- 本框架基本脚本和样式 -->
+    <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script>
+    <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}">
+    <link rel="stylesheet" th:href="@{/plugin/bootstrap-3.3.5/css/bootstrap.min.css}">
+    <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/>
+
+    <style>
+
+        .el-aside {
+            background-color: #D3DCE6;
+            color: #333;
+        }
+        .el-main {
+            background-color: #E9EEF3;
+            color: #333;
+        }
+        body > .el-container {
+            margin-bottom: 1000px;
+        }
+
+    </style>
+</head>
+
+<body>
+<div class="ibox-content" id="app" v-cloak>
+
+    <el-container>
+        <el-aside width="50%">
+            <el-row style="padding: 20px">
+                <p class="el-big-title">中奖信息</p>
+            </el-row>
+            <el-row style="margin-top: 10px;">
+                <el-col>
+                    <el-form :model="formSelect">
+                        <el-row>
+                            <el-form-item label="奖品名称:" :label-width="formLabelWidth">
+                                {{formSelect.jpmc}}
+                            </el-form-item>
+                        </el-row>
+                        <el-row style="display:flex;">
+                            <el-col>
+                                <el-form-item label="奖品图片:" :label-width="formLabelWidth">
+                                    {{formSelect.jptp}}
+                                </el-form-item>
+                            </el-col>
+                            <el-col>
+                                <el-form-item label="数量:" :label-width="formLabelWidth">
+                                    {{formSelect.sl}}
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-row style="display:flex;">
+                            <el-col>
+                                <el-form-item label="中奖人:" :label-width="formLabelWidth">
+                                    {{formSelect.zjr}}
+                                </el-form-item>
+                            </el-col>
+                            <el-col>
+                                <el-form-item label="中奖时间:" :label-width="formLabelWidth">
+                                    {{formSelect.zjsj}}
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-row style="display:flex;">
+                            <el-col>
+                                <el-form-item label="活动名称:" :label-width="formLabelWidth">
+                                    {{formSelect.hdmc}}
+                                </el-form-item>
+                            </el-col>
+                            <el-col>
+                                <el-form-item label="活动编号:" :label-width="formLabelWidth">
+                                    {{formSelect.hdbh}}
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-row style="display:flex;">
+                            <el-col>
+                                <el-form-item label="兑奖方式:" :label-width="formLabelWidth">
+                                    <span v-if="formSelect.djfs == 1">线下兑换</span>
+                                    <span v-if="formSelect.djfs == 2">物流配送</span>
+                                    <span v-if="formSelect.djfs == 3">客服兑换</span>
+                                </el-form-item>
+                            </el-col>
+                            <el-col>
+                                <el-form-item label="兑奖时间:" :label-width="formLabelWidth">
+                                    {{formSelect.djsj}}
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                    </el-form>
+                </el-col>
+            </el-row>
+
+            <el-row style="padding: 20px">
+                <p class="el-big-title">收货地址</p>
+            </el-row>
+            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px">
+                <el-row style="padding: 10px">
+                    <el-col class="col-sm-10" >
+                        <el-form-item label="收货人:" prop="shr">
+                            <el-input v-model="ruleForm.shr"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row style="padding: 10px">
+                    <el-col class="col-sm-10" >
+                        <el-form-item label="联系电话:" prop="lxdh">
+                            <el-input v-model="ruleForm.lxdh"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row style="padding: 10px">
+                    <el-col class="col-sm-10" >
+                        <el-form-item label="收货地址:" prop="shdz">
+                            <el-input v-model="ruleForm.shdz"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+
+                <el-row style="padding: 20px">
+                    <p class="el-big-title">发货信息</p>
+                </el-row>
+                <el-row style="padding: 10px">
+                    <el-col class="col-sm-10" >
+                        <el-form-item label="配送方式:" >
+                            <span>物流配送</span>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row style="padding: 10px">
+                    <el-col class="col-sm-10" >
+                        <el-form-item label="快递公司:" prop="kdgs">
+                            <el-input v-model="ruleForm.kdgs"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row style="padding: 10px">
+                    <el-col class="col-sm-10" >
+                        <el-form-item label="快递单号:" prop="kddh">
+                            <el-input v-model="ruleForm.kddh"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row style="padding: 10px">
+                    <el-col class="col-sm-12 text-center">
+                        <el-button type="primary" v-if="formSelect.state == 1"  @click="dataSubmit('ruleForm')">发货</el-button>
+                        <el-button type="danger" @click="cancelSubmit">关闭</el-button>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </el-aside>
+
+        <el-main width="50%">
+            <el-row>
+                <p class="el-big-title">物流跟踪</p>
+            </el-row>
+
+            <el-row style="padding: 10px">
+                <el-steps :active="active" simple>
+                    <el-step :title="item.title" :icon="item.icon" v-for="item in stepData" :key ="item.index"></el-step>
+                </el-steps>
+            </el-row>
+
+        </el-main>
+
+    </el-container>
+</div>
+</body>
+<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script>
+<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script>
+<script type="text/javascript" th:src="@{/plugin/bootstrap-3.3.5/js/bootstrap.min.js}"></script>
+<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script>
+<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script>
+<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script>
+<script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script>
+
+<script>
+    var writeoffId = $.query.get("writeoffId");
+    var app = new Vue({
+        el: '#app',
+        data: {
+            formLabelWidth: '120px',
+            //基本信息
+            formSelect: {
+                jpmc: '',
+                jptp: '',
+                sl: '',
+                zjr: '',
+                zjsj: '',
+                hdmc: '',
+                hdbh: '',
+                djfs: '',
+                state: '',
+                djsj: ''
+            },
+            //物流信息
+            ruleForm : {
+                shr:'',
+                lxdh:'',
+                shdz:'',
+                kdgs:'',
+                kddh:'',
+            },
+            active: 0, // 控制步骤条及填写条目的显示
+            stepData: [{index: 0, title: '步骤1', icon: 'el-icon-edit'},
+                {index: 1, title: '步骤2', icon: 'el-icon-edit'},
+                {index: 2, title: '步骤3', icon: 'el-icon-edit'}],
+            rules : {
+                shr : [
+                    { required: true, message: '请输入收货人', trigger: 'blur' }
+                ],
+                lxdh : [
+                    { required: true, message: '请输入联系电话', trigger: 'blur' }
+                ],
+                shdz : [
+                    { required: true, message: '请输入收货地址', trigger: 'blur' }
+                ],
+                kdgs : [
+                    { required: true, message: '请选择快递公司', trigger: 'blur' }
+                ],
+                kddh : [
+                    { required: true, message: '请输入快递单号', trigger: 'blur' }
+                ],
+            },
+        },
+        created: function () {
+            this.loadInfo();
+        },
+        mounted: function () {
+        },
+        methods: {
+            //加载分类
+            loadInfo() {
+                let _this = this;
+                //加载配置
+                AjaxProxy.requst({
+                    app: _this,
+                    data: {writeoffId},
+                    url: basePath + '/admin/activitySignWriteoff/findSignWriteoff',
+                    callback: function (data) {
+                        _this.formSelect = data.mapInfo.signWriteoffVo;
+                    }
+                });
+            },
+            //核销
+            dataSubmit : function(formName) {
+                const _this = this;
+                _this.$refs[formName].validate((valid) => {
+                    if (!valid) {
+                        return;
+                    }
+                });
+                let resultData = {
+                    writeoffId : writeoffId,
+                    writeOffCode : _this.ruleForm.writeOffCode,
+                }
+                AjaxProxy.requst({
+                    app: _this,
+                    data: resultData,
+                    url: basePath + '/admin/activitySignWriteoff/writeoffCodeSubmit',
+                    callback: function (data) {
+                        _this.$message({
+                            message: data.info,
+                            type: 'success',
+                        });
+                    }
+                });
+            },
+
+            cancelSubmit() {
+                this.closeFrame();
+            },
+            closeFrame() {
+                parent.layer.close(parent.layer.getFrameIndex(window.name));
+            },
+        }
+    })
+</script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-receive.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-receive.html
index 31062c8..8c2f2e4 100644
--- a/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-receive.html
+++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-receive.html
@@ -82,12 +82,30 @@
                         show-overflow-tooltip>
                 </el-table-column>
                 <el-table-column
-                        prop="cumulativeDay"
-                        label="连续签到天数"
+                        label="状态"
                         show-overflow-tooltip>
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.state == 1">待领取</span>
+                        <span v-if="scope.row.state == 2">已领取</span>
+                    </template>
                 </el-table-column>
                 <el-table-column
-                        label="奖励类型">
+                        label="签到类型"
+                        show-overflow-tooltip>
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.awardRule == 1">日常奖励</span>
+                        <span v-if="scope.row.awardRule == 2">累计签到奖励</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        label="连续签到天数"
+                        show-overflow-tooltip>
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.awardRule == 2">{{scope.row.cumulativeDay}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        label="奖品类型">
                     <template slot-scope="scope">
                         <span v-if="scope.row.awardType == 1">自定义礼品</span>
                         <span v-if="scope.row.awardType == 2">积分</span>
diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-writeoff-info.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-writeoff-info.html
new file mode 100644
index 0000000..26b52d1
--- /dev/null
+++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-writeoff-info.html
@@ -0,0 +1,198 @@
+<!DOCTYPE HTML>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="utf-8">
+    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
+    <meta http-equiv="Cache-Control" content="no-siteapp"/>
+    <!-- 本框架基本脚本和样式 -->
+    <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script>
+    <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}">
+    <link rel="stylesheet" th:href="@{/plugin/bootstrap-3.3.5/css/bootstrap.min.css}">
+    <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/>
+</head>
+
+<body>
+<div class="ibox-content" id="app" v-cloak>
+    <el-row>
+        <p class="el-big-title">中奖信息</p>
+    </el-row>
+    <el-row style="margin-top: 20px;">
+        <el-col>
+            <el-form :model="formSelect">
+                <el-row>
+                    <el-form-item label="奖品名称:" :label-width="formLabelWidth">
+                        {{formSelect.jpmc}}
+                    </el-form-item>
+                </el-row>
+                <el-row style="display:flex;">
+                    <el-col :span="6">
+                        <el-form-item label="奖品图片:" :label-width="formLabelWidth">
+                            {{formSelect.jptp}}
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="数量:" :label-width="formLabelWidth">
+                            {{formSelect.sl}}
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row style="display:flex;">
+                    <el-col :span="6">
+                        <el-form-item label="中奖人:" :label-width="formLabelWidth">
+                            {{formSelect.zjr}}
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="中奖时间:" :label-width="formLabelWidth">
+                            {{formSelect.zjsj}}
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row style="display:flex;">
+                    <el-col :span="6">
+                        <el-form-item label="活动名称:" :label-width="formLabelWidth">
+                            {{formSelect.hdmc}}
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                    <el-form-item label="活动编号:" :label-width="formLabelWidth">
+                        {{formSelect.hdbh}}
+                    </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row style="display:flex;">
+                    <el-col :span="6">
+                        <el-form-item label="兑奖方式:" :label-width="formLabelWidth">
+                            <span v-if="formSelect.djfs == 1">线下兑换</span>
+                            <span v-if="formSelect.djfs == 2">物流配送</span>
+                            <span v-if="formSelect.djfs == 3">客服兑换</span>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="兑奖时间:" :label-width="formLabelWidth">
+                            {{formSelect.djsj}}
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </el-col>
+    </el-row>
+
+    <el-row style="margin-top: 20px;">
+        <el-col class="col-sm-2" >
+            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px" v-if="formSelect.state == 1">
+                <el-form-item label="兑奖码" prop="writeOffCode">
+                    <el-input v-model="ruleForm.writeOffCode" placeholder="请输入兑奖码"></el-input>
+                </el-form-item>
+            </el-form>
+        </el-col>
+        <el-col class="col-sm-2 text-center">
+            <el-button type="primary" v-if="formSelect.state == 1"  @click="dataSubmit('ruleForm')">核销</el-button>
+            <el-button type="danger" @click="cancelSubmit">关闭</el-button>
+        </el-col>
+    </el-row>
+</div>
+</body>
+<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script>
+<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script>
+<script type="text/javascript" th:src="@{/plugin/bootstrap-3.3.5/js/bootstrap.min.js}"></script>
+<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script>
+<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script>
+<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script>
+<script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script>
+
+<script>
+    var writeoffId = $.query.get("writeoffId");
+    var app = new Vue({
+        el: '#app',
+        data: {
+            formLabelWidth: '120px',
+            formSelect: {
+                jpmc: '',
+                jptp: '',
+                sl: '',
+                zjr: '',
+                zjsj: '',
+                hdmc: '',
+                hdbh: '',
+                djfs: '',
+                state: '',
+                djsj: ''
+            },
+            ruleForm : {
+                writeOffCode:'',
+            },
+            rules : {
+                writeOffCode : [
+                    { required: true, message: '请输入兑奖码', trigger: 'blur' }
+                ],
+            },
+        },
+        created: function () {
+            this.loadInfo();
+        },
+        mounted: function () {
+        },
+        methods: {
+            //加载分类
+            loadInfo() {
+                let _this = this;
+                //加载配置
+                AjaxProxy.requst({
+                    app: _this,
+                    data: {writeoffId},
+                    url: basePath + '/admin/activitySignWriteoff/findSignWriteoff',
+                    callback: function (data) {
+                        _this.formSelect = data.mapInfo.signWriteoffVo;
+                    }
+                });
+            },
+            //核销
+            dataSubmit : function(formName) {
+                const _this = this;
+                let flag = false;
+                _this.$refs[formName].validate((valid) => {
+                    if (!valid) {
+                        flag = true;
+                        return;
+                    }
+                });
+                if (flag) {
+                    return;
+                }
+                let resultData = {
+                    writeoffId : writeoffId,
+                    writeOffCode : _this.ruleForm.writeOffCode,
+                }
+                AjaxProxy.requst({
+                    app: _this,
+                    data: resultData,
+                    url: basePath + '/admin/activitySignWriteoff/writeoffCodeSubmit',
+                    callback: function (data) {
+                        _this.$message({
+                            message: data.info,
+                            type: 'success',
+                        });
+                        parent.layer.close(parent.layer.getFrameIndex(window.name));
+                        parent.location.reload();
+                    }
+                });
+            },
+
+            cancelSubmit() {
+                this.closeFrame();
+            },
+            closeFrame() {
+                parent.layer.close(parent.layer.getFrameIndex(window.name));
+                parent.location.reload();
+            },
+        }
+    })
+</script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-writeoff.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-writeoff.html
new file mode 100644
index 0000000..806f771
--- /dev/null
+++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-sign-writeoff.html
@@ -0,0 +1,293 @@
+<!DOCTYPE HTML>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="utf-8">
+    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
+    <meta http-equiv="Cache-Control" content="no-siteapp"/>
+    <!-- 本框架基本脚本和样式 -->
+    <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script>
+    <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}">
+    <link rel="stylesheet" th:href="@{/plugin/bootstrap-3.3.5/css/bootstrap.min.css}">
+    <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/>
+
+    <!-- 富文本编辑器 -->
+    <script type="text/javascript" charset="utf-8"
+            th:src="@{/plugin/beditor/ueditor.config.js}"></script>
+    <script type="text/javascript" charset="utf-8"
+            th:src="@{/plugin/beditor/ueditor.all.js}">
+    </script>
+    <script type="text/javascript" charset="utf-8"
+            th:src="@{/plugin/beditor/lang/zh-cn/zh-cn.js}"></script>
+    <style>
+        .panel-body{
+            overflow: hidden;
+        }
+        .paginationStyle{
+            background: #ffffff;
+            padding: 10px 10px;
+            margin: 0px 0px 10px 0px;
+            text-align: right;
+        }
+    </style>
+</head>
+
+<body>
+<div class="panel-body" id="app" v-cloak>
+    <el-row>
+        <el-row style="display:flex;">
+            <el-col>
+                <el-form ref="form" :model="form" inline >
+                    <el-form-item label="中奖人名称" prop="yhmc" >
+                        <el-input v-model="form.yhmc" placeholder="中奖人名称"></el-input>
+                    </el-form-item>
+                    <el-button type="primary" @click="searchFormSignReceive" >搜索</el-button>
+                    <el-button @click="resetFormSignReceive('form')">重置</el-button>
+                </el-form>
+            </el-col>
+        </el-row>
+
+        <el-row class="table-style" >
+            <el-table ref="multipleTable"
+                      :data="signWriteoffList.rows"
+                      :height="height"
+                      stripe:true
+                      @sort-change="sortChange">
+                <el-table-column
+                        prop="writeoffTime"
+                        label="核销时间"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="writeoffUser"
+                        label="核销员"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        label="兑奖码"
+                        show-overflow-tooltip>
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.state == 3">{{scope.row.writeoffCode}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="actName"
+                        label="活动名称"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="awardName"
+                        label="奖品名称"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="winTime"
+                        label="中奖时间"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        label="状态">
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.state == 1">待兑换</span>
+                        <span v-if="scope.row.state == 2">待发货</span>
+                        <span v-if="scope.row.state == 3">已兑换</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        label="兑奖方式">
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.awardWay == 1">线下兑换</span>
+                        <span v-if="scope.row.awardWay == 2">物流配送</span>
+                        <span v-if="scope.row.awardWay == 3">客服兑换</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="receiveName"
+                        label="中奖者"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="receiveAddress"
+                        label="收货地址"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column label="操作" width="200">
+                    <template slot-scope="scope">
+                        <el-button type="primary" v-if="scope.row.awardWay == 2 && scope.row.state == 2"  @click="jumpTologistics(scope.row)" size="mini">发货</el-button>
+                        <el-button type="primary" v-if="scope.row.awardWay != 2 && scope.row.state == 1"  @click="jumpToWriteOff(scope.row)" size="mini">核销</el-button>
+
+                        <el-button type="primary" v-if="scope.row.awardWay == 2"  @click="jumpTologistics(scope.row)" size="mini">查看</el-button>
+                        <el-button type="primary" v-if="scope.row.awardWay != 2"  @click="jumpToWriteOff(scope.row)" size="mini">查看</el-button>
+                    </template>
+                </el-table-column>
+
+            </el-table>
+        </el-row>
+        <el-row class="paginationStyle"  >
+            <el-pagination background
+                           @size-change="changePageSignReceive"
+                           @current-change="changeCurrentPageSignReceive"
+                           :current-page="signWriteoffList.currentPage"
+                           :page-sizes="[10, 20, 30, 50]"
+                           :page-size="signWriteoffList.pageSize"
+                           layout="total, sizes, prev, pager, next, jumper"
+                           :total="signWriteoffList.total">
+            </el-pagination>
+        </el-row>
+    </el-row>
+</div>
+</body>
+<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script>
+<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script>
+<script type="text/javascript" th:src="@{/plugin/bootstrap-3.3.5/js/bootstrap.min.js}"></script>
+<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script>
+<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script>
+<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script>
+<script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script>
+<script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script>
+<script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script>
+
+<script>
+    //获取传输的活动对象
+    var actId = $.query.get("actId");
+
+    var app = new Vue({
+        el: '#app',
+        data: {
+            height:'calc(100vh - 200px)',
+            //--时间选择
+            pickerOptions: {
+                shortcuts: [{
+                    text: '最近一周',
+                    onClick(picker) {
+                        const end = new Date();
+                        const start = new Date();
+                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+                        picker.$emit('pick', [start, end]);
+                    }
+                }, {
+                    text: '最近一个月',
+                    onClick(picker) {
+                        const end = new Date();
+                        const start = new Date();
+                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+                        picker.$emit('pick', [start, end]);
+                    }
+                }, {
+                    text: '最近三个月',
+                    onClick(picker) {
+                        const end = new Date();
+                        const start = new Date();
+                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+                        picker.$emit('pick', [start, end]);
+                    }
+                }]
+            },
+            // 条件查询
+            form:{
+                yhmc:'',
+                order:'',
+                sort:''
+            },
+            //核销列表
+            signWriteoffList:{
+                rows:[],
+                total:0,
+                pageSize:10,
+                currentPage:1,
+            },
+        },
+        created: function () {
+            this.loadInfo();
+        },
+        mounted: function () {
+        },
+        methods: {
+            //加载分类
+            loadInfo() {
+                let _this = this;
+                _this.loadSignWriteoffList();
+            },
+            //跳转到核销
+            jumpToWriteOff(row){
+                layer.full(layer.open({
+                    type: 2,
+                    title: "核销",
+                    maxmin: true,
+                    area: [MUI.SIZE_L, '500px'],
+                    content : [ basePath + '/admin/redirect/activity/activity-sign-writeoff-info?writeoffId=' + row.id]
+                }));
+            },
+            //跳转到发货
+            jumpTologistics(row){
+                layer.full(layer.open({
+                    type: 2,
+                    title: "核销",
+                    maxmin: true,
+                    area: [MUI.SIZE_L, '500px'],
+                    content : [ basePath + '/admin/redirect/activity/activity-sign-logistics-info?writeoffId=' + row.id]
+                }));
+            },
+            //--列表
+            loadSignWriteoffList() {
+                let _this = this;
+                let data=_this.getRequestParamSignWriteoff();
+                data.pageSize=_this.signWriteoffList.pageSize;
+                data.pageNum=_this.signWriteoffList.currentPage;
+                AjaxProxy.requst({
+                    app: _this,
+                    data:data,
+                    url: basePath + '/admin/activitySignWriteoff/findSignWriteoffList',
+                    callback: function (data) {
+                        _this.signWriteoffList.rows = data.rows;
+                        _this.signWriteoffList.total = data.total;
+                    }
+                });
+            },
+            //查询参数
+            getRequestParamSignWriteoff(){
+                let _this = this;
+                return   {
+                    zjzxm:_this.form.yhmc,
+                    order:_this.form.order,
+                    sort:_this.form.sort,
+                }
+            },
+            //查询
+            searchFormSignReceive:function(){
+                this.signWriteoffList.currentPage=1;
+                this.loadSignWriteoffList();
+            },
+            //重置
+            resetFormSignReceive(formName) {
+                this.$refs[formName].resetFields();
+            },
+            changePageSignReceive(val) {
+                this.signWriteoffList.pageSize = val;
+                this.loadSignWriteoffList();
+            },
+            changeCurrentPageSignReceive(val) {
+                this.signWriteoffList.currentPage = val;
+                this.loadSignWriteoffList();
+            },
+            //排序
+            sortChange:function (column){
+                if(column.order){
+                    if(column.order.indexOf("desc")){
+                        this.form.order="desc";
+                    }else{
+                        this.form.order="asc";
+                    }
+                    this.form.sort=column.prop;
+                    this.loadInfo();
+                }
+            },
+        }
+    })
+</script>
+
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.1