com.maogousoft.wuliu.service.DriverService.java Source code

Java tutorial

Introduction

Here is the source code for com.maogousoft.wuliu.service.DriverService.java

Source

package com.maogousoft.wuliu.service;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang.RandomStringUtils;
import org.joda.time.DateTime;
import org.springframework.util.StringUtils;

import com.jfinal.aop.Before;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.tx.Tx;
import com.maogousoft.wuliu.BaseConfig;
import com.maogousoft.wuliu.common.collections.KV;
import com.maogousoft.wuliu.common.exception.BusinessException;
import com.maogousoft.wuliu.common.json.Param;
import com.maogousoft.wuliu.common.json.Result;
import com.maogousoft.wuliu.common.syslog.ServiceLog;
import com.maogousoft.wuliu.common.util.MD5Util;
import com.maogousoft.wuliu.controller.ServiceContext;
import com.maogousoft.wuliu.domain.Business;
import com.maogousoft.wuliu.domain.Coupon;
import com.maogousoft.wuliu.domain.Dict;
import com.maogousoft.wuliu.domain.Driver;
import com.maogousoft.wuliu.domain.GoldResult;
import com.maogousoft.wuliu.domain.Msg;
import com.maogousoft.wuliu.domain.Pay;
import com.maogousoft.wuliu.domain.User;
import com.maogousoft.wuliu.domain.Vender;
import com.maogousoft.wuliu.domain.VenderReply;
import com.maogousoft.wuliu.service.image.ImageService;

/**
 * @author yangfan(kenny0x00@gmail.com) 2013-4-8 ?11:28:07
 */
public class DriverService {

    public static Result driver_reg_getcode(Param param) {
        String phone = param.getRequiredString("phone");
        if (User.dao.existsPhone(phone)) {
            throw new BusinessException("???.");
        }
        if (Driver.dao.existsPhone(phone)) {
            throw new BusinessException("?:" + phone);
        }
        String captcha = RandomStringUtils.randomNumeric(6);
        String content = "????" + captcha;
        SmsService.send(phone, content);
        VcodeManagerPlugin.me().putVcode(phone, captcha);
        return Result.success("????:" + phone + "?");
    }

    /**
     * ?
     * @param param
     * @return
     */
    public static Result driver_reg(Param param) {
        String phone = param.getRequiredString("phone");
        String vcode = param.getRequiredString("vcode");
        String password = param.getRequiredString("password");
        password = encryptPassword(password);
        //String name = param.getRequiredString("name");
        int start_province = param.getRequiredInt("start_province");
        int start_city = param.getRequiredInt("start_city");
        int end_province = param.getRequiredInt("end_province");
        int end_city = param.getRequiredInt("end_city");
        //??(??)
        String recommender_phone = param.getString("recommender");

        //???
        boolean isValidVcode = VcodeManagerPlugin.me().verifyVcode(phone, vcode);
        if (!vcode.equals("9090980") && !isValidVcode) {
            throw new BusinessException("???.");
        }
        //??
        VcodeManagerPlugin.me().removeVode(phone);

        if (Driver.dao.existsPhone(phone)) {
            throw new BusinessException("?:" + phone);
        }

        Driver driver = new Driver();
        driver.set("phone", phone);
        driver.set("password", password);
        //driver.set("name", name);
        driver.set("recommender", recommender_phone);

        driver.set("start_province", start_province);
        driver.set("start_city", start_city);
        driver.set("end_province", end_province);
        driver.set("end_city", end_city);

        //?
        driver.set("regist_time", new Date());
        driver.set("score1", 5);//?
        driver.set("score2", 5);//?
        driver.set("score3", 5);//?
        driver.set("score", 5);//?
        driver.set("gold", 400);//??0
        driver.set("total_deal", 0);//??0
        driver.set("status", Driver.STATUS_PENDING_AUDIT);//0 ,1-,
        //      driver.set("car_phone", car_phone);//?
        driver.set("modified", new Date());//
        driver.save();

        //
        Record globalUser = new Record();
        globalUser.set("uid", "d" + driver.getInt("id"));
        globalUser.set("password", password);
        globalUser.set("user_type", 1);//0-,1-?
        globalUser.set("data_id", driver.getInt("id"));
        globalUser.set("create_time", new Date());
        Db.save("logistics_global_user", globalUser);

        //ServiceLog.info("[%s] - [%s][?]?", phone, name).save();
        ServiceLog.info("[%s] - [%s][?]?", phone).save();

        UserSessionManager manager = UserSessionManager.me();
        int driverId = driver.getInt("id");
        Session session = manager.createSession(driverId, phone, Session.USER_TYPE_DRIVER);
        String token = session.getToken();

        return Result.success().data("item", new KV("driver_id", driver.getInt("id"), "token", token));
    }

