diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/GenSequenceIdService.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/GenSequenceIdService.java index 07ea67e..601ab6a 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/GenSequenceIdService.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/GenSequenceIdService.java @@ -1,10 +1,6 @@ package com.lyms.platform.biz.service; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; - +import com.lyms.platform.biz.dal.IGenSequenceIdDao; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -14,7 +10,9 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import com.lyms.platform.biz.dal.IGenSequenceIdDao; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; @Service public class GenSequenceIdService { @@ -29,13 +27,13 @@ public class GenSequenceIdService { private int createSize; - public String poll(String areaCode) { + public String poll() { String s = genSequenceIdDao.poll(); if(StringUtils.isBlank(s)) { generateData(); s = genSequenceIdDao.poll(); } - return areaCode + s; + return s; } /** @@ -52,16 +50,16 @@ public class GenSequenceIdService { private synchronized void generateData() { if(genSequenceIdDao.check()) { List list = new ArrayList<>(); - Integer startValue = Integer.valueOf(genSequenceIdDao.next()); - Integer endValue = startValue + createSize; - for(int i = startValue; i < endValue; i++) { + Long startValue = Long.valueOf(genSequenceIdDao.next()); + Long endValue = startValue + createSize; + for(Long i = startValue; i < endValue; i++) { list.add(String.valueOf(i)); } Collections.shuffle(list); batchInsert(list, 1000); } } - + /** * 批量保存数据 * @param list 数据列表 @@ -80,5 +78,5 @@ public class GenSequenceIdService { genSequenceIdDao.add(commitList); } } - + } diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/CouponMapper.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/CouponMapper.java index 69d1f57..ca6181e 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/CouponMapper.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/CouponMapper.java @@ -16,4 +16,12 @@ public interface CouponMapper { void save(CouponInfo couponInfo); List> findTemp(String hospitalId); + + String findTopName(String hospitalId); + + List> findInfo(Map param); + + Map findValidateParam(Map param); + + void use(Map param); } diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/model/CouponInfo.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/model/CouponInfo.java index ec2f112..4f23935 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/model/CouponInfo.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/model/CouponInfo.java @@ -1,6 +1,7 @@ package com.lyms.platform.permission.model; import java.util.Date; +import java.util.UUID; /** * 优惠券详情 @@ -55,8 +56,16 @@ public class CouponInfo { * 状态:1:未使用 2:已使用 -1:禁用 */ private Integer status; - - + + /** + * 使用优惠券时操作人的id + */ + private String operatorUseId; + + public CouponInfo() { + id = UUID.randomUUID().toString().replace("-", ""); + } + public String getId() { return id; } @@ -129,23 +138,11 @@ public class CouponInfo { this.status = status; } - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("CouponInfo [ "); - sb.append("id=" + id + ","); - sb.append("sequenceId=" + sequenceId + ","); - sb.append("createDate=" + createDate + ","); - sb.append("useDate=" + useDate + ","); - sb.append("userId=" + userId + ","); - sb.append("createUserId=" + createUserId + ","); - sb.append("couponTemplateId=" + couponTemplateId + ","); - sb.append("createHospitalId=" + createHospitalId + ","); - sb.append("usedHospitalId=" + usedHospitalId + ","); - sb.append("status=" + status + ","); - sb.replace(sb.length()-1, sb.length(), " ]"); - return sb.toString(); + public String getOperatorUseId() { + return operatorUseId; } - + public void setOperatorUseId(String operatorUseId) { + this.operatorUseId = operatorUseId; + } } diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/CouponService.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/CouponService.java index 5add244..9c9b8b2 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/CouponService.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/CouponService.java @@ -8,9 +8,11 @@ import com.lyms.platform.common.result.BaseObjectResponse; * @Version: V1.0 */ public interface CouponService{ - BaseObjectResponse create(String userId, String hospitalId); + BaseObjectResponse create(String userId, String hospitalId, Integer createUserId); BaseObjectResponse validate(String userId, String code); BaseObjectResponse findList(String userId, String hospitalId); + + BaseObjectResponse use(String hospitalId, String code, Integer userId); } diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/CouponServiceImpl.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/CouponServiceImpl.java index e8ef202..d8350f3 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/CouponServiceImpl.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/CouponServiceImpl.java @@ -1,16 +1,29 @@ package com.lyms.platform.permission.service.impl; +import com.lyms.platform.biz.service.GenSequenceIdService; import com.lyms.platform.common.result.BaseObjectResponse; import com.lyms.platform.common.result.RespBuilder; import com.lyms.platform.common.result.ResponseCode; +import com.lyms.platform.common.utils.DateUtil; import com.lyms.platform.permission.dao.master.CouponMapper; import com.lyms.platform.permission.model.CouponInfo; import com.lyms.platform.permission.service.CouponService; +import com.lyms.platform.pojo.Patients; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @Author: litao @@ -20,15 +33,48 @@ import java.util.*; @Service public class CouponServiceImpl implements CouponService { + private Logger logger = LoggerFactory.getLogger(CouponServiceImpl.class); + @Autowired private CouponMapper couponMapper; + @Autowired + private GenSequenceIdService genIdService; + + @Autowired + private MongoTemplate mongoTemplate; + @Override - public BaseObjectResponse create(String userId, String hospitalId) { + public BaseObjectResponse create(String userId, String hospitalId, Integer createUserId) { List> temps = couponMapper.findTemp(hospitalId); - System.err.println("CouponServiceImpl.create"); for (Map temp : temps) { - System.err.println(temp); + Object sendType = temp.get("send_type"); + if(sendType != null) {/** 1=全部发放 2=按有效时间发放 */ + CouponInfo couponInfo = new CouponInfo(); + couponInfo.setCreateDate(new Date()); + couponInfo.setCreateHospitalId(hospitalId); + couponInfo.setCreateUserId(String.valueOf(createUserId)); + couponInfo.setSequenceId(genIdService.poll()); + couponInfo.setStatus(1); + couponInfo.setUserId(userId); + if(temp.get("coupon_template_id") != null) { + couponInfo.setCouponTemplateId(temp.get("coupon_template_id").toString()); + } + if("1".equals(sendType.toString())) { + couponMapper.save(couponInfo); + } else if("2".equals(sendType.toString())) { + Object actualStart = temp.get("actual_start"); + Object actualEnd = temp.get("actual_end"); + Object unitType = temp.get("unit_type"); + Object type = temp.get("type"); + if(actualStart != null && actualEnd != null && unitType != null && type != null) { + if(validateDate(userId, Integer.parseInt(actualStart.toString()), Integer.parseInt(actualEnd.toString()), + Integer.parseInt(unitType.toString()), hospitalId, Integer.parseInt(type.toString()))) { + couponMapper.save(couponInfo); + } + } + } + } } return RespBuilder.buildSuccess(); } @@ -38,7 +84,6 @@ public class CouponServiceImpl implements CouponService { Map param = new HashMap<>(); param.put("userId", userId); param.put("code", code); - List couponInfos = couponMapper.findList(param); if(CollectionUtils.isEmpty(couponInfos)) return RespBuilder.buildErro(ResponseCode.COUPON_NOT_FOUND); @@ -53,23 +98,87 @@ public class CouponServiceImpl implements CouponService { return RespBuilder.buildErro(ResponseCode.COUPON_IS_USERD); } - if(!validate(couponInfo)) - return RespBuilder.buildErro(ResponseCode.COUPON_TIME_OUT); + Map data = couponMapper.findValidateParam(param); + if(!validateDate(userId, Integer.parseInt(data.get("actual_start").toString()), Integer.parseInt(data.get("actual_end").toString()), Integer.parseInt(data.get("unit_type").toString()), + data.get("create_hospital_id").toString(), Integer.parseInt(data.get("type").toString()))) + return RespBuilder.buildErro(ResponseCode.COUPON_TIME_OUT); - return null; + return RespBuilder.buildSuccess(ResponseCode.COUPON_IS_NORMAL); } - private boolean validate(CouponInfo couponInfo) { - Date createDate = couponInfo.getCreateDate(); + /** + * 判断当前时间是否满足生成规则的时间 + * @param userId 孕妇id + * @param start 真实的开始时间 + * @param end 真实的结束时间 + * @param unitType 时间单位 1=孕周 2=天数 3=月龄 + * @param hospitalId 医院id + * @param couponType 产检券类型 1=孕妇 2=产妇 3=儿童 + * @return + */ + private boolean validateDate(String userId, Integer start, Integer end, Integer unitType, String hospitalId, Integer couponType) { + Date midDate = null; + Date startDate = null; + Date endDate = null; + if(couponType == 1) {/** 根据末次月经对比 midDate = 末次月经时间 */ + List patients = mongoTemplate.find(Query.query(Criteria.where("type").is(1).and("hospitalId").is(hospitalId).and("pid").is(userId)), Patients.class); + if(CollectionUtils.isEmpty(patients)) { + logger.info("未找到pid: " + userId + ", hospitalId: " + hospitalId + ", type: 1 的孕妇信息"); + return false; + } + midDate = patients.get(0).getLastMenses(); + } else if(couponType == 2 || couponType == 3) {/** 根据分娩时间对比 midDate = 分娩时间 */ + List patients = mongoTemplate.find(Query.query(Criteria.where("type").is(3).and("hospitalId").is(hospitalId).and("pid").is(userId)) + .with(new Sort(Sort.Direction.DESC, "fmDate")), Patients.class); + if(CollectionUtils.isEmpty(patients)) { + logger.info("未找到pid: " + userId + ", hospitalId: " + hospitalId + ", type: 3 的孕妇信息"); + return false; + } + midDate = patients.get(0).getFmDate(); + } - return true; + if(midDate != null) { + if(unitType == 1) { /** 孕周: startDate = lastMenses + start*7、 endDate = lastMenses + end*7 + 6*/ + startDate = DateUtils.addDays(midDate, start * 7); + endDate = DateUtils.addDays(midDate, end * 7 + 6); + } else if(unitType == 2) { /** 天数 stratDate = lastMenses + start、 endDate = lastMenses + end */ + startDate = DateUtils.addDays(midDate, start); + endDate = DateUtils.addDays(midDate, end); + } else if(unitType == 3) { /** 月龄 startDate = lastMenses + start、 endDate = lastMenses + end + 1 如果是31号 计算出来的月份没有31号 取最后一天*/ + startDate = DateUtils.addMonths(midDate, start); + endDate = DateUtils.addMonths(midDate, end + 1); + } + if(DateUtil.isBetween(midDate, startDate, endDate)) { + return true; + } + } + return false; } @Override public BaseObjectResponse findList(String userId, String hospitalId) { Map param = new HashMap<>(); - List couponInfos = couponMapper.findList(param); - return RespBuilder.buildSuccess(couponInfos); + param.put("userId", userId); + param.put("hospitalId", hospitalId); + + Map restMap = new HashMap<>(); + restMap.put("topName", couponMapper.findTopName(hospitalId)); + restMap.put("couponInfos", couponMapper.findInfo(param)); + + return RespBuilder.buildSuccess(restMap); + } + + @Override + public BaseObjectResponse use(String hospitalId, String code, Integer userId) { + Map param = new HashMap<>(); + param.put("hospitalId", hospitalId); + param.put("operatorUseId", userId); + param.put("status", 2); + param.put("useDate", new Date()); + param.put("code", code); + couponMapper.use(param); + return RespBuilder.buildSuccess(); } + } diff --git a/platform-biz-service/src/main/resources/mainOrm/master/CouponMapper.xml b/platform-biz-service/src/main/resources/mainOrm/master/CouponMapper.xml index 5f98eec..4382795 100644 --- a/platform-biz-service/src/main/resources/mainOrm/master/CouponMapper.xml +++ b/platform-biz-service/src/main/resources/mainOrm/master/CouponMapper.xml @@ -13,24 +13,52 @@ + - + sequence_id,create_date,use_date,user_id,create_user_id,coupon_template_id,create_hospital_id,used_hospital_id,status - + insert into coupon_info(id, ) values(#{id},#{sequenceId},#{createDate},#{useDate},#{userId},#{createUserId},#{couponTemplateId},#{createHospitalId},#{usedHospitalId},#{status}) + + + + + + + + + update coupon_info + set use_date = #{useDate}, operator_use_id = #{operatorUseId}, used_hospital_id = #{hospitalId}, status = #{status} + where sequence_id = #{code} + + \ No newline at end of file diff --git a/platform-common/src/main/java/com/lyms/platform/common/result/ResponseCode.java b/platform-common/src/main/java/com/lyms/platform/common/result/ResponseCode.java index 536fbe6..932348b 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/result/ResponseCode.java +++ b/platform-common/src/main/java/com/lyms/platform/common/result/ResponseCode.java @@ -13,7 +13,8 @@ public enum ResponseCode { COUPON_NOT_UNIQUE(1002, "优惠券有多个"), COUPON_TIME_OUT(1003, "优惠券已过期"), COUPON_IS_USERD(1004, "优惠券已被使用"), - COUPON_IS_DISABLED(1005, "优惠券已被禁用"); + COUPON_IS_DISABLED(1005, "优惠券已被禁用"), + COUPON_IS_NORMAL(1006, "正常可使用"); private Integer code; private String msg; diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java b/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java index 83e3e48..30a1de4 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java +++ b/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java @@ -779,9 +779,7 @@ public class DateUtil { } - public static void main(String[] arg) { - System.out.println(getAge(parseYMD("1990-01-9"))); - } + /** * @auther HuJiaqi @@ -836,4 +834,68 @@ public class DateUtil { return null; } } + + /** + * 判断第一个时间 是否大于或等于第二个时间 + * 只对比年月日 相同也返回true + * @param date1 + * @param date2 + * @return + */ + public static boolean isGtOrEq(Date date1, Date date2) { + try { + date1 = ymd.parse(ymd.format(date1)); + date2 = ymd.parse(ymd.format(date2)); + if(org.apache.commons.lang3.time.DateUtils.isSameDay(date1, date2) || date1.after(date2)) { + return true; + } + } catch (Exception e){ + e.printStackTrace(); + } + return false; + } + + /** + * 判断第一个时间 是否小于或等于第二个时间 + * 只对比年月日 相同也返回true + * @param date1 + * @param date2 + * @return + */ + public static boolean isLtOrEq(Date date1, Date date2) { + try { + date1 = ymd.parse(ymd.format(date1)); + date2 = ymd.parse(ymd.format(date2)); + if(org.apache.commons.lang3.time.DateUtils.isSameDay(date1, date2) || date1.before(date2)) { + return true; + } + } catch (Exception e){ + e.printStackTrace(); + } + return false; + } + + /** + * 判断date是否包含于 start 和 end 之间 + * 只对比年月日 包含相同天数 + * @param date + * @param start + * @param end + * @return + */ + public static boolean isBetween(Date date, Date start, Date end) { + if(DateUtil.isGtOrEq(date, start) && DateUtil.isLtOrEq(date, end)) { + return true; + } + return false; + } + + public static void main(String[] arg) throws Exception { + Date now = new Date(); + Date start = y_m_d_h_m_s.parse("2017-01-31 11:11:11"); + Date end = y_m_d_h_m_s.parse("2017-04-30 11:11:11"); + System.out.println(isBetween(now, start, end)); + + System.out.println(org.apache.commons.lang3.time.DateUtils.addMonths(start ,1).toLocaleString()); + } } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/CouponController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/CouponController.java index d1fcccc..ce38b09 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/CouponController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/CouponController.java @@ -1,6 +1,8 @@ package com.lyms.platform.operate.web.controller; +import com.lyms.platform.common.annotation.TokenRequired; import com.lyms.platform.common.base.BaseController; +import com.lyms.platform.common.base.LoginContext; import com.lyms.platform.common.result.BaseObjectResponse; import com.lyms.platform.permission.service.CouponService; import org.springframework.beans.factory.annotation.Autowired; @@ -10,6 +12,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletRequest; + /** * @Author: litao * @Date: 2017/4/27 0027 9:18 @@ -30,8 +34,11 @@ public class CouponController extends BaseController { */ @RequestMapping(method = RequestMethod.PUT, value = "/{userId}/{hospitalId}") @ResponseBody - public BaseObjectResponse create(@PathVariable String userId, @PathVariable String hospitalId) { - return couponService.create(userId, hospitalId); + @TokenRequired + public BaseObjectResponse create(@PathVariable String userId, @PathVariable String hospitalId, HttpServletRequest request) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + return couponService.create(userId, hospitalId, loginState.getId()); +// return couponService.create(userId, hospitalId, 200); } /** @@ -49,8 +56,25 @@ public class CouponController extends BaseController { @RequestMapping(method = RequestMethod.GET, value = "/validate/{userId}/{code}") @ResponseBody - public BaseObjectResponse validate(String userId, String code) { + public BaseObjectResponse validate(@PathVariable String userId, @PathVariable String code) { return couponService.validate(userId, code); } + /** + * 后期再建档的时候 先验证优惠券 然后再使用 这里先不验证优惠券 + * @param code + * @param hospitalId + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.PUT, value = "/use/{code}/{hospitalId}") +// @TokenRequired + @ResponseBody + public BaseObjectResponse testUse(@PathVariable String code, @PathVariable String hospitalId, HttpServletRequest request) { +// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// return couponService.use(code, hospitalId, loginState.getId()); + return couponService.use(hospitalId, code, 110); + } + + } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java index 1fd4381..2117e50 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java @@ -1030,7 +1030,7 @@ public class TestController { @RequestMapping("/poll") @ResponseBody public String poll() { - return genIdService.poll("1234"); + return genIdService.poll(); } /** diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java index e435370..2681198 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java @@ -490,7 +490,8 @@ public class BookbuildingFacade { ticket.setPatientId(p.getId()); ticket.setCreated(new Date()); // ticket.setId(areaCode.getAreaCode() + ticketPid + i); - ticket.setId(genSequenceIdService.poll(areaCode.getAreaCode())); +// ticket.setId(genSequenceIdService.poll(areaCode.getAreaCode())); + ticket.setId(genSequenceIdService.poll()); ticket.setPid(p.getPid()); ticket.setCoupon(CouponEnums.PRENATAL); patientCheckTicketService.addTicket(ticket); diff --git a/platform-operate-api/src/main/resources/database.properties b/platform-operate-api/src/main/resources/database.properties index 1c37561..3120653 100644 --- a/platform-operate-api/src/main/resources/database.properties +++ b/platform-operate-api/src/main/resources/database.properties @@ -80,6 +80,6 @@ mongo_crypto_key=Lymsh@2016 # sequence id configs sequence.create.size=3000 -sequence.index=20000000 +sequence.index=200000000000 sequence.min.size=300 sequence.schedule.expression=0 */1 * * * ? \ No newline at end of file