java110
2023-05-30 3d8ec5c23ef49d0908195c8b5b892920a46aaa8c
Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity
2个文件已添加
5个文件已修改
343 ■■■■■ 已修改文件
java110-core/src/main/java/com/java110/core/factory/AuthenticationFactory.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/factory/GenerateCodeFactory.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/user/IUserV1InnerServiceSMO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/cmd/reserveOrder/DoDiningCmd.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-user/src/main/java/com/java110/user/cmd/user/GeneratorUserQrCodeCmd.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-user/src/main/java/com/java110/user/smo/impl/UserV1InnerServiceSMOImpl.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/factory/AuthenticationFactory.java
@@ -45,7 +45,9 @@
 */
public class AuthenticationFactory {
    private final static String PASSWD_SALT = "hc@java110";
    public final static String PASSWD_SALT = "hc@java110";
    public final static String AES_KEY = "whoisyourdaddy!!";
    /**
     * 偏移变量,固定占8位字节
     */
java110-core/src/main/java/com/java110/core/factory/GenerateCodeFactory.java
@@ -346,10 +346,24 @@
     * @throws GenerateCodeException
     */
    public static String getGeneratorId(String prefix) throws GenerateCodeException {
        return getGeneratorId(prefix,false);
    }
    /**
     * pgId生成
     *
     * @return
     * @throws GenerateCodeException
     */
    public static String getGeneratorId(String prefix,boolean longId) throws GenerateCodeException {
        if (!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))) {
            //2+14+4+6
            //7920230518235714886
            return prefix + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_DEFAULT) + nextId("%06d");
            if(longId) {
                return prefix + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_DEFAULT) + nextId("%06d");
            }else {
                return prefix + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%04d");
            }
        }
        //调用服务
        return getCode(prefix);
java110-interface/src/main/java/com/java110/intf/user/IUserV1InnerServiceSMO.java
@@ -79,4 +79,20 @@
     */
    @RequestMapping(value = "/queryStaffsNoInOrg", method = RequestMethod.POST)
    List<UserDto> queryStaffsNoInOrg(@RequestBody UserDto userDto);
    /**
     * 根据 二维码获取用户手机号
     * @param qrCode
     * @return
     */
    @RequestMapping(value = "/getUserIdByQrCode", method = RequestMethod.POST)
    String getUserIdByQrCode(@RequestBody String qrCode);
    /**
     * 根据 二维码获取用户手机号
     * @param userId
     * @return
     */
    @RequestMapping(value = "/generatorUserIdQrCode", method = RequestMethod.POST)
    String generatorUserIdQrCode(@RequestBody String userId);
}
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
@@ -303,7 +303,7 @@
                getDiscountAmount(Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivableAmount()),
                        Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivedAmount()),
                        calendar.getTime(), feeDto) + "");
        tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId));
        tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId,true));
        tmpPayFeeDetailMonthPo.setRemark("程序计算生成");
        tmpPayFeeDetailMonthPo.setObjName(payFeeMonthOwnerDto.getObjName());
        tmpPayFeeDetailMonthPo.setObjId(payFeeMonthOwnerDto.getObjId());
service-store/src/main/java/com/java110/store/cmd/reserveOrder/DoDiningCmd.java
New file
@@ -0,0 +1,192 @@
package com.java110.store.cmd.reserveOrder;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.annotation.Java110Transactional;
import com.java110.core.context.ICmdDataFlowContext;
import com.java110.core.event.cmd.Cmd;
import com.java110.core.event.cmd.CmdEvent;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.community.CommunitySpacePersonTimeDto;
import com.java110.dto.reserve.ReserveGoodsConfirmOrderDto;
import com.java110.dto.reserve.ReserveGoodsDto;
import com.java110.dto.reserve.ReserveGoodsOrderDto;
import com.java110.dto.reserve.ReserveGoodsOrderTimeDto;
import com.java110.dto.user.UserDto;
import com.java110.intf.store.IReserveGoodsConfirmOrderV1InnerServiceSMO;
import com.java110.intf.store.IReserveGoodsOrderTimeV1InnerServiceSMO;
import com.java110.intf.store.IReserveGoodsOrderV1InnerServiceSMO;
import com.java110.intf.store.IReserveGoodsV1InnerServiceSMO;
import com.java110.intf.user.IUserV1InnerServiceSMO;
import com.java110.po.reserveGoodsConfirmOrder.ReserveGoodsConfirmOrderPo;
import com.java110.po.reserveGoodsOrder.ReserveGoodsOrderPo;
import com.java110.po.reserveGoodsOrderTime.ReserveGoodsOrderTimePo;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
import com.java110.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
 * 就餐 处理类
 */