    /**
     * ?
     * @param param
     * @return
     */
    public static Result driver_reg_optional(Param param) {
        ServiceContext.assertLogin();

        int driver_id = ServiceContext.getServiceContext().getUserId();
        Driver driver = Driver.dao.loadDriverById(driver_id);

        //?
        String car_phone = param.getString("car_phone");
        //???
        String driver_name = param.getString("driver_name");
        //?
        String owner_phone = param.getString("owner_phone");
        //
        double car_length = param.getRequiredDouble("car_length");
        //
        int car_type = param.getRequiredInt("car_type");
        //??
        int car_weight = param.getRequiredInt("car_weight");
        //?
        String plate_number = param.getRequiredString("plate_number");
        //?? 1android 2ios
        int device_type = param.getRequiredInt("device_type");
        //?? 
        int start_province2 = param.getIntValue("start_province2");
        int start_city2 = param.getIntValue("start_city2");
        int end_province2 = param.getIntValue("end_province2");
        int end_city2 = param.getIntValue("end_city2");
        //? 
        int start_province3 = param.getIntValue("start_province3");
        int start_city3 = param.getIntValue("start_city3");
        int end_province3 = param.getIntValue("end_province3");
        int end_city3 = param.getIntValue("end_city3");

        driver.set("car_phone", car_phone);
        driver.set("name", driver_name);
        driver.set("owner_phone", owner_phone);
        driver.set("car_length", car_length);
        driver.set("car_type", car_type);
        driver.set("car_weight", car_weight);
        driver.set("plate_number", plate_number);
        driver.set("device_type", device_type);
        driver.set("start_province2", start_province2);
        driver.set("start_city2", start_city2);
        driver.set("end_province2", end_province2);
        driver.set("end_city2", end_city2);
        driver.set("start_province3", start_province3);
        driver.set("start_city3", start_city3);
        driver.set("end_province3", end_province3);
        driver.set("end_city3", end_city3);

        driver.update();
        ServiceLog.info("?[%s]??.", driver.getStr("phone")).save();

        return Result.success();
    }

    /**
     * ???
     * @param param
     * @return
     */
    public static Result driver_authentication(Param param) {
        ServiceContext.assertLogin();//?
        int driver_id = ServiceContext.getServiceContext().getUserId();
        Driver driver = Driver.dao.loadDriverById(driver_id);

        /**? ??/??/*/
        String id_card = param.getString("id_card");
        String id_card_name = param.getString("id_card_name");
        byte[] id_card_photo = param.getBytesFromBase64("id_card_photo");

        /**? ??/??/*/
        String license = param.getString("license");
        String license_name = param.getString("license_name");
        byte[] license_photo = param.getBytesFromBase64("license_photo");

        /**? ??/??/*/
        String registration = param.getString("registration");
        String registration_name = param.getString("registration_name");
        byte[] registration_photo = param.getBytesFromBase64("registration_photo");

        /***/
        byte[] car_photo1 = param.getBytesFromBase64("car_photo1");
        byte[] car_photo2 = param.getBytesFromBase64("car_photo2");
        byte[] car_photo3 = param.getBytesFromBase64("car_photo3");

        driver.set("id_card", id_card);
        driver.set("id_card_name", id_card_name);
        ImageService.saveImageToModel(driver, "id_card_photo", id_card_photo);

        driver.set("registration", registration);
        driver.set("registration_name", registration_name);
        ImageService.saveImageToModel(driver, "registration_photo", registration_photo);

        driver.set("license", license);
        driver.set("license_name", license_name);
        ImageService.saveImageToModel(driver, "license_photo", license_photo);

        ImageService.saveImageToModel(driver, "car_photo1", car_photo1);
        ImageService.saveImageToModel(driver, "car_photo2", car_photo2);
        ImageService.saveImageToModel(driver, "car_photo3", car_photo3);

        driver.update();
        ServiceLog.info("?[%s]??.", driver.getStr("phone")).save();

        return Result.success();
    }

