PickAuditBiz.java 12.9 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 com.cjs.cms.biz.report.ReportBiz;
import com.cjs.cms.biz.user.fund.UserFinanceBiz;
import com.cjs.cms.dao.user.pick.InventoryDao;
import com.cjs.cms.dao.user.pick.InventoryRecordDao;
import com.cjs.cms.dao.user.pick.OutpropApplyDao;
import com.cjs.cms.dao.user.pick.OutpropApplyPickDao;
import com.cjs.cms.dao.user.pick.WarehouseDao;
import com.cjs.cms.model.pub.ConstInfo;
import com.cjs.cms.model.user.pick.InventoryInfo;
import com.cjs.cms.model.user.pick.InventoryRecordInfo;
import com.cjs.cms.model.user.pick.OutpropApplyInfo;
import com.cjs.cms.model.user.pick.OutpropApplyPickInfo;
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.StringUtil;
import com.cjs.cms.util.t2.T2Result;
import com.cjs.cms.util.t2.T2Util;
import com.cjs.cms.util.web.ActionUtil;

@Service
public class PickAuditBiz {

    private Logger              log = LogManager.getLogger();
    @Autowired
    private OutpropApplyDao     outpropApplyDao;
    @Autowired
    private ReportBiz           reportBiz;
    @Autowired
    private OutpropApplyPickDao pickDao;
    @Autowired
    private UserFinanceBiz      userFinanceBiz;
    @Autowired
    private WarehouseDao        warehouseDao;
    @Autowired
    private InventoryDao        inventoryDao;
    @Autowired
    private InventoryRecordDao  inventoryRecordDao;

    /**
     * 出库确定、审核相关操作
     * @param actionIn 3:审核通过  4:审核否决  5:过期作废
     */
    public Map<String, Object> pickAudit(String positionStr, String actionIn) {
        OutpropApplyInfo applyInfo = outpropApplyDao.queryByPositionStr(positionStr);
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("op_branch_no", "11");
        params.put("op_entrust_way", "7");
        params.put("op_station", "68F728AFE6FE");
        params.put("branch_no", "11");
        params.put("otc_account", applyInfo.getOtcAccount());
        params.put("otc_code", applyInfo.getOtcCode());
        params.put("serial_no", applyInfo.getSerialNo());
        params.put("occur_amount", applyInfo.getOccurAmount());
        params.put("picking_type", applyInfo.getPickingType());
        params.put("picking_address", applyInfo.getPickingAddress());
        params.put("picking_date", applyInfo.getPickingDate());
        params.put("picking_name", applyInfo.getPickingName());
        params.put("otcexch_type", "O1");
        params.put("init_date", applyInfo.getInitDate());
        params.put("action_in", actionIn);
        params.put("user_type", "1");
        params.put("menu_id", "351203");
        params.put("audit_action", "0");
        params.put("fund_account", applyInfo.getFundAccount());
        params.put("client_id", applyInfo.getFundAccount());
        params.put("operator_no", "2001");
        params.put("op_password", "*FP.@e%-/&quot;");
        T2Result result = new T2Result();
        result.setCode(0);
//        T2Result result = T2Util.request(params, "640002");
//        log.info("640002端口返回信息:" + result);
        Map<String, Object> outmap = new HashMap<String, Object>();
        if (result.getCode() == 0) {
            outmap.put("resultCode", 1);
            Map<String, Object> map = new HashMap<String, Object>();
            if (actionIn.equals("1") || actionIn.equals("2")) {
                map.put("ensureDate", DateUtil.getNow(DateEnum.UNSIGNED_DATE));
                map.put("ensureTime", DateUtil.getNow(DateEnum.UNSIGNED_TIME));
                map.put("pickNo", applyInfo.getOpStation());
            } else if (actionIn.equals("3") || actionIn.equals("4")) {
                map.put("auditDate", DateUtil.getNow(DateEnum.UNSIGNED_DATE));
                map.put("auditTime", DateUtil.getNow(DateEnum.UNSIGNED_TIME));
                map.put("pickNo", applyInfo.getOpStation());
            }
            if (!map.isEmpty()) {
                pickDao.updateDate(map);
                map.put("status", actionIn);
                outpropApplyDao.updateStatus(map);
            }
        } else {
            outmap.put("resultCode", 0);
            outmap.put("resultMsg", "错误号:" + result.getCode() + "。错误信息:"
                                    + result.getData().get(0).get("error_info") + "。");
        }
        return outmap;
    }