@Java110Cmd(serviceCode = "reserveOrder.doDining")
public class DoDiningCmd extends Cmd {
    public static final String CODE_PREFIX_ID = "10";
    @Autowired
    private IReserveGoodsOrderV1InnerServiceSMO reserveGoodsOrderV1InnerServiceSMOImpl;
    @Autowired
    private IReserveGoodsOrderTimeV1InnerServiceSMO reserveGoodsOrderTimeV1InnerServiceSMOImpl;
    @Autowired
    private IReserveGoodsV1InnerServiceSMO reserveGoodsV1InnerServiceSMOImpl;
    @Autowired
    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
    @Autowired
    private IReserveGoodsConfirmOrderV1InnerServiceSMO reserveGoodsConfirmOrderV1InnerServiceSMOImpl;
    @Override
    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区");
        Assert.hasKeyAndValue(reqJson, "qrCode", "未包含二维码");
        Assert.hasKeyAndValue(reqJson, "goodsId", "未包含商品");
        ReserveGoodsDto reserveGoodsDto = new ReserveGoodsDto();
        reserveGoodsDto.setGoodsId(reqJson.getString("goodsId"));
        List<ReserveGoodsDto> reserveGoodsDtos = reserveGoodsV1InnerServiceSMOImpl.queryReserveGoodss(reserveGoodsDto);
        Assert.listOnlyOne(reserveGoodsDtos, "就餐不存在");
        ReserveGoodsOrderTimeDto reserveGoodsOrderTimeDto = null;
        int flag = 0;
        int quantity = 0;
        Calendar calendar = Calendar.getInstance();
        reserveGoodsOrderTimeDto = new ReserveGoodsOrderTimeDto();
        reserveGoodsOrderTimeDto.setCommunityId(reqJson.getString("communityId"));
        reserveGoodsOrderTimeDto.setAppointmentTime(DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate()));
        reserveGoodsOrderTimeDto.setHours(calendar.get(Calendar.HOUR) + "");
        reserveGoodsOrderTimeDto.setGoodsId(reqJson.getString("goodsId"));
        flag = reserveGoodsOrderTimeV1InnerServiceSMOImpl.queryReserveGoodsOrderTimesCount(reserveGoodsOrderTimeDto);
        if (flag > 0) {
            throw new CmdException(reserveGoodsOrderTimeDto.getAppointmentTime() + "," + reserveGoodsOrderTimeDto.getHours() + "已经就餐");
        }
        reserveGoodsOrderTimeDto = new ReserveGoodsOrderTimeDto();
        reserveGoodsOrderTimeDto.setCommunityId(reqJson.getString("communityId"));
        reserveGoodsOrderTimeDto.setAppointmentTime(DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate()));
        reserveGoodsOrderTimeDto.setGoodsId(reqJson.getString("goodsId"));
        quantity = reserveGoodsOrderTimeV1InnerServiceSMOImpl.queryReserveGoodsOrderTimesCount(reserveGoodsOrderTimeDto);
        if (quantity > Integer.parseInt(reserveGoodsDtos.get(0).getHoursMaxQuantity())) {
            throw new CmdException("就餐数量超过设定数量");
        }
    }
    @Override
    @Java110Transactional
    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