    private static String encryptPassword(String password) {
        boolean encrypt_password = BaseConfig.me().getPropertyToBoolean("encrypt_password", false);
        if (encrypt_password) {
            String encryptedPassword = MD5Util.MD5(password);
            password = encryptedPassword;
        }
        return password;
    }

    public static Object driverlogin(Param param) {
        String phone = param.getRequiredString("phone");
        String password = param.getRequiredString("password");
        password = encryptPassword(password);

        Driver driver = Driver.dao.findFirst("select * from logistics_driver where phone=? and password=?", phone,
                password);

        if (driver == null) {
            ServiceLog.info("?[%s]???.", phone).save();
            return Result.fail("???.");
        } else if (driver.getInt("status") == Driver.STATUS_INVALID) {
            ServiceLog.info("???", phone).save();
            return Result.fail("???");
        } else if (driver.getInt("status") == Driver.STATUS_DELETED) {
            ServiceLog.info("?", phone).save();
            return Result.fail("?");
        } else {
            UserSessionManager manager = UserSessionManager.me();
            int userId = driver.getInt("id");
            Session session = manager.createSession(userId, phone, Session.USER_TYPE_DRIVER);
            String token = session.getToken();

            ServiceLog.info("?[%s]?.", phone).save();
            KV kv = new KV();
            kv.add("token", token);
            kv.add("driver_id", userId);
            kv.add("name", driver.get("name"));
            return Result.success().data("item", kv);
        }
    }

    /**
     *
     * @description ???
     * @author shevliu
     * @email shevliu@gmail.com
     * May 8, 2013 11:22:25 PM
     * @param param
     * @return
     */
    public static Object driverProfile(Param param) {
        ServiceContext.assertLoginAsDriver();

        final int driver_id = ServiceContext.getServiceContext().getUserId();
        Driver driver = Driver.dao.findFirst("select * from logistics_driver where id=? ", driver_id);
        Dict.fillDictToModel(driver);
        if (driver == null) {
            return Result.fail("?");
        } else if (driver.getInt("status") == Driver.STATUS_INVALID) {
            return Result.fail("");
        }
        //XXX 20130514 ??
        //      else if(driver.getInt("status") == Driver.STATUS_PENDING_AUDIT){
        //         return Result.fail("");
        //      }
        else if (driver.getInt("status") == Driver.STATUS_DELETED) {
            return Result.fail("");
        } else {
            KV kv = new KV();
            kv.add("id", driver_id);
            kv.add("phone", driver.getStr("phone"));
            kv.add("name", driver.getStr("name"));
            kv.add("plate_number", driver.get("plate_number"));
            kv.add("recommender", driver.get("recommender"));
            kv.add("gold", driver.get("gold"));
            kv.add("score", driver.get("score"));
            kv.add("score1", driver.get("score1"));
            kv.add("score2", driver.get("score2"));
            kv.add("score3", driver.get("score3"));
            kv.add("online_time", driver.get("online_time"));
            kv.add("online_time_rank", driver.get("online_time_rank"));
            kv.add("order_count", driver.get("order_count"));
            kv.add("order_count_rank", driver.get("order_count_rank"));
            kv.add("recommender_count", driver.get("recommender_count"));
            kv.add("recommender_count_rank", driver.get("recommender_count_rank"));
            kv.add("owner_phone", driver.get("owner_phone"));
            kv.add("id_card", driver.get("id_card"));
            kv.add("id_card_name", driver.get("id_card_name"));
            kv.add("id_card_photo", driver.get("id_card_photo"));
            kv.add("registration", driver.get("registration"));
            kv.add("registration_name", driver.get("registration_name"));
            kv.add("registration_photo", driver.get("registration_photo"));
            kv.add("license", driver.get("license"));
            kv.add("license_name", driver.get("license_name"));
            kv.add("license_photo", driver.get("license_photo"));
            kv.add("car_photo1", driver.get("car_photo1"));
            kv.add("car_photo2", driver.get("car_photo2"));
            kv.add("car_photo3", driver.get("car_photo3"));
            kv.add("start_province", driver.get("start_province"));
            kv.add("start_city", driver.get("start_city"));
            kv.add("end_province", driver.get("end_province"));
            kv.add("end_city", driver.get("end_city"));

            //?
            kv.add("car_type", driver.get("car_type"));
            kv.add("car_length", driver.get("car_length"));
            kv.add("car_weight", driver.get("car_weight"));
            kv.add("device_type", driver.get("device_type"));
            kv.add("total_deal", driver.get("total_deal"));
            kv.add("regist_time", driver.get("regist_time"));

            kv.add("car_phone", driver.get("car_phone"));
            kv.add("start_province2", driver.get("start_province2"));
            kv.add("start_city2", driver.get("start_city2"));
            kv.add("end_province2", driver.get("end_province2"));
            kv.add("end_city2", driver.get("end_city2"));
            kv.add("start_province3", driver.get("start_province3"));
            kv.add("start_city3", driver.get("start_city3"));
            kv.add("end_province3", driver.get("end_province3"));
            kv.add("end_city3", driver.get("end_city3"));
            kv.add("modified", driver.get("modified"));
            kv.add("car_type_str", driver.get("car_type_str"));

            return Result.success().data("item", kv);
        }
    }

