WarehouseBiz.java 7.7 KB
package com.cjs.cms.biz.user.pick;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.cjs.cms.dao.user.UserAreaDao;
import com.cjs.cms.dao.user.UserCityDao;
import com.cjs.cms.dao.user.UserProvinceDao;
import com.cjs.cms.dao.user.pick.InventoryDao;
import com.cjs.cms.dao.user.pick.OtcCodeDao;
import com.cjs.cms.dao.user.pick.WarehouseDao;
import com.cjs.cms.model.user.pick.InventoryInfo;
import com.cjs.cms.model.user.pick.WarehouseInfo;
import com.cjs.cms.util.lang.DateEnum;
import com.cjs.cms.util.lang.DateUtil;
import com.cjs.cms.util.lang.JsonUtil;
import com.cjs.cms.util.lang.StringUtil;

/**
 * 网点管理
 * @author tongxiaochuan
 *
 */
@Service
public class WarehouseBiz {

    private Logger          log = LogManager.getLogger();
    @Autowired
    private OtcCodeDao      otcCodeDao;
    @Autowired
    private WarehouseDao    warehouseDao;
    @Autowired
    private UserProvinceDao provinceDao;
    @Autowired
    private UserCityDao     cityDao;
    @Autowired
    private UserAreaDao     areaDao;
    @Autowired
    private InventoryDao    inventoryDao;

    /**
     * 查询网点
     * @param params
     * @return
     */
    public List<WarehouseInfo> searchWarehouse(Map<String, Object> params) {
        List<WarehouseInfo> list = warehouseDao.search(params);
        for (WarehouseInfo info : list) {
            info.setProvinceId(provinceDao.queryIdByName(info.getProvince()));
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("city", info.getCity());
            map.put("provinceId", info.getProvinceId());
            info.setCityId(cityDao.queryIdByName(map));
            map.clear();
            map.put("area", info.getArea());
            map.put("cityId", info.getCityId());
            info.setAreaId(areaDao.queryIdByName(map));
            info.setBusinessStartTime(DateUtil.parseDate(
                DateUtil.parseDate(info.getBusinessStartTime(), DateEnum.UNSIGNED_TIME),
                DateEnum.TIME));
            info.setBusinessEndTime(DateUtil.parseDate(
                DateUtil.parseDate(info.getBusinessEndTime(), DateEnum.UNSIGNED_TIME),
                DateEnum.TIME));
            if (!StringUtil.isBlank(info.getUpdateTime())) {
                info.setUpdateTime(DateUtil.parseDate(
                    DateUtil.parseDate(info.getUpdateDate(), DateEnum.UNSIGNED_DATE), DateEnum.DATE)
                                   + " "
                                   + DateUtil.parseDate(DateUtil.parseDate(info.getUpdateTime(),
                                       DateEnum.UNSIGNED_TIME), DateEnum.TIME));
            }
        }
        return list;
    }

    /**
     * 查询、补全网点信息
     * @param code
     * @return
     */
    public WarehouseInfo queryByCode(String code) {
        WarehouseInfo info = warehouseDao.queryByCode(code);
        info.setProvinceId(provinceDao.queryIdByName(info.getProvince()));
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("provinceId", info.getProvinceId());
        map.put("city", info.getCity());
        info.setCityId(cityDao.queryIdByName(map));
        map.clear();
        map.put("cityId", info.getCityId());
        map.put("area", info.getArea());
        info.setAreaId(areaDao.queryIdByName(map));
        info.setBusinessStartTime(DateUtil.parseDate(
            DateUtil.parseDate(info.getBusinessStartTime(), DateEnum.UNSIGNED_TIME),
            DateEnum.TIME));
        info.setBusinessEndTime(DateUtil.parseDate(
            DateUtil.parseDate(info.getBusinessEndTime(), DateEnum.UNSIGNED_TIME), DateEnum.TIME));
        return info;
    }

    /**
     * 网点新增、修改
     * @param info  网点信息
     * @param type  操作类型    1:新增    2:修改
     * @return
     */
    @Transactional
    public String operateWarehouse(WarehouseInfo info) {
        int type = Integer.parseInt(info.getStatus());
        log.info("网点信息:" + info + ",操作类型:" + type);
        if (otcCodeDao.queryByCode(info.getCode()) > 0 && type == 1) {
            return JsonUtil.toFormJson("网点编号已经存在", false);
        }

        if ("".equals(info.getProvinceId()) || "".equals(info.getCityId())
            || "".equals(info.getAreaId())) {
            return JsonUtil.toFormJson("省市区信息必须完整", false);
        }

        info.setProvince(provinceDao.queryByProvinceId(info.getProvinceId()).getProvince());
        info.setCity(cityDao.queryByCityId(info.getCityId()).getCity());
        info.setArea(areaDao.queryByAreaId(info.getAreaId()).getArea());
        info.setBusinessStartTime(
            DateUtil.parseDate(DateUtil.parseDate(info.getBusinessStartTime(), DateEnum.TIME),
                DateEnum.UNSIGNED_TIME));
        info.setBusinessEndTime(DateUtil.parseDate(
            DateUtil.parseDate(info.getBusinessEndTime(), DateEnum.TIME), DateEnum.UNSIGNED_TIME));

        int result;
        if (type == 1) {
            result = warehouseDao.save(info);
        } else {
            info.setUpdateDate(DateUtil.getNow(DateEnum.UNSIGNED_DATE));
            info.setUpdateTime(DateUtil.getNow(DateEnum.UNSIGNED_TIME));
            result = warehouseDao.updateInfo(info);
        }

        if (result > 0) {
            this.operateInventory(info, type);
            return JsonUtil.toFormJson("网点操作完毕", true);
        } else {
            return JsonUtil.toFormJson("网点操作失败", false);
        }
    }

    /**
     * 修改网点库存数据
     * @param info
     */
    public void operateInventory(WarehouseInfo info, int type) {
        List<InventoryInfo> list = info.getList();
        for (int i = list.size() - 1; i >= 0; i--) {
            if (StringUtil.isBlank(list.get(i).getOtcCode())) {
                list.remove(list.get(i));
            }
        }
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("code", info.getCode());
        WarehouseInfo warehouse = warehouseDao.queryByCode(info.getCode());
        if (type != 1) {
            List<InventoryInfo> old = warehouse.getList();
            for (int i = old.size() - 1; i >= 0; i--) {
                for (int j = list.size() - 1; j >= 0; j--) {
                    if (old.get(i).getOtcCode().equals(list.get(j).getOtcCode())) {
                        old.remove(i);
                        list.remove(j);
                        break;
                    }
                }

            }
            log.info("旧数据:" + old);
            for (InventoryInfo inventory : old) {
                inventory.setWarehouseCode(info.getCode());
                inventoryDao.delete(inventory);
            }
        }
        log.info("新数据:" + list);
        for (InventoryInfo inventory : list) {
            if (StringUtil.isBlank(inventory.getOtcCode())) {
                continue;
            }
            inventory.setWarehouseCode(info.getCode());
            inventory.setOtcName(otcCodeDao.queryNameByCode(inventory.getOtcCode()));
            inventory.setTotalAmount(0);
            inventory.setFrozenAmount(0);
            inventory.setUsefulAmount(0);
            inventoryDao.save(inventory);
        }
    }

    /**
     * 网点作废
     * @param code
     * @return
     */
    public String cancelWarehouse(String code) {
        int result = warehouseDao.cancelInfo(code);
        if (result > 0) {
            return JsonUtil.toFormJson("操作成功", true);
        } else {
            return JsonUtil.toFormJson("操作失败", false);
        }
    }
}