//校验是否可以预约
        ReserveGoodsDto reserveGoodsDto = new ReserveGoodsDto();
        reserveGoodsDto.setGoodsId(reqJson.getString("goodsId"));
        List<ReserveGoodsDto> reserveGoodsDtos = reserveGoodsV1InnerServiceSMOImpl.queryReserveGoodss(reserveGoodsDto);
        Assert.listOnlyOne(reserveGoodsDtos, "就餐不存在");
        String userId = userV1InnerServiceSMOImpl.getUserIdByQrCode(reqJson.getString("qrCode"));
        if (StringUtil.isEmpty(userId)) {
            throw new CmdException("二维码过期");
        }
        UserDto userDto = new UserDto();
        userDto.setUserId(userId);
        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
        Assert.listOnlyOne(userDtos, "用户不存在");
        ReserveGoodsOrderPo reserveGoodsOrderPo = new ReserveGoodsOrderPo();
        reserveGoodsOrderPo.setOrderId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
        reserveGoodsOrderPo.setGoodsId(reqJson.getString("goodsId"));
        reserveGoodsOrderPo.setCommunityId(reqJson.getString("communityId"));
        reserveGoodsOrderPo.setAppointmentTime(DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate()));
        reserveGoodsOrderPo.setPayWay("1"); // 现金支付
        reserveGoodsOrderPo.setPersonId(userDtos.get(0).getUserId());
        reserveGoodsOrderPo.setPersonName(userDtos.get(0).getName());
        reserveGoodsOrderPo.setPersonTel(userDtos.get(0).getTel());
        reserveGoodsOrderPo.setReceivableAmount(reserveGoodsDtos.get(0).getPrice());
        reserveGoodsOrderPo.setReceivedAmount("0");
        reserveGoodsOrderPo.setType(reserveGoodsDtos.get(0).getType());
        if (StringUtil.isEmpty(reserveGoodsOrderPo.getExtOrderId())) {
            reserveGoodsOrderPo.setExtOrderId("-1");
        }
        reserveGoodsOrderPo.setState(ReserveGoodsOrderDto.STATE_W);
        int flag = reserveGoodsOrderV1InnerServiceSMOImpl.saveReserveGoodsOrder(reserveGoodsOrderPo);
        if (flag < 1) {
            throw new CmdException("保存数据失败");
        }
        //预约时间
        ReserveGoodsOrderTimePo reserveGoodsOrderTimePo = null;
        reserveGoodsOrderTimePo = new ReserveGoodsOrderTimePo();
        reserveGoodsOrderTimePo.setCommunityId(reserveGoodsOrderPo.getCommunityId());
        reserveGoodsOrderTimePo.setGoodsId(reserveGoodsOrderPo.getGoodsId());
        reserveGoodsOrderTimePo.setOrderId(reserveGoodsOrderPo.getOrderId());
        Calendar calendar = Calendar.getInstance();
        reserveGoodsOrderTimePo.setHours(calendar.get(Calendar.HOUR) + "");
        reserveGoodsOrderTimePo.setQuantity("1");
        reserveGoodsOrderTimePo.setTimeId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
        reserveGoodsOrderTimePo.setState(ReserveGoodsOrderTimeDto.STATE_WAIT_CONFIRM);
        reserveGoodsOrderTimeV1InnerServiceSMOImpl.saveReserveGoodsOrderTime(reserveGoodsOrderTimePo);
        // todo 核销预约
        ReserveGoodsOrderTimeDto reserveGoodsOrderTimeDto = new ReserveGoodsOrderTimeDto();
        reserveGoodsOrderTimeDto.setTimeId(reserveGoodsOrderTimePo.getTimeId());
        reserveGoodsOrderTimeDto.setCommunityId(reqJson.getString("communityId"));
        reserveGoodsOrderTimeDto.setState(CommunitySpacePersonTimeDto.STATE_WAIT_CONFIRM);
        List<ReserveGoodsOrderTimeDto> reserveGoodsOrderTimeDtos = reserveGoodsOrderTimeV1InnerServiceSMOImpl.queryReserveGoodsOrderTimes(reserveGoodsOrderTimeDto);
        Assert.listOnlyOne(reserveGoodsOrderTimeDtos, "未包含预约记录");
        ReserveGoodsOrderDto reserveGoodsOrderDto = new ReserveGoodsOrderDto();
        reserveGoodsOrderDto.setOrderId(reserveGoodsOrderTimeDtos.get(0).getOrderId());
        List<ReserveGoodsOrderDto> reserveGoodsOrderDtos = reserveGoodsOrderV1InnerServiceSMOImpl.queryReserveGoodsOrders(reserveGoodsOrderDto);
        Assert.listOnlyOne(reserveGoodsOrderDtos, "预约订单不存在");
        //todo 将 时间修改 核销中
        reserveGoodsOrderTimePo = new ReserveGoodsOrderTimePo();
        reserveGoodsOrderTimePo.setTimeId(reserveGoodsOrderTimeDtos.get(0).getTimeId());
        reserveGoodsOrderTimePo.setState(CommunitySpacePersonTimeDto.STATE_FINISH);
        flag = reserveGoodsOrderTimeV1InnerServiceSMOImpl.updateReserveGoodsOrderTime(reserveGoodsOrderTimePo);
        if (flag < 1) {
            throw new CmdException("核销预约失败");
        }
        ReserveGoodsConfirmOrderPo reserveGoodsConfirmOrderPo = new ReserveGoodsConfirmOrderPo();
        reserveGoodsConfirmOrderPo.setCoId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
        reserveGoodsConfirmOrderPo.setOrderId(reserveGoodsOrderTimeDtos.get(0).getOrderId());
        reserveGoodsConfirmOrderPo.setType(reserveGoodsOrderDtos.get(0).getType());
        reserveGoodsConfirmOrderPo.setGoodsId(reserveGoodsOrderDtos.get(0).getGoodsId());
        reserveGoodsConfirmOrderPo.setCommunityId(reqJson.getString("communityId"));
        reserveGoodsConfirmOrderPo.setTimeId(reserveGoodsOrderTimePo.getTimeId());
        flag = reserveGoodsConfirmOrderV1InnerServiceSMOImpl.saveReserveGoodsConfirmOrder(reserveGoodsConfirmOrderPo);
        if (flag < 1) {
            throw new CmdException("保存数据失败");
        }
        context.setResponseEntity(ResultVo.success());
    }
}
service-user/src/main/java/com/java110/user/cmd/user/GeneratorUserQrCodeCmd.java
New file
@@ -0,0 +1,61 @@
package com.java110.user.cmd.user;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.context.ICmdDataFlowContext;
import com.java110.core.event.cmd.Cmd;
import com.java110.core.event.cmd.CmdEvent;
import com.java110.doc.annotation.*;
import com.java110.intf.user.IUserV1InnerServiceSMO;
import com.java110.utils.exception.CmdException;
import com.java110.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.ParseException;
@Java110CmdDoc(title = "生成用户二维码",
        description = "生成用户的唯一二维码信息",
        httpMethod = "post",
        url = "http://{ip}:{port}/app/user.generatorUserQrCode",
        resource = "userDoc",
        author = "吴学文",
        serviceCode = "user.generatorUserQrCode",
        seq = 10
)
@Java110ResponseDoc(
        params = {
                @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
                @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
                @Java110ParamDoc(name = "data", type = "String", length = 250, defaultValue = "二维码", remark = "二维码"),
        }
)
@Java110ExampleDoc(
        reqBody = "{}",
        resBody = "{'code':0,'msg':'成功','data':'sdsfsdf'}"
)
@Java110Cmd(serviceCode = "user.generatorUserQrCode")
public class GeneratorUserQrCodeCmd extends Cmd {
    @Autowired
    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
    @Override
    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
    }
    @Override
    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
        String userId = context.getReqHeaders().get("user-id");
        String qrCode = userV1InnerServiceSMOImpl.generatorUserIdQrCode(userId);
        context.setResponseEntity(ResultVo.createResponseEntity(qrCode));
    }
}
service-user/src/main/java/com/java110/user/smo/impl/UserV1InnerServiceSMOImpl.java
@@ -16,14 +16,19 @@
package com.java110.user.smo.impl;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.AuthenticationFactory;
import com.java110.user.dao.IUserV1ServiceDao;
import com.java110.intf.user.IUserV1InnerServiceSMO;
import com.java110.dto.user.UserDto;
import com.java110.po.user.UserPo;
import com.java110.utils.cache.CommonCache;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.core.base.smo.BaseServiceSMO;
import com.java110.dto.user.UserDto;
import com.java110.dto.PageDto;
import com.java110.utils.util.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@@ -47,26 +52,26 @@
    @Override
    public int saveUser(@RequestBody  UserPo userPo) {
    public int saveUser(@RequestBody UserPo userPo) {
        int saveFlag = userV1ServiceDaoImpl.saveUserInfo(BeanConvertUtil.beanCovertMap(userPo));
        return saveFlag;
    }
     @Override
    public int updateUser(@RequestBody  UserPo userPo) {
    @Override
    public int updateUser(@RequestBody UserPo userPo) {
        int saveFlag = userV1ServiceDaoImpl.updateUserInfo(BeanConvertUtil.beanCovertMap(userPo));
        return saveFlag;
    }
     @Override
    public int deleteUser(@RequestBody  UserPo userPo) {
       userPo.setStatusCd("1");
       int saveFlag = userV1ServiceDaoImpl.updateUserInfo(BeanConvertUtil.beanCovertMap(userPo));
       return saveFlag;
    @Override
    public int deleteUser(@RequestBody UserPo userPo) {
        userPo.setStatusCd("1");
        int saveFlag = userV1ServiceDaoImpl.updateUserInfo(BeanConvertUtil.beanCovertMap(userPo));
        return saveFlag;
    }
    @Override
    public List<UserDto> queryUsers(@RequestBody  UserDto userDto) {
    public List<UserDto> queryUsers(@RequestBody UserDto userDto) {
        //校验是否传了 分页信息
@@ -84,10 +89,11 @@
    @Override
    public int queryUsersCount(@RequestBody UserDto userDto) {
        return userV1ServiceDaoImpl.queryUsersCount(BeanConvertUtil.beanCovertMap(userDto));    }
        return userV1ServiceDaoImpl.queryUsersCount(BeanConvertUtil.beanCovertMap(userDto));
    }
    @Override
    public int queryStaffsNoInOrgCount(@RequestBody  UserDto userDto) {
    public int queryStaffsNoInOrgCount(@RequestBody UserDto userDto) {
        return userV1ServiceDaoImpl.queryStaffsNoInOrgCount(BeanConvertUtil.beanCovertMap(userDto));
    }
@@ -103,6 +109,28 @@
        List<UserDto> users = BeanConvertUtil.covertBeanList(userV1ServiceDaoImpl.queryStaffsNoInOrg(BeanConvertUtil.beanCovertMap(userDto)), UserDto.class);
        return users;    }
        return users;
    }
    @Override
    public String getUserIdByQrCode(@RequestBody String qrCode) {
        qrCode = AuthenticationFactory.AesDecrypt(qrCode, AuthenticationFactory.AES_KEY);
        JSONObject qrCodeJson = JSONObject.parseObject(qrCode);
        long time = qrCodeJson.getLongValue("time");
        if (DateUtil.getCurrentDate().getTime() - time > 5 * 60 * 1000) {
            throw new IllegalArgumentException("二维码失效");
        }
        return qrCodeJson.getString("userId");
    }
    @Override
    public String generatorUserIdQrCode(@RequestBody String userId) {
        JSONObject qrCodeJson = new JSONObject();
        qrCodeJson.put("userId", userId);
        qrCodeJson.put("time", DateUtil.getCurrentDate().getTime());
        String qrCode = AuthenticationFactory.AesEncrypt(qrCodeJson.toJSONString(), AuthenticationFactory.AES_KEY);
        return qrCode;
    }
}