    /**
     *
     * @description ??
     * @author shevliu
     * @email shevliu@gmail.com
     * May 26, 2013 5:46:17 PM
     * @param param
     * @return
     */
    public static Object query_pay_history(Param param) {
        ServiceContext.assertLoginAsDriver();
        int page = param.getIntValue("page", 1);
        int pageSize = param.getIntValue("page_size", 10);
        String u_id = "d" + ServiceContext.getServiceContext().getUserId();
        String select = "select id,u_id,pay_money,pay_platform,status,create_time,finish_time ";
        String from = "from logistics_pay where u_id = ? and status = 99 order by id desc";
        Page<Record> pageObj = Db.paginate(page, pageSize, select, from, u_id);
        List<Record> list = pageObj.getList();
        return Result.success().data("items", list);
    }

    /**
     *
     * @description 
     * @author shevliu
     * @email shevliu@gmail.com
     * Jun 3, 2013 12:17:18 AM
     * @param param
     * @return
     */
    public static Object add_vender(Param param) {
        ServiceContext.assertLoginAsDriver();
        String vender_name = param.getRequiredString("vender_name");
        int category = param.getRequiredInt("category");
        String vender_address = param.getRequiredString("vender_address");
        Vender vender = new Vender();
        vender.set("vender_name", vender_name);
        vender.set("category", category);
        vender.set("vender_address", vender_address);

        vender.set("vender_province", param.getInteger("vender_province"));
        vender.set("vender_city", param.getInteger("vender_city"));
        vender.set("vender_district", param.getInteger("vender_district"));
        vender.set("longitude", param.getDouble("longitude"));
        vender.set("latitude", param.getDouble("latitude"));
        vender.set("contact", param.getString("contact"));
        vender.set("vender_mobile", param.getString("vender_mobile"));
        vender.set("vender_phone", param.getString("vender_phone"));
        vender.set("goods_name", param.getString("goods_name"));
        vender.set("normal_price", param.getString("normal_price"));
        vender.set("member_price", param.getString("member_price"));
        vender.set("other", param.getString("other"));
        vender.set("photo1", param.getString("photo1"));
        vender.set("photo2", param.getString("photo2"));
        vender.set("photo3", param.getString("photo3"));
        vender.set("photo4", param.getString("photo4"));
        vender.set("photo5", param.getString("photo5"));
        vender.save();
        return Result.success();
    }