    /**
     * 批量确定、审核操作
     * @param params
     * @return
     */
    public Map<String, Object> pickOperate(Map<String, Object> params) {
        Map<String, Object> outmap = new HashMap<String, Object>();
        String[] pickNoList = params.get("picklist").toString().split(",");

        String resultMsg = "";
        for (int i = 0; i < pickNoList.length; i++) {
            List<OutpropApplyInfo> list = outpropApplyDao.queryByOpStation(pickNoList[i]);
            OutpropApplyPickInfo pickInfo = pickDao.queryByPickNo(pickNoList[i]);
            boolean flag = true;
            int success = 0;
            for (OutpropApplyInfo applyInfo : list) {
                switch (Integer.parseInt(params.get("actionIn").toString())) {
                    case 1:
                    case 2:
                        if (!applyInfo.getPickStatus().equals("0")) {
                            continue;
                        }
                        break;
                    case 3:
                    case 4:
                        if (!applyInfo.getPickStatus().equals("1")) {
                            continue;
                        }
                        break;
                    case 5:
                        if (!applyInfo.getPickStatus().equals("0")
                            && !applyInfo.getPickStatus().equals("1")) {
                            continue;
                        }
                        break;
                    default:
                        break;
                }
                Map<String, Object> pick = this.pickAudit(applyInfo.getPositionStr(),
                    params.get("actionIn").toString());
                if (pick.get("resultCode").equals(0)) {
                    resultMsg += pick.get("resultMsg");
                    flag = false;
                } else if (pick.get("resultCode").equals(1)) {
                    success++;
                    if (!StringUtil.isBlank(pickInfo.getWarehouseCode())
                        && (("2").equals(params.get("actionIn"))
                            || ("4").equals(params.get("actionIn")))) {
                        Map<String, Object> inventory = new HashMap<String, Object>();
                        inventory.put("warehouseCode", pickInfo.getWarehouseCode());
                        inventory.put("otcCode", applyInfo.getOtcCode());
                        InventoryInfo inventoryInfo = inventoryDao.queryInfo(inventory);
                        inventoryInfo.setFrozenAmount(
                            inventoryInfo.getFrozenAmount() - applyInfo.getOccurAmount());
                        inventoryInfo.setUsefulAmount(
                            inventoryInfo.getUsefulAmount() + applyInfo.getOccurAmount());
                        inventoryDao.updateInventory(inventoryInfo);
                    }
                }
            }
            if (flag && list.size() == success) {
                if (("2").equals(params.get("actionIn")) || ("4").equals(params.get("actionIn"))) {
                    //退还提货包装费
//                    if (pickInfo.getAmountFee() != null && pickInfo.getAmountFee() > 0) {
//                        T2Result result = userFinanceBiz.addSysFund(pickNoList[i],
//                            ConstInfo.Fund.USER_PICK, pickInfo.getClientId(),
//                            pickInfo.getAmountFee(), ConstInfo.Fund.USER_PICK_REMARK);
//                        log.info("退还提货包装费[" + pickNoList[i] + "]:" + result);
//                    }

                } else if ("3".equals(params.get("actionIn"))) {
                    if ("4".equals(pickInfo.getPickType()) || "5".equals(pickInfo.getPickType())) {
                        //审核通过后更新网点库存
                        this.inventoryOperate(pickInfo);
                    }
                }
            }
        }
        outmap.put("resultCode", "1");
        outmap.put("resultMsg", resultMsg);
        if (resultMsg.equals("")) {
            outmap.put("resultMsg", "操作完毕");
        }
        return outmap;
    }