    /**
     *
     * @description 
     * @author shevliu
     * @email shevliu@gmail.com
     * Jun 3, 2013 12:37:04 AM
     * @param param
     * @return
     */
    public static Object add_vender_reply(Param param) {
        ServiceContext.assertLoginAsDriver();
        final int driver_id = ServiceContext.getServiceContext().getUserId();

        VenderReply reply = new VenderReply();
        reply.set("vender_id", param.getRequiredInt("vender_id"));
        reply.set("driver_id", driver_id);
        reply.set("score1", param.getRequiredInt("score1"));
        reply.set("score2", param.getRequiredInt("score2"));
        reply.set("score3", param.getRequiredInt("score3"));
        reply.set("reply_content", param.getString("reply_content"));
        reply.set("is_true", param.getInteger("is_true"));
        reply.set("reply_time", new Date());
        reply.save();
        return Result.success();
    }

    /**
     *
     * @description ??
     * @author shevliu
     * @email shevliu@gmail.com
     * Jun 3, 2013 1:06:14 AM
     * @param param
     * @return
     */
    public static Object query_vender(Param param) {
        ServiceContext.assertLoginAsDriver();
        int page = param.getIntValue("page", 1);
        int pageSize = param.getIntValue("page_size", 10);
        double latitude = param.getRequiredDouble("latitude");
        double longitude = param.getRequiredDouble("longitude");
        String keyword = param.getString("keyword");

        String select = "select * ";
        String from = " from logistics_vender where status=0 ";
        if (StringUtils.hasText(keyword)) {
            from += " and (vender_name like '%" + keyword + "%' or goods_name like '%" + keyword + "%') ";
        }
        from += " order by ACOS(SIN((? * 3.1415) / 180 ) *SIN((latitude * 3.1415) / 180 ) +COS((? * 3.1415) / 180 ) * COS((latitude * 3.1415) / 180 ) *COS((? * 3.1415) / 180 - (longitude * 3.1415) / 180 ) ) * 6380 asc";
        Page<Record> pageObj = Db.paginate(page, pageSize, select, from, latitude, latitude, longitude);
        List<Record> list = pageObj.getList();
        return Result.success().data("items", list);
    }

    /**
     *
     * @description ?
     * @author shevliu
     * @email shevliu@gmail.com
     * Jun 3, 2013 1:11:55 AM
     * @param param
     * @return
     */
    public static Object query_vender_reply(Param param) {
        ServiceContext.assertLoginAsDriver();
        int vender_id = param.getRequiredInt("vender_id");
        int page = param.getIntValue("page", 1);
        int pageSize = param.getIntValue("page_size", 10);
        String select = "select a.*,b.name ";
        String from = " from logistics_vender_reply a left join logistics_driver b on a.driver_id = b.id where vender_id = ? order by id desc";

        Vender vender = Vender.dao.findById(vender_id);
        vender.set("read_time", vender.getInt("read_time") + 1);
        vender.update();
        Page<Record> pageObj = Db.paginate(page, pageSize, select, from, vender_id);
        List<Record> list = pageObj.getList();
        return Result.success().data("items", list);
    }

    /**
     *
     * @description 2?3??
     * @author shevliu
     * @email shevliu@gmail.com
     * Jun 5, 2013 12:22:31 AM
     * @param param
     * @return
     */
    public static Object driver_update_line(Param param) {
        ServiceContext.assertLoginAsDriver();

        final int driver_id = ServiceContext.getServiceContext().getUserId();
        int start_province2 = param.getIntValue("start_province2", 0);
        int start_city2 = param.getIntValue("start_city2", 0);
        int end_province2 = param.getIntValue("end_province2", 0);
        int end_city2 = param.getIntValue("end_city2", 0);
        int start_province3 = param.getIntValue("start_province3", 0);
        int start_city3 = param.getIntValue("start_city3", 0);
        int end_province3 = param.getIntValue("end_province3", 0);
        int end_city3 = param.getIntValue("end_city3", 0);

        Driver driver = Driver.dao.findById(driver_id);
        Date date = driver.getTimestamp("modified");
        long diff = new Date().getTime() - date.getTime();
        int threeDays = 3 * 24 * 60 * 60 * 1000;
        if (diff < threeDays) {
            return Result.fail("??3?");
        }
        driver.set("start_province2", start_province2);
        driver.set("start_city2", start_city2);
        driver.set("end_province2", end_province2);
        driver.set("end_city2", end_city2);
        driver.set("start_province3", start_province3);
        driver.set("start_city3", start_city3);
        driver.set("end_province3", end_province3);
        driver.set("end_city3", end_city3);
        driver.set("modified", new Date());
        driver.update();
        return Result.success();
    }

    /**
     *
     * @description 1,2,3??
     * @param param
     * @return
     */
    public static Object driver_update_line_2(Param param) {
        ServiceContext.assertLoginAsDriver();
        final int driver_id = ServiceContext.getServiceContext().getUserId();

        //1
        int start_province1 = param.getIntValue("start_province1", 0);
        int start_city1 = param.getIntValue("start_city1", 0);
        int end_province1 = param.getIntValue("end_province1", 0);
        int end_city1 = param.getIntValue("end_city1", 0);
        //2
        int start_province2 = param.getIntValue("start_province2", 0);
        int start_city2 = param.getIntValue("start_city2", 0);
        int end_province2 = param.getIntValue("end_province2", 0);
        int end_city2 = param.getIntValue("end_city2", 0);
        //3
        int start_province3 = param.getIntValue("start_province3", 0);
        int start_city3 = param.getIntValue("start_city3", 0);
        int end_province3 = param.getIntValue("end_province3", 0);
        int end_city3 = param.getIntValue("end_city3", 0);
        //?
        Driver driver = Driver.dao.findById(driver_id);
        Date date = driver.getTimestamp("modified");
        long diff = new Date().getTime() - date.getTime();
        int one_hour = 24 * 60 * 60 * 1000;
        if (diff < one_hour) {
            return Result.fail("??1??");
        }

        //?
        if (start_province1 != 0) {
            driver.set("start_province1", start_province1);
            driver.set("start_city1", start_city1);
            driver.set("end_province1", end_province1);
            driver.set("end_city1", end_city1);
            driver.set("modified", new Date());
        }
        //?
        if (start_province2 != 0) {
            driver.set("start_province2", start_province2);
            driver.set("start_city2", start_city2);
            driver.set("end_province2", end_province2);
            driver.set("end_city2", end_city2);
            driver.set("modified", new Date());
        }
        //?
        if (start_province3 != 0) {
            driver.set("start_province3", start_province3);
            driver.set("start_city3", start_city3);
            driver.set("end_province3", end_province3);
            driver.set("end_city3", end_city3);
            driver.set("modified", new Date());
        }

        driver.update();
        return Result.success();
    }

    /**
     * 
     * @description ? 
     * @author shevliu
     * @email shevliu@gmail.com
     * Jun 13, 2013 12:40:58 AM
     * @param param
     * @return
     */
    @Before(Tx.class)
    public static Object driver_coupon(Param param) {
        ServiceContext.assertLoginAsDriver();
        final int driver_id = ServiceContext.getServiceContext().getUserId();
        String card_no = param.getRequiredString("card_no");
        String card_pwd = param.getRequiredString("card_pwd");

        Driver driver = Driver.dao.findById(driver_id);
        Coupon coupon = Coupon.dao.findFirst("select * from logistics_coupon where card_no=? ", card_no);
        if (coupon == null) {
            return Result.fail("???");
        }
        if (!coupon.getStr("card_pwd").equals(card_pwd)) {
            return Result.fail("???");
        }
        if (coupon.getInt("status") == Coupon.STATUS_USED) {
            return Result.fail("???");
        }
        GoldResult goldResult = driver.adjustGold(100);
        coupon.set("uid", "d" + driver_id);
        coupon.set("status", Coupon.STATUS_USED);
        coupon.set("use_time", new Date());
        coupon.update();
        Business.dao.addDriverBusiness(driver_id, Business.BUSINESS_TYPE_RECHARGE, 100, goldResult.getBeforeGold(),
                goldResult.getAfterGold());
        Msg.dao.addDriverMsg(Msg.TYPE_BUSINIESS, "?", "???100", driver_id);
        return Result.success();
    }
}