    /**
     * 库存操作_审核通过
     */
    public void inventoryOperate(OutpropApplyPickInfo pickInfo) {
        WarehouseInfo info = warehouseDao.queryByCode(pickInfo.getWarehouseCode());
        List<OutpropApplyInfo> list = outpropApplyDao.queryByOpStation(pickInfo.getPickNo());
        for (InventoryInfo inventory : info.getList()) {
            for (OutpropApplyInfo applyInfo : list) {
                if (inventory.getOtcCode().equals(applyInfo.getOtcCode())) {
                    inventory
                        .setFrozenAmount(inventory.getFrozenAmount() - applyInfo.getOccurAmount());
                    inventory
                        .setTotalAmount(inventory.getTotalAmount() - applyInfo.getOccurAmount());

                    inventoryDao.updateInventory(inventory);

                    InventoryRecordInfo record = new InventoryRecordInfo();
                    record.setInventoryId(inventory.getId());
                    record.setBusinessType("02");
                    record.setOccurAmount(0 - applyInfo.getOccurAmount());
                    record.setPostAmount(inventory.getTotalAmount());
                    record.setRemark("提货审核通过");
                    record.setCreateDate(DateUtil.getNow(DateEnum.UNSIGNED_DATE));
                    record.setCreateTime(DateUtil.getNow(DateEnum.UNSIGNED_TIME));
                    record.setCreateBy(ActionUtil.getUser().getTruename());
                    inventoryRecordDao.save(record);
                }
            }
        }
    }

    /**技术复核*/
    public Map<String, Object> updateCheckStatus(Map<String, Object> params) {
        Map<String, Object> outmap = new HashMap<String, Object>();
        String[] pickNoList = params.get("picklist").toString().split(",");
        String resultMsg = "";
        for (int i = 0; i < pickNoList.length; i++) {
            boolean flag = true;
            List<OutpropApplyInfo> list = outpropApplyDao.queryByOpStation(pickNoList[i]);
            for (OutpropApplyInfo applyInfo : list) {
                if (!applyInfo.getPickStatus().equals("3")) {
                    resultMsg += "提货单号为:" + pickNoList[i] + "的订单不可技术复核。";
                    flag = false;
                }
            }
            if (flag) {
                pickDao.updateCheckStatus(pickNoList[i]);
            }
        }
        outmap.put("resultCode", "1");
        outmap.put("resultMsg", resultMsg);
        if (resultMsg.equals("")) {
            outmap.put("resultMsg", "操作完毕");
        }
        return outmap;
    }

    /**格式化日期为恒生日期*/
    public void formatDate(Map<String, Object> params) {
        String auditStartDate = StringUtil.castString(params.get("auditStart"));
        String auditEndDate = StringUtil.castString(params.get("auditEnd"));
        String pickStartDate = StringUtil.castString(params.get("pickStart"));
        String pickEndDate = StringUtil.castString(params.get("pickEnd"));
        String ensureStartDate = StringUtil.castString(params.get("ensureStart"));
        String ensureEndDate = StringUtil.castString(params.get("ensureEnd"));
        params.put("auditStart", reportBiz.formatDate(auditStartDate));
        params.put("auditEnd", reportBiz.formatDate(auditEndDate));
        params.put("pickStart", reportBiz.formatDate(pickStartDate));
        params.put("pickEnd", reportBiz.formatDate(pickEndDate));
        params.put("ensureStart", reportBiz.formatDate(ensureStartDate));
        params.put("ensureEnd", reportBiz.formatDate(ensureEndDate));
    }

    /**
     * 查询提货信息
     * @param params
     * @return
     */
    public List<Map<String, Object>> search(Map<String, Object> params) {
        List<Map<String, Object>> list = pickDao.search(params);
        for (Map<String, Object> map : list) {
            if ("4".equals(map.get("PICK_TYPE")) || "5".equals(map.get("PICK_TYPE"))) {
                map.put("CODE", map.get("CODE"));
                map.put("NAME", map.get("NAME"));
                map.put("EXPRESS_ADRESS",
                    map.get("PROVINCE").toString() + map.get("CITY").toString()
                                          + map.get("AREA").toString()
                                          + map.get("ADDRESS").toString());
            }
        }
        log.info(list);
        return list;
    }
}